gpt4 book ai didi

java - java中的系统输入无法正常工作

转载 作者:行者123 更新时间:2023-12-01 08:49:08 26 4
gpt4 key购买 nike

我正在尝试制作一个接受整数并给我总和的程序,我想使用正则表达式来制作它。输入包含数字、符号和字母。例如当我写:java 给我求和 4 2 1 -5或者java GiveMeSum 4k "2 1 !-5程序应该写2但它不仅给了我错误的答案,而且也没有读取我所有的输入。当我写下:

java GiveMeSum 4 2 1 -5

4 54 54 54 5

Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at GiveMeSum.main(GiveMeSum.java:12)


public class GiveMeSum {

public static void main(String[] args) throws IOException {
int sum = 0;
Scanner sc = new Scanner(System.in).useDelimiter("(\\D|^-)");
for ( int i = 0; i < args.length; i++) {
sum += sc.nextInt();
}
System.out.println(sum);
}

}

也没有那个异常(exception)。突然就出现了

最佳答案

发生这种情况是因为您传递“4 2 1 -5”不是作为输入,而是作为参数传递,因此它们进入 main 方法的 args 参数。要将它们作为输入传递,请等待应用程序启动并输入它们或使用 input stream redirection

更新(参数处理代码)

How should I write it in java to take input as arguments then? Is there a specific easy way?

我想说,使用非固定数量的输入参数的参数并不是一个好主意。我仍然想说使用输入流是正确的方法 - 这就是它的设计目的!此外,您的解析要求有点模糊。这仍然是我的尝试

public class Main
{
static OptionalInt parseOnlyInt(String s)
{
String digitsOnly = s.replaceAll("[^0-9]", "");
if (digitsOnly.length() == 0)
return OptionalInt.empty();
else
return OptionalInt.of(Integer.parseInt(digitsOnly));
}

public static void main(String[] args)
{
int sum = Arrays.stream(args)
.map(Main::parseOnlyInt)
// probably in Java 9 OptionalInt::stream would be better than next 2 lines
// see https://bugs.openjdk.java.net/browse/JDK-8050820
.filter(OptionalInt::isPresent)
.mapToInt(OptionalInt::getAsInt)
.sum();

System.out.println(Arrays.toString(args));
System.out.println(sum);
}
}

或者,如果您更喜欢旧的(非 Java-8)方式,那就是

public static void main(String[] args)
{
int sum = 0;
for (int i = 0; i < args.length; i++)
{
String digitsOnly = args[i].replaceAll("[^0-9]", "");
if (digitsOnly.length() != 0)
sum += Integer.parseInt(digitsOnly);
}
System.out.println(Arrays.toString(args));
System.out.println(sum);
}

关于java - java中的系统输入无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42495743/

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