Java不止一次打印答案

时间:2014-01-30 09:11:04

标签: java

嗨我已经实现了一个程序,它应该通过在两个数字的中间搜索来搜索数组中的数字。但它有效,它会多次打印出它在数组中的键吗?

这是我的代码;

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课程。而且,有人提到了调试器?那是什么?

3 个答案:

答案 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()的静态定义有关。请尝试纠正它。

来到调试器。它是一个用于测试和调试其他程序的计算机程序。它有助于分析控件如何在程序中流动。