Java浅尝

      做了这么一个作业,觉得挺有趣就发在这里了。

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++){              //如果数组有空位则跳过空位,赋值给新数组
        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);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值