一个简单操作集合中数据的练习。

  最近在复习java基础部分,复习到集合类一章。教学视频上有一个简单的操作集合类数据的例子。于是突然想用java面向对象的思想来实现这个例子。

首先来看一下效果。

首先有1-8这么几个选项操作。你可以选择要进行的操作,我这里选了6,输出了集合中的数,这里我并未对集合的数据进行设置,所以输出的是一个默认大小为20的ArrayList集合,里面的数据是我用随机数随机生成的。这里假如不选择8离开系统操作,则会在操作进行完成后回到重新选择选项的状态。

先来看看存放集合的类Array。

package arrayclasser;

import java.util.List;
import java.util.ArrayList;

public class Array {

private List<Integer> list = new ArrayList<Integer>();

public Array() {

}

public List<Integer> getList() {
return list;
}

public void setList(List<Integer> list) {
this.list = list;
}

}

很简单,就在类中放了一个ArrayList集合,提供了get和set方法,没什么好说的。

然后是一个集合工厂类:

package arrayclasser;

import java.util.ArrayList;
import java.util.List;

public class ArrayBuilder {

private Array array=new Array();

public ArrayBuilder() {
List<Integer> list=new ArrayList<Integer>();
for (int i = 0; i <20; i++) {
list.add((int)(Math.random()*20));
}
this.array.setList(list);
}

public ArrayBuilder(int num) {
List<Integer> list=new ArrayList<Integer>();
for (int i = 1; i <= num; i++) {
list.add((int)(Math.random()*num));
}
this.array.setList(list);
}

public Array getArray() {

return this.array;

}

}

代码有点乱,也没写注释(原谅我这个懒癌晚期)。这里我建了一个工厂类,一个有参一个无参构造方法。若调用无参构造方法,则建一个大小为20的ArrayList集合,放入随机生成的20个integer类型数据,若调用有参构造方法,则建一个规定大小的集合,随机生成数据。然后有一个返Array类的get方法。

然后是Operate这个类,对要进行的7个主要操作进行了封装:

package arrayclasser;

import java.util.ArrayList;
import java.util.List;

public class Operate {

private Array array;

private List<Integer> list=new ArrayList<Integer>();

public Operate(Array array) {
super();

this.array = array;

list = this.array.getList();

}

// 查找集合中是否存在这个数

public String judgeById(int id) {
String yes = "数组中有这个数";
String no = "数组中没有这个数";
for(int x:list){
if(x==id){
return yes;
}
}

return no;

}

// 找到最小的数

public int findMinNum() {

int num=list.get(0);
for(int i=1;i<list.size();i++){
if(num>list.get(i)){
num=list.get(i);
}
}
return num;

}

// 找到最大的数

public int findMaxNum() {

int num = list.get(0);

for (int i = 1; i < list.size(); i++) {
if (num < list.get(i)) {
num = list.get(i);
}
}

return num;

}

// 找到所有的质数

public String findAllPrimeNums() {
String prime="";
for (int x : list) {
if (x == 0) {

} else if (x == 1) {

} else if (x == 2) {
prime=prime+x+"\t";
} else if (x == 3) {
prime=prime+x+"\t";
} else {

for (int i = 4; i <= x / 2; i++) {
if (x % i == 0) {
break;
} else if (i == x / 2) {
prime=prime+x+"\t";
}
}
}
}
return prime;
}

// 求和

public int allSum() {
int sum = 0;
for (int x : list) {
sum = sum + x;
}
return sum;
}

// 输出整个数组

public List<Integer> findAll() {
return list;
}

}

这个类必须要传入一个Array类才能进行操作。所以一个传参的构造方法,然后这个几个操作的实现方法,方法很简单,我就不在过多描述了。

接下来就是主函数了。

package arrayclasser;

import java.util.Scanner;

public class Test {
public static void main(String[] args) {
Array array = null;
Operate op = null;
while (true) {
int i = 0;
String str = "欢迎使用" +"\n" + "1 查找集合中是否存在这个数"
+ "\n" + "2 找到集合最小的数" + "\n" + "3 找到集合最大的数" + "\n"
+ "4 找到集合中所有的质数" + "\n" + "5 求和" + "\n" + "6 输出整个集合" + "\n"
+ "7 自定义集合大小" + "\n" + "8 离开系统" +"\n" + "请选择要进行的操作" ;
System.out.println(str);
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
i = Integer.parseInt(scanner.nextLine());
System.out.println();
if (i == 1) {
System.out.print("请输入要查找的数");
int x = Integer.parseInt(scanner.nextLine());
if (array == null) {
ArrayBuilder ab = new ArrayBuilder();
array = ab.getArray();
}
if (op == null) {
op = new Operate(array);
}
str = op.judgeById(x);
System.out.println(str);
} else if (i == 2) {

if (array == null) {
ArrayBuilder ab = new ArrayBuilder();
array = ab.getArray();
}
if (op == null) {
op = new Operate(array);
}
int x = op.findMinNum();
System.out.println(x);
} else if (i == 3) {
if (array == null) {
ArrayBuilder ab = new ArrayBuilder();
array = ab.getArray();
}
if (op == null) {
op = new Operate(array);
}
int x = op.findMaxNum();
System.out.println(x);
} else if (i == 4) {
if (array == null) {
ArrayBuilder ab = new ArrayBuilder();
array = ab.getArray();
}
if (op == null) {
op = new Operate(array);
}
String x = op.findAllPrimeNums();
System.out.println(x.toString());
} else if (i == 5) {
if (array == null) {
ArrayBuilder ab = new ArrayBuilder();
array = ab.getArray();
}
if (op == null) {
op = new Operate(array);
}
int x = op.allSum();
System.out.println(x);
} else if (i == 6) {

if (array == null) {
ArrayBuilder ab = new ArrayBuilder();
array = ab.getArray();
}
if (op == null) {
op = new Operate(array);
}
int s=0;
for (int z : array.getList()) {
System.out.print(z+"\t");
s++;
if(s%5==0){
System.out.println();
}
}
System.out.println();

} else if (i == 7) {
System.out.print("请输入大小");
int x = Integer.parseInt(scanner.nextLine());
ArrayBuilder ab = new ArrayBuilder(x);
array = ab.getArray();
System.out.println("修改成功");
} else if (i == 8) {
System.exit(0);
}

}
}
}

主函数很繁琐,庞大。按理说这是不应该出现的,我应该把判断1-8操作的过程写个类封装起来,在主函数中只调用输出就行了,但由于时间关系我这里就不给予实现了,有兴趣的童鞋可以自行给予实现。这是我的第一篇博客,有很多不足的地方。不过无所谓,来日方长,在接下来的日子里,随着我学习的东西越来越多,我的能力也会不断的增长,写的blog也会越来越好,希望走在程序猿这条路上的小伙伴,共勉!

posted @ 2017-03-05 22:52  HelloWorld_Du  阅读(268)  评论(0编辑  收藏  举报