2011-12-19 4 views
0

Java에 대한 숙제에 대한 작업을하고 있는데, 프로그램에서 사용자의 10 자리 숫자를 읽은 다음 검색 할 숫자를 요청합니다. 숫자 (오름차순)를 정렬하고 배열에 대해 선형 검색을 수행 한 다음 찾은 아래 첨자 또는 찾을 수 없음을 나타내는 메시지를 반환해야합니다.선형 검색을 반환 할 때 찾을 수없는 하위 번호를 반환해야합니다

내 코드는 아래 첨자를 반환해야하는 경우에도 "찾을 수 없음"응답을 제공합니다. 내 코드를 살펴볼 수 있습니까? if 문을 변경하려고 시도했지만 도움이되지 않았습니다. 필자는 검색 및 정렬 방법에 대한 책 예제를 가능한 한 자세히 사용했습니다 (오류를 지적 할 수 있음).

다음은 코드입니다.

package program11; 
import java.util.Scanner; 

public class ArraySearch { 

    public static void main(String[] args) { 
     double[] arrayBuild = new double[10]; 
     Scanner input = new Scanner(System.in); 

     for (int i = 0; i < arrayBuild.length; i++) { 
      System.out.print("Enter a number."); 
      arrayBuild[i] = input.nextDouble(); 
     } 

     System.out.print("Enter a number to search for "); 
     int objective = input.nextInt(); 

     linearCheck(arrayBuild, objective); 

     if ((objective >= 0) && (objective < arrayBuild.length)) { 
      System.out.println("Found at index: " + objective); 
     } else { 
      System.out.println("Not Found"); 
     } 
    } 

    public static void arraySort(double[] arrayBuild) { 
     for (int i = 1; i < arrayBuild.length; i++) { 
      double currentPoint = arrayBuild[i]; 
      int r; 
      for (r = i - 1; r >= 0 && arrayBuild[r] > currentPoint; r--) { 
       arrayBuild[r + 1] = arrayBuild[r]; 
      } 
      arrayBuild[r + 1] = currentPoint; 
     } 
    } 

    public static double linearCheck(double[] arrayBuild, int objective) { 
     for (int i = 0; i < arrayBuild.length; i++) { 
      if (objective == arrayBuild[i]) 
       return i; 
     } 
     return -1; 
    } 

} 

편집 - 새로운 코드. 이제는 모두 끝났습니다. 배열에없는 숫자를 입력 할 때를 제외하고는 음의 결과가 나타납니다. 예를 들어, 10 8 7 6 5 3 5 3 5 3 5 6을 입력하고 11을 검색하면 선형 검색의 경우 -1, 이진 검색의 경우 -11이됩니다. 내가 할 수있는 한 너의 충고를했다. 나는 지금 무엇을 놓치고 있습니까?

package program11; 
import java.util.Scanner; 
import javax.swing.JOptionPane; 
public class ArraySearch { 

    public static void main(String[] args) { 
     double[] arrayBuild = new double[10]; 
     Scanner input = new Scanner(System.in); 
     int reply = 2; 

for (int i = 0; i < arrayBuild.length; i++) { 
    System.out.print("Enter a number."); 
    arrayBuild[i] = input.nextDouble(); 
     } 
while (reply != 1) { 
     System.out.print("Enter a number to search for "); 
     double objective = input.nextDouble(); 

arraySort(arrayBuild); 
     double linearResult = linearCheck(arrayBuild, objective); 

if (objective >= 0) { 
     System.out.println("Linear search found at index: " + linearResult); 
       } 
else { 
     System.out.println("Not Found (linear)"); 
     } 
     double binaryResult = binaryCheck(arrayBuild, objective); 

if (objective >= 0) { 
System.out.println("Binary search found at index: " + binaryResult); 
       } 
else { 
    System.out.println("Not Found (binary)"); 
     } 
reply = JOptionPane.showConfirmDialog(null, "Continue?"); 
    } 
} 

public static void arraySort(double[] arrayBuild) { 
    for (int i = 1; i < arrayBuild.length; i++) { 
     double currentPoint = arrayBuild[i]; 
     int r; 
     for (r = i - 1; r >= 0 && arrayBuild[r] > currentPoint; r--) { 
      arrayBuild[r + 1] = arrayBuild[r]; 
     } 
     arrayBuild[r + 1] = currentPoint; 
    } 
    } 

public static double linearCheck(double[] arrayBuild, double objective) { 
    for (int i = 0; i < arrayBuild.length; i++) { 
     if (objective == arrayBuild[i]) 
      return i; 
    } 
return -1; 
    } 
public static double binaryCheck(double[] arrayBuild, double objective) { 
    int low = 0; 
    int high = arrayBuild.length - 1; 

    while (high >= low) { 
     int mid = (low + high)/2; 
     if (objective < arrayBuild[mid]) 
      high = mid - 1; 
     else if (objective == arrayBuild[mid]) 
      return mid; 
     else 
     low = mid + 1; 
    } 
return -low - 1; 
    } 
} 
+1

내가 보는 행동과 다르다. 배열을 어디에서 정렬합니까? –

+0

도 나를 위해 작동 – Chris

+0

arraySort 메서드 아래에 배열을 정렬합니다. 그것은 당신을 위해 일하고 있습니까? 10을 입력하면 1이 포함되고 검색 대상으로 1을 선택하면 찾을 수없는 응답이 표시됩니다. =/ – user1082706

답변

1

나는 문제의 원인을 정확히 확인 확실하지 않다,하지만 나는 또한 int 형의 arrayBuild을 만들 것 INTS을 찾고 싶은 경우에 나는 코드

  1. 와 함께 몇 가지 문제를 참조 게다가. 아니면 아무 곳이나 결과를 저장하지 않는 linearCheck 호출 할 때, 두 배로 objective의 유형을 변경하고 입력 이중

  2. 로 사용자를 얻어서 복식를 검색 할 수 있습니다 당신은 변수

    double foundLocation = linearCheck(arrayBuild, objective); 
    
    에 할당한다 문이 훨씬 이해가되지 않을 경우
  3. 당신의, 당신은

    if (foundLocation >= 0) { 
        System.out.println("Found at index: " + foundLocation); 
    } else { 
        System.out.println("Not Found"); 
    } 
    
  4. 당신은 다음과 같이 linearCheck의 반환 값을 사용되어야한다 arraySort을 본사 어디서나 호출하지 말 것.

+0

고마워요! 도움이 됐어. 알아 냈어. 유일한 문제는 그것이 숫자를 반환하고 하위 스크립트를 가져와야한다는 것입니다. 내가 좀 더 엉망이 될거야. – user1082706

+0

기다려 .. 알았어. 네. 감사! – user1082706

1

검색 값을 절대로 저장하지 않습니다. 귀하의 목표는 귀하의 결과와 다릅니다. 다음은 코드 변경입니다.

이 변경을 수행하려면 선형 검사 루틴에 대해 int를 반환해야합니다.

이것은 objective을 정수가 아닌 두 배로 만드는 것입니다.

+0

감사합니다, 나는 당신의 조언을 받아 들였습니다. – user1082706

관련 문제