Lil Zhao 2022-01-05 13:01 采纳率: 0%
浏览 114

JavaSE数组小题目:创建一个长度为6的int型数组,要求取值为1-30,同时元素值各不相同

创建一个长度为6的int型数组,要求取值为1-30,同时元素值各不相同

先是答案中的代码:

//创建初始化数组        
        int[] arr = new int[6];
//数组元素依次赋值        
        for (int i = 0; i < arr.length; i++) {// [0,1) [0,30) [1,31)        
            arr[i] = (int) (Math.random() * 30) + 1;
//判断,保证数组元素各不相等,当i=0时不满足判断条件,即arr[0]赋值无需去重
//此操作可以保证数组已经赋的值各不相同,只需判断当次赋值是否合格            
//利用j,从下标为0遍历至当前的i-1位置,
//         若出现重复,i自减1,即当次arr[i]赋值不合格,重新为此arr[i]赋随机值

                for (int j = 0; j < i; j++) {
                    if (arr[i] == arr[j]) {
                        i--;
                        break;
                    }
                }
                
        }
//遍历数组元素并输出    
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }

这段代码是我自己的:

//1.创建长度为6的数组
        int[] arr = new int[6];
//2.首个元素一定不重复,给首个元素赋值
        arr[0] = (int)(Math.random()*30)+1;    
//3.数组赋值,构造循环结构,不断生成随机数 num  
//  num若不和arr[0]到arr[i-1]中任意一个相同,则满足条件,赋给arr[i]        
        for(int i=1 ; i<arr.length ; i++){
                                
            
                label: while(true){                
                        int num = (int)(Math.random()*30)+1;    
                    
                        for(int j=0;j<i;j++){    
                        
                                if(arr[j] != num)    //执行一轮以后,若一直不相等,说明num合格
                                    continue;
                                else
                                    continue label;
                        }
                
                        arr[i] = num;                                
                }
                    
        }
        
//4.遍历数组元素并输出    
        for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i]);
        }

1.我自己的结构是 label 加在while前,
代码运行时无输出结果,逻辑上感觉没有问题,但是 for 中 i++ 提示为dead code,程序陷入死循环
2.尝试将 label 加在外层for循环前,
①代码可以正常运行,每次生成的6个数组元素各不相同,但生成的数组元素会出现 0,这是为什么?
②这种结构不符合逻辑,每次遇到生成的随机 num ,如果和数组中 arr[0] 到 arr[i-1] 中任意一个相同,
就要执行外层for,从arr[0]开始重新给数组元素赋值再判断

我想问下,1.为什么用我的这种带标签的continue编写程序会使外层的i++成为dead code?
2.为什么生成的数中会有0?是未给数组元素赋值导致的默认初始值?为什么会没有赋值成功呢?

  • 写回答

2条回答 默认 最新

  • CSDN专家-sinJack 2022-01-05 13:12
    关注

    while(true)
    循环内没有break怎么结束循环?

    img

    public class Main {
        public static void main(String[] args) {
            //1.创建长度为6的数组
            int[] arr = new int[6];
            //2.首个元素一定不重复,给首个元素赋值
            arr[0] = (int)(Math.random()*30)+1;
            //3.数组赋值,构造循环结构,不断生成随机数 num
            //  num若不和arr[0]到arr[i-1]中任意一个相同,则满足条件,赋给arr[i]
            for(int i=1 ; i<arr.length ; i++){
                label: while(true){
                    int num = (int)(Math.random()*30)+1;
                    for(int j=0;j<i;j++){
                        if(arr[j] != num)    //执行一轮以后,若一直不相等,说明num合格
                            continue;
                        else
                            break label;
                    }
                    arr[i] = num;
                }
            }
            //4.遍历数组元素并输出
            for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i]);
            }
        }
    }
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 1月5日