嗨我已经实现了一个程序,它应该通过在两个数字的中间搜索来搜索数组中的数字。但它有效,它会多次打印出它在数组中的键吗?
这是我的代码;
import java.util.Arrays;
public class Sokning_exkod_2 {
public static void main(String[] args) {
int[] minarray = new int[100];
int antalelement = minarray.length;
for (int i = 0; i<antalelement; i++) {
minarray[i] = (int) (Math.random()*100)+1;
}
Arrays.sort(minarray);
for (int i = 0; i<antalelement; i++) {
if (i%25 == 0 && i != 0){
System.out.println("| ");
}
System.out.print(minarray[i] + " ");
}
for(int i=0; i < antalelement; i++){
if(minarray[i] == 73){
hittaTalet(minarray);
break;
}
else if(i == antalelement-1){
System.out.println("Talet 73 finns inte i arrayen");
}
}
}
static void hittaTalet (int[] minarray){
int y = minarray.length-1;
int x = minarray.length/2;
int soktaTal = 0;
sokTal(minarray, y, x, soktaTal);
}
static void sokTal(int[] minarray, int y, int x, int soktaTal){
int y2;
boolean hittat = false;
while(x < y || hittat == false){
if(minarray[x] == 73){
soktaTal++;
hittat = true;
break;
}
else if(minarray[x] > 73){
soktaTal++;
y2 = x;
x = mittenHigh(y, x);
y = y2;
sokTal(minarray, y, x, soktaTal);
}
else if(minarray[x] < 73){
soktaTal++;
x = mittenLow(y, x);
sokTal(minarray, y, x, soktaTal);
}
}
System.out.println("Talet 73 var på plats " + x + " och det tog " + soktaTal + " sökningar"); /* this part is only supposed to print out once */
}
static int mittenLow(int y, int x){
return x+((y-x)/2);
}
static int mittenHigh(int y, int x){
return x-((y-x)/2);
}
}
输出示例:
1 1 1 2 2 3 3 3 5 5 |
5 6 6 7 7 8 10 12 13 13 |
14 15 15 17 18 18 21 22 22 22 |
23 26 27 29 31 31 31 32 33 34 |
37 38 39 39 39 39 41 43 43 44 |
45 45 47 47 48 49 52 54 55 56 |
59 59 64 64 65 65 66 68 69 71 |
71 73 74 74 80 80 81 81 82 82 |
83 84 85 85 85 86 87 87 87 88 |
90 90 90 90 94 96 96 99 99 99 x är 50 + y är 99
x är 74 + y är 99
x är 62 + y är 74
x är 68 + y är 74
Talet 73 var på plats 71 och det tog 5 sökningar // <- this should only be printed once
Talet 73 var på plats 71 och det tog 5 sökningar
x är 68 + y är 74
Talet 73 var på plats 71 och det tog 5 sökningar
Talet 73 var på plats 71 och det tog 5 sökningar
x är 62 + y är 74
x är 68 + y är 74
Talet 73 var på plats 71 och det tog 5 sökningar
Talet 73 var på plats 71 och det tog 5 sökningar
x är 68 + y är 74
Talet 73 var på plats 71 och det tog 5 sökningar
Talet 73 var på plats 71 och det tog 5 sökningar
x är 74 + y är 99
x är 62 + y är 74
x är 68 + y är 74
Talet 73 var på plats 71 och det tog 5 sökningar
Talet 73 var på plats 71 och det tog 5 sökningar
x är 68 + y är 74
Talet 73 var på plats 71 och det tog 5 sökningar
Talet 73 var på plats 71 och det tog 5 sökningar
x är 62 + y är 74
x är 68 + y är 74
Talet 73 var på plats 71 och det tog 5 sökningar
Talet 73 var på plats 71 och det tog 5 sökningar
x är 68 + y är 74
Talet 73 var på plats 71 och det tog 5 sökningar
Talet 73 var på plats 71 och det tog 5 sökningar
我不熟悉代码,只是在学校读我的第一个java课程。而且,有人提到了调试器?那是什么?
答案 0 :(得分:0)
您有2次else if (minarray[x] > 73)
。我想其中一个不应该是那个,而是相反的检查else if (minarray[x] < 73)
。
答案 1 :(得分:0)
else if(minarray[x] > 73){
soktaTal++;
System.out.println("x är " + x + " + " + " y är " + y);
y2 = x;
x = mittenHigh(y, x);
y = y2;
sokTal(minarray, y, x, soktaTal);
}
else if(minarray[x] < 73)
已经是这样了?一个是if(minarray [x] <73)而另一个是if(minarray [x]> 73)。
答案 2 :(得分:0)
从第一个观点可以清楚地看出问题与方法soktaTal()和hittaTalet()的静态定义有关。请尝试纠正它。
来到调试器。它是一个用于测试和调试其他程序的计算机程序。它有助于分析控件如何在程序中流动。