2016-09-09 3 views
-1

이렇게 가깝습니다. Output입니다. 내 방법은 완벽하게 작동하므로 문제가되지 않습니다. 출력은 가장 좋은 설명을 줄 것이지만 기본적으로 4096 개의 무작위 정수 목록을 인쇄하고 사용자 입력에 숫자를 입력해야합니다. 이 번호를 사용하여 얼마나 많은 루프를 찾았는지 사용자에게 알려야합니다. 문제는 제대로 계산되지 않는다는 것입니다. 출력에있는 숫자는 건너 뛰고 발견되지 않으면 두 개의 if 문을 모두 인쇄합니다. 나는 이미 1d 배열을위한이 프로그램을 만들었고 나는 Arraylist를 사용할 수 없다. 감사!2d 어레이 루프 수가 제대로 작동하지 않습니다.

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

설명하고 싶은 것을 설명하십시오. 많은 코드를 던지면서 "거의 효과가있다"라고 말하지 마십시오. – Kayaman

+0

좋아요, 편집했습니다. 이것이 충분한 지 알려주십시오. – Millie

+0

이상한 점이 있습니다. '4096'의 무작위 정수를 원하지만'4097' 크기의 배열을 만들고있는 중입니다. 또한 2D 배열을 사용하고 있지만 이름 만 알고 있습니다. 두 번째 차원의 크기는 크기가 1이므로 'new int [4097] [1];'은 'new int [4097]'과 거의 같습니다. 'x'와'count2' 변수는 쓸모가 없습니다. 왜냐하면 항상 둘 다'0'이기 때문입니다. – Kayaman

답변

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]); 
    } 
+0

첫 번째 부분은 나를 위해 작동하지 않습니다, 내가 그것을 구현할 때, 그냥 그 번호가 존재 여부 1을 출력합니다. 그러나 두 번째 부분은 Not found 또는 4096을 인쇄한다는 점에서 조금 더 가깝습니다. – Millie

0

먼저 외부 for 루프의 닫기 괄호가 누락 된 것 같습니다.

둘째로, 문제는 break;이 내부 루프에서 벗어나서 외부 루프가 계속 진행된다는 것입니다. 이 문제를 해결하는 한 가지 방법은 두 루프 외부에 부울 플래그를 사용하고 휴식을 취할 때이를 true로 설정하여 외부 루프가 현재 이탈해야한다는 것을 알 수 있습니다.

+0

어떻게 구현할 수 있습니까? – Millie

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++; 
      } 
      } 
     } 
관련 문제