2013-08-23 4 views
2

Я недавно набрал эту программу Java, чтобы принять десять областей и их пин-коды, а затем выполнить поиск, чтобы найти конкретную область и распечатать ее пин-код. Вот код из программы:Ошибка Java «Исключение в потоке» main «java.util.InputMismatchException» В программе Array

import java.util.Scanner; 
public class Sal { 

    public static void main (String args []){ 
     Scanner s=new Scanner(System.in); 
     System.out.println("Enter 10 areas and their pincodes"); 
     String area[]=new String [10]; 
     int pincode[]=new int [10]; 
     String search; 
     int chk=0; 
     int p=0; 

     for (int i=0;i<=9;i++){ 
      area[i]=s.nextLine(); 
      pincode[i]=s.nextInt(); 
     } 

     System.out.println("Enter Search"); 
     search=s.nextLine(); 

     for (int j=0;j<=9;j++){ 
      if(search==area[j]){ 
       chk=1; 
       j=p; 
       break; 
      } 
     } 

     if(chk==1){ 
      System.out.println("Search Found "+"Pincode : "+pincode[p]); 
     } else { 
      System.out.println("Search not Found"); 
     } 
    } 
} 

И после ввода двух областей я получаю эту ошибку:

Exception in thread "main" java.util.InputMismatchException 
at java.util.Scanner.throwFor(Unknown Source) 
at java.util.Scanner.next(Unknown Source) 
at java.util.Scanner.nextInt(Unknown Source) 
at java.util.Scanner.nextInt(Unknown Source) 
at Sal.main(Sal.java:14) 

Может кто-то пожалуйста, скажите мне, что я делаю неправильно! :/ Любая помощь приветствуется.

ответ

5

Прежде всего, не забудьте указать свой код для удобства чтения.

Концепция 1.

for (int i=0;i<=9;i++){ 

area[i]=s.next();// Use this for String Input 

pincode[i]=s.nextInt(); 

s.nextLine();//Use this for going to next line of input 

} 

Концепция 2.

if(search.compareTo(area[j])==0){ 

// сравнивать строки, используя метод CompareTo (который возвращает 0, если равно

Rest вашего кода и концепции являются правильными :)

+0

Я лично являюсь поклонником' Integer.parseInt (s.nextLine()) 'вместо использования' s.nextInt() 'и' s.nextLine() 'последовательно, но я полагаю, что я видел последнее чаще. –

1

От InputMismatchException's JavaDoc:

Thrown by a Scanner to indicate that the token retrieved does not match the pattern for the expected type, or that the token is out of range for the expected type.

Похоже, что вы ввели строку, в то время как nextInt() ожидает целое число.

1

Я предполагаю, что ошибка произошла на линии pincode[i]=s.nextInt(); (это строка 14). Причина этого в том, что вход (из System.in) не может быть проанализирован как int. Вы уверены, что вводите правильные значения?

3

Из документов для Scanner#nextInt():

InputMismatchException - if the next token does not match the Integer regular expression, or is out of range

Таким образом, это звучит как Scanner пытается прочитать в int но получить то, что он не может превратиться в int (или то, что он прочитал не число или число слишком велико).

Вы вызываете соответствующую функцию здесь:

for (int i=0;i<=9;i++){ 
    area[i]=s.nextLine(); 
    pincode[i]=s.nextInt(); // <-- the culprit 
} 

Я полагаю, что в какой-то момент, ваш призыв к .nextLine() съедает всю строку, а следующая строка начинается с «зоной». Я не могу сделать больше, не зная, как вы ожидаете, что ввод будет отформатирован.

+0

И еще после этого есть * другая проблема, 'if (search == area [j])' должно быть 'if (search.equals (area [j])'. –

1

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

КСТАТИ:

if(search==area[j])

плохая практика, чтобы проверить строку равенства. использование поиск.элементы (область [j]) с нулевой проверкой.

+1

Неплохая практика, ее просто неправильный в контексте, который он использует. Оператор с двойным равенством НЕ проверяет содержимое строк, он проверяет, являются ли они одинаковыми объектами String. – redFIVE

+0

Которые в этом конкретном случае гарантируют, что они не будут одинаковыми 'String'. Метод' .Equals() 'является единственным способом сравнения равенства строк в Java, если вы не хотите сравнивать адреса памяти. – Xynariz

0

Я новичок в программировании. Тем не менее, я столкнулся с аналогичной проблемой, которая возникла при создании клиентов для банка (это просто практическая проблема). Чтобы преодолеть проблему, я создал отдельные сканеры для каждого типа ввода & Закрыл все сканеры в конце программы. Это сработало.

+0

Удачи вам в программировании! – user2711784

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