当前位置: 首页 > 知识库问答 >
问题:

Scanner.NextInt上的InputMismatchException

魏兴邦
2023-03-14
 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");
}

共有1个答案

皇甫智明
2023-03-14

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

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

我建议您使用以下regex作为扫描程序的分隔符:

,\s*|\s+
    null
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
 类似资料:
  • 问题内容: 我的教授倾向于执行以下操作来从用户那里获得一个号码: 与简单地做相比有什么好处? 包含以下内容: 正如我所看到的,除了其他的轨迹外,还调用Integer.parseInt()本身。简单地做会带来显着的性能提升吗?另一方面是否有任何弊端? 扫描包含大量数据而不是用户输入的文件时怎么样? 问题答案: 有2个观察结果: 在新行字符后面使用叶子。因此,如果在之后调用,则会读取换行符,而不是实际

  • 我完全是Java的初学者。我制作了一个类,想输入一个数字和一个字符串,但我认为s=in。nextLine() 忽略此行。如何逐行输入两个值。

  • 我必须得到一个字符串输入和一个整数输入,但输入的顺序应该是整数在先,然后要求用户输入字符串 上面的代码工作得很好,但是如果我首先输入一个整数,就像下面的代码 然后抛出java.lang.ArrayIndexOutOfBoundsException。 下面是我源文件的完整代码: 公共类StringSwap{ } 请指出我在这里做错了什么。

  • 问题内容: 我必须获得一个字符串输入和一个整数输入,但是输入的顺序应该是整数首先出现,然后应该要求用户输入字符串 上面的代码工作正常,但是如果我先接受整数输入,如下面的代码 然后抛出java.lang.ArrayIndexOutOfBoundsException。 这是我的源文件的完整代码: 公共类StringSwap { } 请指出我在这里做错了什么。 问题答案: 问题是整数后面的字符。当您调用

  • Animal.java 我为它创建了以下自定义断言: AnimalAssert.java 编辑:基于第一个答案(cglib需要一个),我用一个no arg构造函数更新了动物类,但是抛出了相同的异常

  • 我的应用程序一直在许多Android平台上报告这个问题(4.1、4.0.4、2.3.6.…)。但我无法在我的手机上复制这个问题。我已经在Google上搜索了这个问题,但堆栈跟踪似乎与我的不一样。