gpt4 book ai didi

Java Scanner 分隔符和 System.in

转载 作者:行者123 更新时间:2023-11-29 04:56:04 34 4
gpt4 key购买 nike

当我要求用户输入一些数字然后我想处理它们时,我遇到了一些问题。请看下面的代码。

为了让这个程序正常运行,我需要在末尾输入两个逗号,然后就可以了。如果我不在后面加上 2 个逗号,程序就不会结束,否则我会收到错误消息。

谁能帮我解决这个问题?最后输入那些逗号怎么办

package com.kurs;

import java.util.Scanner;

public class NumberFromUser {

public static void main(String[] args) {
String gd = "4,5, 6, 85";
Scanner s = new Scanner(System.in).useDelimiter(", *");
System.out.println("Input some numbers");
System.out.println("delimiter to; " + s.delimiter());
int sum = 0;
while (s.hasNextInt()) {

int d = s.nextInt();

sum = sum + d;

}
System.out.println(sum);
s.close();
System.exit(0);

}

}

最佳答案

您的程序在 s.hasNextInt() 中挂起。

来自Scanner类的文档:

The next() and hasNext() methods and their primitive-type companion methods (such as nextInt() and hasNextInt()) first skip any input that matches the delimiter pattern, and then attempt to return the next token. Both hasNext and next methods may block waiting for further input.

简而言之,扫描仪只是在等待最后一个整数之后的更多输入,因为它需要以正则表达式 ", *" 的形式找到您的定界符来确定最后一个整数是完全类型化的。

您可以在此讨论中阅读有关您的问题的更多信息:

Link to the discussion on stackoverflow

要解决此类问题,您可以更改程序以读取整个输入字符串,然后使用 String.split() 方法将其拆分。尝试使用这样的东西:

import java.util.Scanner;

public class NumberFromUser {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);

String[] tokens = sc.nextLine().split(", *");

int sum = 0;

for (String token : tokens) {
sum += Integer.valueOf(token);
}

System.out.println(sum);
}

}

关于Java Scanner 分隔符和 System.in,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33724557/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com