我最近输入了这个java程序来接受十个区域及其pin码,然后搜索找到一个特定区域并打印出它的pin码。 这是程序中的代码:
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)
有人可以告诉我我做错了什么! :/ 任何帮助表示赞赏。
答案 0 :(得分: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
您的其余代码和概念都是正确的:)
答案 1 :(得分:3)
来自Scanner#nextInt()
的文档:
InputMismatchException - 如果下一个标记与整数正则表达式不匹配,或者超出范围
所以,听起来你的Scanner
正试图在int
中读取,但却得到一些不能变成int
的内容(它所读取的内容不是数字或者数字太大了。)
您可以在此处调用相关功能:
for (int i=0;i<=9;i++){
area[i]=s.nextLine();
pincode[i]=s.nextInt(); // <-- the culprit
}
我的猜测是,在某些时候,您对.nextLine()
的调用吞噬了整行,下一行以“区域”开头。如果不知道您希望如何格式化输入,我就无法做更多。
答案 2 :(得分:1)
来自InputMismatchException's JavaDoc:
由扫描程序抛出,表示检索到的令牌与预期类型的模式不匹配,或者令牌超出预期类型的范围。
您似乎输入了一个字符串,而nextInt()
需要一个整数。
答案 3 :(得分:1)
我假设错误发生在pincode[i]=s.nextInt();
行(即第14行)。发生这种情况的原因是因为输入(来自System.in)无法解析为int
。您确定要输入正确的值吗?
答案 4 :(得分:1)
无法将输入解析为整数。 也许你在行尾有一个逗号。
btw:
如果(搜索==面积[J])
检查字符串相等性是不好的做法。使用search.equals(area [j])和null-check。
答案 5 :(得分:0)
我是编程新手。但是,在为银行创建客户时,我遇到了类似的问题(这只是一个实践问题)。为了克服这个问题,我为每种输入类型创建了单独的扫描仪。在程序结束时关闭所有扫描仪。它奏效了。