2011-12-19 65 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

這不是我看到的行爲。你在哪裏排序數組? – 2011-12-19 23:38:54

+0

也適用於我 – Chris 2011-12-19 23:41:05

+0

我在arraySort方法下對數組進行排序。它爲你工作?如果我輸入10個數字,其中包含1,並且我選擇1作爲我的搜索目標,則會得到未找到的響應。 =/ – user1082706 2011-12-19 23:44:39

回答

1

我不知道確切知道是什麼原因造成你的問題,但我看到的一些問題與您的代碼

  1. 如果你想被搜索INTS話,我也會讓int類型的arrayBuild以及。或者,你可以通過改變objective類型一倍,讓用戶輸入一個雙

  2. 搜索雙打當你調用linearCheck你是不是把結果存儲在任何地方,你應該把它分配給一個變量

    double foundLocation = linearCheck(arrayBuild, objective); 
    
  3. 你的if語句沒有多大意義,你應該使用的linearCheck返回值如下

    if (foundLocation >= 0) { 
        System.out.println("Found at index: " + foundLocation); 
    } else { 
        System.out.println("Not Found"); 
    } 
    
  4. 你是不要在您的主要任何地方撥打arraySort

+0

謝謝!這有助於我找到答案。現在唯一的問題是它返回的數字,我應該得到下標。我會更多地惹惱它。 – user1082706 2011-12-20 00:05:03

+0

等等..明白了。是的。謝謝! – user1082706 2011-12-20 00:10:29

1

您永遠不會保存您的搜索值。你的目標與你的結果不一樣。這裏是我會做的代碼更改:

int result = linearCheck(arrayBuild, objective); 

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

此更改要求您爲線性檢查例程返回一個int值。

這是除了使objective成爲雙精度而非整數。

+0

謝謝,我接受了你的建議 – user1082706 2011-12-20 00:05:11