您的位置:首页 > 编程语言 > Java开发

Java浅尝

2016-07-29 15:16 423 查看
做了这么一个作业,觉得挺有趣就发在这里了。

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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: