首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能同时使用Scanner.next()和Scanner.nextInt()

不能同时使用Scanner.next()和Scanner.nextInt()
EN

Stack Overflow用户
提问于 2015-03-06 09:35:22
回答 1查看 269关注 0票数 1
代码语言:javascript
复制
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]被初始化为TestlastName[i]被初始化为Tst。但zipCode[i]未初始化为121。它仍然提示输入,但它不接受我输入的任何内容。

EN

回答 1

Stack Overflow用户

发布于 2015-03-06 09:52:58

Scannernext...()方法总是首先扫描下一个令牌,然后将其转换为正确的类型(例如nextInt()中的int )。

现在,令牌是不是分隔符的字符序列。由于您设置的唯一分隔符是制表符(\t),因此它将继续搜索制表符,即使您输入新行,搜索也不会停止。

基本上有两种解决方案:

还允许使用新行的

代码语言:javascript
复制
console.useDelimiter("[\t\r\n]");

(并删除循环末尾的.nextLine() )。这样做的结果是,如果您用新行分隔名字和姓氏,Scanner将不会出错,因此:

代码语言:javascript
复制
Test
Tst
121

也将被解析为Test Tst 121,尽管我认为这不会有太多问题。

如果你真的想禁用它,你可以在循环中设置并重置分隔符。因此,就像这样:

代码语言:javascript
复制
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();
}

(但我在这种情况下看不到附加值)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28890999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档