gpt4 book ai didi

java - Scanner.nextInt 上的 InputMismatchException

转载 作者:太空宇宙 更新时间:2023-11-04 06:37:43 24 4
gpt4 key购买 nike

我尝试使用扫描仪在 JFrame 中绘制矩形,但出现以下错误:

 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 DrawerAutoRect.main(DrawerAutoRect.java:39)

我的这个程序的目标是选择要绘制的对象类型,即:线条、矩形、o vals,然后输入参数,即如果我正在绘制一个矩形,则输入将是 r, 200,200,400,400 并让它在 JFrame 上绘制具有这些尺寸的矩形。然后我只需输入“end”,它就会结束等待对象的输入和绘制。

import java.awt.BasicStroke;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.util.Scanner;
import javax.swing.JFrame;

public class DrawerAutoRect extends JFrame {
public DrawerAutoRect(){
setSize(1020,1020);
}

public static void paint(Graphics g, int a, int b,int c, int d)
{
Graphics2D g2 = (Graphics2D)g;
g2.drawRect(a, b, c, d);
}

public static void main(String[] args) {
int x1 = 100;
int x2 = 100;
int y1 = 50;
int y2 = 50;
Scanner s = new Scanner(System.in);
String dim = s.next();
while(dim!="end"){
if(dim.equals("r")){
x1 = s.nextInt();
y1 = s.nextInt();
x2 = s.nextInt();
y2 = s.nextInt();
}
}
paint(null, x1, y1, x2, y2);
DrawerAutoRect r = new DrawerAutoRect();
r.setDefaultCloseOperation(EXIT_ON_CLOSE);
r.setVisible(true);
//r.pack();
r.setTitle("Tutorial");
}

最佳答案

问题是您的输入不仅包含您要查找的标记,显然还包含逗号空格

因此,您必须告诉您的扫描器使用特定的分隔符,以了解他必须在此字符串标记您的输入流。

我建议您使用以下正则表达式作为扫描仪的分隔符:

,\s*|\s+

这会将您的输入拆分为:

  • 任何逗号,最后跟一些空格,或
  • 至少一个空格。

考虑这个示例代码:

try (final Scanner s = new Scanner(System.in)) {
s.useDelimiter(",\\s*|\\s+");

String dim;
do {
dim = s.next();
if (dim.equals("r")) {
System.out.println(s.nextInt());
System.out.println(s.nextInt());
System.out.println(s.nextInt());
System.out.println(s.nextInt());
}
} while (!dim.equals("end"));
}

只需输入:

r 1, 2, 3, 4, end

...在控制台上,我得到以下输出:

1
2
3
4

...它有效!

另外,作为旁注,我想指出,为了比较 Java 中的 String,您应该使用 String#equals 方法,而不是原始比较器。

因此,您应该使用(正如我在示例代码中所做的那样)!dim.equals("end") 而不是 dim != "end"

关于java - Scanner.nextInt 上的 InputMismatchException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25131067/

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