Scanner console=new Scanner(System.in);
System.out.print("how many:");
int n=console.nextInt();
console.nextLine();
String firstName[]=new String[n];
String lastName[]=new String[n];
int zipCode[]=new int[n];
console.useDelimiter("[\t]");
for(int i=0;i<n;i++) {
System.out.print("Enter the first Name"+"Last Name"+"zipcode:");
firstName[i]=console.next();
lastName[i]=console.next();
zipCode[i]=console.nextInt();
console.nextLine();
}带制表符的输入:Test Tst 121
firstName[i]被初始化为Test。lastName[i]被初始化为Tst。但zipCode[i]未初始化为121。它仍然提示输入,但它不接受我输入的任何内容。
发布于 2015-03-06 09:52:58
Scanner的next...()方法总是首先扫描下一个令牌,然后将其转换为正确的类型(例如nextInt()中的int )。
现在,令牌是不是分隔符的字符序列。由于您设置的唯一分隔符是制表符(\t),因此它将继续搜索制表符,即使您输入新行,搜索也不会停止。
基本上有两种解决方案:
还允许使用新行的:
console.useDelimiter("[\t\r\n]");(并删除循环末尾的.nextLine() )。这样做的结果是,如果您用新行分隔名字和姓氏,Scanner将不会出错,因此:
Test
Tst
121也将被解析为Test Tst 121,尽管我认为这不会有太多问题。
如果你真的想禁用它,你可以在循环中设置并重置分隔符。因此,就像这样:
for(int i=0;i<n;i++) {
System.out.print("Enter the first Name"+"Last Name"+"zipcode:");
console.useDelimiter("[\t]");
firstName[i]=console.next();
lastName[i]=console.next();
console.useDelimiter("[\n]");
zipCode[i]=console.nextInt();
}(但我在这种情况下看不到附加值)。
https://stackoverflow.com/questions/28890999
复制相似问题