2016-01-27 5 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 Итак, объявляем i перед циклом. – 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 и создайте int i = 0 до for loop, как указано выше.

+0

OK, когда я заменил код блоком без инструкций break, я получал «не могу разрешить i переменной». Это очистило эту ошибку и, похоже, работает. Это ты. – JavaNoob

+0

@JavaNoob см. Объяснение внизу: должно создать «int i = 0;» – Abdelhak

+0

Если вы объявили 'i' равным 0 при объявлении, зачем это делать снова в начале цикла' for'? – Andreas

Смежные вопросы