Java浅尝
2016-07-29 15:16
423 查看
做了这么一个作业,觉得挺有趣就发在这里了。
这里面用到了数组的类包Arrays,涉及排序和二分法查询,其他都是最基础的循环语句、条件语句。思路是要删除一个元素,但是还没学怎么删除元素,那就用替换某个数值,然后用条件语句将这个数值跳过,不进行输出,在显示上就达到了“删除”效果。
在增加新元素那里,还可以继续改进,多个空位时随机选择空位添加元素,我这里使用的是空位中的第一个添加元素。实现在空位里随机添加,我的思路是,先声明一个有10元素的默认数组,然后用循环语句依次赋值上目标数组的空位的索引值,随机选择索引值,对应该索引值的位置赋值。大体思路如此,但操作时遇到了不少麻烦:
1、由于需要在最后输出记录的空位数,但本身在循环里,这样更改后的数值滞后于输出命令
2、索引值随机使得需要循环语句,容易变成死循环
3、变量的声明位置需要考虑,内层使用的变量会从外面找,而变量声明在循环体内,会每次循环都恢复到声明的值;需要利用内层对变量的操作改变外层所赋的值
4、为了使输出在所有变量操作完成后进行,单独将输出指令独立出来
最后这部分代码如下:
package exercise0728; import java.util.Arrays; import java.util.Scanner; public class Homework072901 {//随机生成十个元素的数组,可删除随机一个元素,并输出删除的元素 public static int []a=new int[10];//全局声明的数组变量,以赋值00用作删除效果 public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("\n输出随机数组为:"); show(); //初始随机数组 while(true){ //程序循环运行 menu(); //操作选择 int select=sc.nextInt(); //选择指令 switch (select) { case 1: del(); //调用删除 break; case 2: add(); //调用添加 break; case 0: exit(); //调用退出 break; default: System.out.println("输入有误!"); break; } } } public static void show(){ //生成初始随机数数组 for(int i=0;i<10;i++){ a[i]=(int)(Math.random()*1000+1); System.out.print(a[i]+" "); } } public static void menu(){ //选择项目的显示内容 System.out.println("\n\t1、随机删除一个元素\t2、在删除位置加新元素\t0、退出"); } public static void add(){ //在第一个空缺位置添加新元素 int []b=new int[10]; int []c=new int[10]; int z=0,x=0; //计数和传值变量 for(int i=0;i<10;i++){ //获取数组 c[i]=a[i]; } Arrays.sort(c); //对所获得的数组排序 if(Arrays.binarySearch(c, 00)<0){ //如果原先数组不空缺则显示 System.out.println("元素数已满10个,不能添加。"); } System.out.println("----->添加后的数组为:"); for(int i=0;i<10;i++){ b4ce //如果数组有空位则跳过空位,赋值给新数组 if(a[i]!=00){ b[i]=a[i]; }else{ //新数组在对应空位的位置上赋值上新元素 z++; //计数 if(z==1){ b[i]=(int)(Math.random()*1000+1); x=b[i]; //传出新增添的元素值 }else{b[i]=00;} //新数组的空位也设定值为00 } a[i]=b[i]; //将变化后的新数组传递给久数组,达到全局变量更新 if(a[i]!=00){ System.out.print(a[i]+" "); } } System.out.println("\n添加的新元素为:"+x); } public static void del(){ //随机删除一个元素 int z=0; //计数 for(int i=0;i<10;i++){ //记录当前数组有多少空位 if(a[i]==00){ z++; } } if(z!=9){ //如果数组空位不是最大值,则随机删除剩余元素中的一个 int j=(int)(Math.random()*10); if(a[j]==00){ //随机到的是空位 while(true){ //则继续随机,直至不是空位 int r=(int)(Math.random()*10); if(a[r]!=00){ j=r; break; } } } System.out.println("删除的元素为:"+a[j]);//删除的元素是 a[j]=00; //剩余元素删除一个 System.out.println("----->删除后的数组为:"); for(int i=0;i<10;i++){ //跳过已删除元素,输出数组 if(a[i]==00){ continue; } System.out.print(a[i]+" "); } }else{ //判断空位已经最大值,没有元素了 System.out.println("----->已经没有元素了<-----"); } } public static void exit(){ //退出程序 System.out.println("----->已退出<-----"); System.exit(0); } }
这里面用到了数组的类包Arrays,涉及排序和二分法查询,其他都是最基础的循环语句、条件语句。思路是要删除一个元素,但是还没学怎么删除元素,那就用替换某个数值,然后用条件语句将这个数值跳过,不进行输出,在显示上就达到了“删除”效果。
在增加新元素那里,还可以继续改进,多个空位时随机选择空位添加元素,我这里使用的是空位中的第一个添加元素。实现在空位里随机添加,我的思路是,先声明一个有10元素的默认数组,然后用循环语句依次赋值上目标数组的空位的索引值,随机选择索引值,对应该索引值的位置赋值。大体思路如此,但操作时遇到了不少麻烦:
1、由于需要在最后输出记录的空位数,但本身在循环里,这样更改后的数值滞后于输出命令
2、索引值随机使得需要循环语句,容易变成死循环
3、变量的声明位置需要考虑,内层使用的变量会从外面找,而变量声明在循环体内,会每次循环都恢复到声明的值;需要利用内层对变量的操作改变外层所赋的值
4、为了使输出在所有变量操作完成后进行,单独将输出指令独立出来
最后这部分代码如下:
public static void add(){ //在第一个空缺位置添加新元素 int []b=new int[10]; int []c=new int[10]; int []d=new int[10]; int x=0,z=0,t=1; //传值变量以及限制计数 for(int i=0;i<10;i++){ //获取数组 c[i]=a[i]; } Arrays.sort(c); //对所获得的数组排序 if(Arrays.binarySearch(c, 00)<0){ //如果原先数组不空缺则显示 System.out.println("元素数已满10个,不能添加。"); } System.out.println("----->添加后的数组为:"); for(int i=0;i<10;i++){ //如果数组有空位则跳过空位,赋值给新数组 if(a[i]!=00){ b[i]=a[i]; }else{ //新数组在对应空位的位置上赋值上新元素 z++; //计数 d[z-1]=i; b[i]=00; } //System.out.println(z); a[i]=b[i]; //将变化后的新数组传递给久数组,达到全局变量更新 if(t==10&&z!=0){ //当循环至最后一次时执行添加元素,需要在最后执行是因为需要获得所有空位的位置。后一个条件用于限制添加元素,避免已经无空位还在执行使得0位的元素不断变化。 int e=(int)(Math.random()*z); //System.out.println(z+"z "+e+"e "+d[e]+"d[e] "); a[d[e]]=(int)(Math.random()*1000+1); x=a[d[e]]; //传递新元素的值 } t++; } for(int i=0;i<10;i++){ if(a[i]!=00){ System.out.print(a[i]+" "); } } System.out.println("\n添加的新元素为:"+x); }
相关文章推荐
- Java集合,文章收藏
- Java包装类
- 详解Javaweb中常见漏洞的防御二
- java 文件下载支持中文名称
- 解决: Eclipse 提示内存不足
- Java 分布式事务(多数据源)
- Java运行机制及JVM
- 防重复提交专题系列3-3:springmvc下的基于token的防重复提交
- java子线程全部执行完毕执行主线程代码
- JAVA内存模型与线程
- mybatis在spring里的配置
- spring-boot引入log4j
- JAVA(十)java面向对象4-构造函数
- Java 时间类型的处理
- JavaSript模块化---AMD&&CMD
- MyEclipse 2016正式版更新内容
- JAVA(八)java面向对象2-变量和内存分析
- 使用javah来生成.h文件正解
- Java多线程基础学习(二)
- java回调机制讲解