面相对象思想
万物皆对象,在写程序前应该先找出该对象应该具有的属性(名词)方法(动词)。
写一个方法要从宏观到微观的写,先写输入输出,在用文字描述具体步骤,最后再来写细节的实现。
俄罗斯轮盘设计思想
- 分成三个类Player、Gun、Game
- Gun。属性:弹夹(使用Boolean类型数组),弹针位置。方法:开枪、装子弹
- Player。属性:玩家姓名。方法:射击
- Game。属性:Player[],Gun。方法:star()
商品类别选择
Categrory类。属性name、Category[] children;
class Category {
private String name;//类名
private Category[] children;//下级类可用一个数组装载
}
public class Work {
public static void main(String[] args) {
Category[] main = getCas(new String[]{"电子产品","书籍","家具"});
//电子产品-下级分类
Category[] children0 = getCas(new String[]{"电脑","手机","相机"});
children0[0].setChildren(getCas(new String[]{"Dell","Lenovo"}));
children0[1].setChildren(getCas(new String[]{"小米","华为"}));
children0[2].setChildren(getCas(new String[]{"佳能","尼康","莱卡"}));
main[0].setChildren(children0);
}
//使用字符串数组给category数组赋值并返回
static Category[] getCas(String[] str) {
Category[] children = new Category[str.length];
for(int i = 0; i<str.length; i++) {
children[i] = new Category(str[i]);
}
return children;
}
多维数组的构造
String str[][][][] = {{{{"电子产品"}},{{"电脑"},{"Dell","Lenovo"}},{{"手机"},{"小米","华为","苹果"}},{{"相机"},{"佳能","尼康"}}},
{{{"书籍"}},{{"社会科学"},{"思考快与慢"},{"选择学说"},{"超越自卑"}},{{"自然科学"},{"进化论"},{"时间简史"}},{{"虚拟类"},{"三体"},{"战争与和平"}}},
{{{"家具"}},{{"衣柜"},{"高衣柜","矮衣柜"}},{{"沙发"},{"大沙发","小沙发"}},{{"桌子"},{"写字桌","餐桌"}}}
};
-
构造思想
构造思维数组思想.png
小知识点
//随机选择一个玩家开始,length是玩家数组长度
//nextInt(100)是让随机数分配的更均匀
int index = new Random().nextInt(100)%length;
while(true) {
//玩家轮流射击,直到有一人dead程序退出
//%数组长度可以让index不断增加后依然在数组内循环
plas[index++%length].shot(gun);
}
仿制一个ArrayList
public class MyArrayList {
private int[] content;
private int size=0;
public MyArrayList() {
//默认初始化分配6个长度给数组
content = new int[6];
}
//获取数组元素数量
public int getSize() {
return size;
}
//根据值元素值删除元素
public boolean delete(int value) {
for(int i = 0; i<content.length; i++) {
if(content[i] == value) {
//有和传入的值相等的元素,后面的元素就向前覆盖
for(int j = i; j<content.length-1;j++) {
content[j] = content[j+1];
}
//大小减一
size--;
return true;
}
}
return false;
}
//返回插入元素的下标
public int add(int value) {
//如果size数组已经满了就重新分配空间
if(size==content.length) {
//+length/2 + 1 的原因是防止length为0时无法增加
int[] temp = new int[content.length+content.length/2+1];
//拷贝老数组元素到新数组
for(int i =0;i<content.length;i++) {
temp[i]=content[i];
}
//把新元素付给新数组
temp[content.length] = value;
//把新数组赋值给老数组
content = temp;
//长度加一
size++;
return size-1;
}
content[size] = value;
size++;
return size-1;
}
//根据下标获取值
public int getValue(int index) {
if(index<0||index>=size) {
System.out.println("数组越界!");
System.exit(0);
}
return content[index];
}
}
网友评论