2016-10-15 2 views
1

Довольно простой вопрос, но мне в основном дали код для отладки, и я исправил все ошибки, кроме одного. При попытке сделать программу более дружественной и включить обработку ошибок, я обнаружил, что сообщение об ошибке вызывается, даже если условие выполнено (то есть число в массиве, которое пользователь ищет, фактически существует в массиве). Не ища прямого ответа, просто намек. Я пробовал использовать комбинации if/else, а также перемещать фигурные скобки.Обработка ошибок (Java)

Scanner input = new Scanner(System.in); 
    System.out.println("Enter an integer to find: "); 

    try { 
     int number = input.nextInt(); 
     int index = Arrays.binarySearch(array, number); 

     for (int i = 0; i < array.length; i++) { 
       if (array[i] == number) 
        System.out.println("Found " + number + " at index " + index++); 
     } 
      System.out.printf("Your number was not found within the array."); 
    } 
    catch (InputMismatchException e){ 
      System.out.printf("Sorry, but it looks like you entered something other than an integer. Please try again."); 
    } 
} 

Консоль вывода Пример:

Enter an integer to find: -9 

Найдено -9 с индексом 0
Ваш номер не был найден в массиве.

+1

Как вы думаете, что произойдет, когда первая запись в 'array' не соответствует правильному номеру? – tkausl

+0

Просто напечатайте сообщение об ошибке в предложении else. Не бросайте исключение. – Jecoms

+0

@tkausl Хм, так это только проверка массива для первого номера? – Walby

ответ

0

Array.binarySearch вернет индекс, если он найдет значение, в противном случае он вернет -1.

Если index == -1, вы можете распечатать «не найденное сообщение» без ввода петли вообще.

В противном случае, если index > 0, то вы можете ввести цикл и перебрать массив, чтобы найти каждый индекс, где значение является совпадением.

Это необходимо, если вы хотите получить сообщение для нескольких совпадений, поскольку binarySearch просто вернет первый индекс, значение которого было найдено.

Как в стороне, для binarySearch требуется сначала отсортировать массив, иначе результаты будут неопределенными. Я не знаю, является ли это проблемой, поскольку массив объявлен за пределами примера.

Scanner input = new Scanner(System.in); 
System.out.println("Enter an integer to find: "); 

try { 
    int number = input.nextInt(); 
    int index = Arrays.binarySearch(array, number); 

    if (index > 0) { 
     for (int i = 0; i < array.length; i++) { 
      if (array[i] == number) { 
       System.out.println("Found " + number + " at index " + i); 
      } 
     } 
    } else { 
     System.out.printf("Sorry, your number wasn't found."); 
    } 
} 
catch (InputMismatchException e) { 
    System.out.printf("Sorry, but it looks like you entered something other than an integer. Please try again."); 
} 
+0

Да, кроме массива, говорящего, что значение в индексе [0 – Walby

+0

Кроме массива, говорящего, что значение в индексе [0] не найдено, да, так оно и должно работать. – Walby

+0

@Walby. Ах. Таким образом, вам нужно несколько сообщений, если число отображается более одного раза. – Jecoms

0

Условие в петле неверно. Если первый элемент массива - это не то значение, которое вы искали, оно немедленно прекращается. Обработка ошибок должна выполняться после цикла. Попробуйте это:

boolean found = false; 
    for (int i = 0; i < array.length; i++) { 
     if (array[i] == number){ 
      System.out.println("Found " + number + " at index " + index++); 
      found = true;} 
    } 
    if(!found) 
     throw new IllegalArgumentException("Your number was not found within the array."); 
0

в вашем коде:
«Ваш номер не найден в массиве.» всегда будут печататься, если не является исключением пойман уловом блоком

также одна интересной вещи о бинарном поиске является:
если элемент не присутствует в массиве, она возвращает отрицательную частью вероятного положения если искомый элемент «был бы».

Пример: в этой программе, если вы ищете 9, он возвращает -3
, если вы ищете 65, он будет возвращать -6

Это будет работать правильно:

import java.util.Arrays; 
import java.util.InputMismatchException; 
import java.util.Scanner; 

public class debug { 
public static void main(String...args){ 

    Scanner input = new Scanner(System.in); 
     System.out.println("Enter an integer to find: "); 
     int i, array[]={-9,8,14,56,64}; 
     try { 
      int number = input.nextInt(); 
      int index = Arrays.binarySearch(array, number); 

      if(index>=0) 
      System.out.println("Found " + number + " using binary search at index " + index); 
      else 
       System.out.println("Not Found !! index returned by binary search is : "+index); 

      boolean flag=false; 
      for (i = 0; i < array.length; i++) { 
        if (array[i] == number){ 
         flag=true; 
         break; 
        } 
      } 
      if(flag) 
       System.out.println("Found " + number + " using for loop at index " + i); 
      else 
      System.out.printf("Your number was not found within the array."); 
     } 
     catch (InputMismatchException e){ 
       System.out.printf("Sorry, but it looks like you entered something other than an integer. Please try again."); 
     } 
    } 

} 


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