创建一个长度为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?是未给数组元素赋值导致的默认初始值?为什么会没有赋值成功呢?
while(true)
循环内没有break怎么结束循环?
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]);
}
}
}
package com.huaxin.exer;
public class ArrayExer3 {
public static void main(String[] args){
int[] arr = new int[6];
boolean flag = false;
for(int i = 0; i < arr.length; i++){
arr[i] = (int)(Math.random() * 30) + 1;
while(true){
for(int j = 0; j < i; j++){
if(arr[i] == arr[j]){
flag = true;
break;
}
}
if(flag == true){
arr[i] = (int)(Math.random() * 30) + 1;
flag = false;
continue;
}
break;
}
}
for(int i = 0; i < arr.length; i++){
System.out.println(arr[i]);
}
}
}