2016-01-27 52 views
1

我的代碼首先用100個元素生成數組,然後在每個元素中放置隨機生成的數字。我正在嘗試搜索一個數字,如果發現,打印出它的索引。我到目前爲止的代碼是:搜索數組中的數字java

import java.util.Scanner; 

public class Lab01 
{ 

    public static void main(String[] args) 
    { 
     int[] nums = new int[100]; 

     for (int i = 0; i < nums.length; i++) 
     { 
      nums[i] = (int)((Math.random() * 100) + 1); 
      System.out.print(nums[i] + " , "); 
     } 
    System.out.println(); 
    Scanner input = new Scanner(System.in); 
    int num; 
    System.out.println("What number would you like to search for?"); 
    num = input.nextInt(); 
    boolean found = false;   
    for (int i = 0; i < nums.length; i++) 
     { 
      if (num == nums[i]) 
      {    
       found = true; 
       break; 
      } 

      if (found) 
      { 
       System.out.println("That number was found at index" + i); 
       break; 
      } 
      else 
      { 
       System.out.println("That number was not found."); 
       break; 
      } 
     }  
    } 
} 

我把打印語句來查看值,所以我可以確認這是工作,但它總是返回「未找到」。我在這裏錯過了什麼?

+0

您不能保證輸入數量等於**隨機**生成的數字。 – Atri

+0

我建議創建一個隨機生成器:隨機隨機=新隨機(),並使用它的上限:'nums [i] = random.nextInt(100)+ 1'。 除此之外,當你使用它時關閉你的掃描儀:'input.close()'。 – Bifz

回答

1

檢查第一個數字後,您已經打破循環,因此如果第一個數字不匹配,就會打印「找不到該數字」。如果第一個數字匹配,則不打印任何內容。檢查完數組的所有數字後,應該只打印「找不到該數字」。

您的if語句應該在for循環之後,而不是在它之內。

int i = 0; 
for (; i < nums.length; i++) { 
    if (num == nums[i]) {    
     found = true; 
     break; 
    } 
} 
if (found) { 
    System.out.println("That number was found at index" + i); 
} else { 
    System.out.println("That number was not found."); 
} 
+0

不能在循環外使用'i'。 – Andreas

+0

@Andreas在循環之前聲明我。 – Eran

3

嘗試更換該模塊,請看在底部的解釋:

 for (int i = 0; i < nums.length; i++) 
    { 
     if (num == nums[i]) 
     {    
      found = true; 
      break; 
     } 

     if (found) 
     { 
      System.out.println("That number was found at index" + i); 
      break; 
     } 
     else 
     { 
      System.out.println("That number was not found."); 
      break; 
     } 

有了:

int i; // create this 
for (i = 0; i < nums.length; i++) // and remove int from for loop 
    { 
     if (num == nums[i]) 
     {    
      found = true; 
      break; 
     } 
    } 
     if (found) 
     { 
      System.out.println("That number was found at index " + i); 
     } 
     else 
     { 
      System.out.println("That number was not found."); 
     } 

說明
for loop兩個if condtion和從中刪除break聲明並創建之前for loop之前的。

+0

好的,當我用沒有break語句的代碼替換代碼時,我得到'無法將我解析爲變量'。這清除了錯誤,似乎正在工作。說你。 – JavaNoob

+0

@JavaNoob在底部看到解釋:應該創建一個「int i = 0;」 – Abdelhak

+0

如果聲明時將'i'初始化爲0,爲什麼在'for'循環的開頭再次執行? – Andreas