2014-01-30 4 views
0

안녕하세요. 저는 두 숫자의 중간에서 검색하여 배열의 숫자를 검색해야하는 프로그램을 구현했습니다. 그것은 작동하지만, 그것이 배열에 여러 번 가지고있는 열쇠를 인쇄합니까?대답을 두 번 이상 출력합니다. 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 

난 그냥 학교에서 처음으로 자바 코스를 읽는 코드로 좋은 아니에요. 또한 누군가가 디버거를 언급 했습니까? 그게 뭐야?

+1

아 .. 내 눈 .. :(. 디버거는 귀하의 친구입니다 .. –

+0

두 번 답변을 지정하십시오. 출력을 게시하십시오. –

+0

그리고 질문을 제출할 때 영어로 작성하십시오. – Fabinout

답변

0

귀하는 2 회 else if (minarray[x] > 73)입니다. 나는 그들 중 하나가 반대가 아니어야한다고 생각한다. else if (minarray[x] < 73).

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)입니다.

0

첫 번째 관점에서이 문제는 soktaTal() 및 hittaTalet() 메서드의 정적 정의와 관련이 있음을 알 수 있습니다. 시도하고 수정하십시오.

그리고 디버거에 오기. 다른 프로그램을 테스트하고 디버깅하는 데 사용되는 컴퓨터 프로그램입니다. 프로그램에서 컨트롤이 어떻게 흐르고 있는지 분석하는 데 도움이됩니다.