所以这很接近完成,这是 Output。我的方法工作得很好,所以这不是问题。输出将给出最好的解释,但基本上我必须打印4096个随机整数列表并询问用户输入的数字。有了这个数字,我必须告诉用户找到它需要多少循环。问题在于它没有正确计算。它会跳过输出中的数字,如果找不到,则会打印两个if语句。我已经为1d数组构建了这个程序,我无法使用Arraylist。谢谢!
Scannner s = new Scanner(System.in);
int[][] input = new int[5][1];
int[][] arrayone = new int[4097][1];
int loop = 0;
for (int id = 0; id < input.length; id++) {
for (int x = 0; x <input[id].length; x++) {
System.out.println("Please enter a number between " + min + " and " + max);
input[id][x] = s.nextInt();
if (min <= input[id][x] && input[id][x] <= max) {
for (int count = 0; count < arrayone.length; count++) {
for (int count2 = 0; count2 < arrayone[count].length; count2++) {
if (arrayone[count][count2] != input[id][x]) {
loop++;
}
else {
break;
}
}
}
if (input[id][x] != arrayone.length){
System.out.println("It took " + loop + " time(s) to find the number " + input[id][x]);
}
if(loop > 4096) {
System.out.println(input[id][x] + " was not found");
}
loop = 0;
}
}
更新
我已经使用下面的部分代码来更新我自己的代码,现在找不到打印件或4096,这里是Updated Output。以下是我根据建议对代码所做的更改:
if(loop > 4096) {
System.out.println(input[id][x] + " was not found");
}
else{
System.out.println("It took " + loop + " time(s) to find the number " + input[id][x]);
}
loop = 0;
答案 0 :(得分:0)
正如评论中所提到的,您的代码有一些需要解决的奇怪问题,尤其是维度。这掩盖了这样一个事实:你没有突破外部循环以使用break语句结束搜索过程,因为一个未标记的中断只会突破最内层的循环。假设您创建的2D数组具有多个维度,则可以使用标签来突破外部循环。
outerloop:
for (int count = 0; count < arrayone.length; count++) {
for (int count2 = 0; count2 < arrayone[count].length; count2++) {
loop++; //assume first check counts as one loop
if (arrayone[count][count2] == input[id][x]) {
break outerloop;
}
}
}
对于您的第二个问题,您可能需要更正数字,因为您修复了程序代码中的奇怪之处,但由于您的程序只有两个结果(找到或找不到数字),您可以使用简单的if / else语句,每次搜索只写一个输出对话。
if(loop > 4096) {
System.out.println(input[id][x] + " was not found");
}
else{
System.out.println("It took " + loop + " time(s) to find the number " + input[id][x]);
}
答案 1 :(得分:0)
首先,您似乎错过了for for for循环的结束括号。
其次,问题是break;
仅突破内循环,因此外循环仍将继续。修复此问题的一种方法是在两个循环外部使用布尔标志,并在想要中断时将其设置为true,这样外部循环就可以知道它现在应该突破。
答案 2 :(得分:0)
非常感谢你们!我搞定了!我就这样做了:
boolean foundit = false;
// if (min <= input[id][x] && input[id][x] <= max) {
for (int count = 0; count < arrayone.length && !foundit; count++) {
for (int count2 = 0; count2 < arrayone[count].length; count2++) {
if (arrayone[count][count2] == input[id][x]) {
foundit = true;
break;
}
else {
loop++;
}
}
}