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

java中使用扫描仪出错

于捷
2023-03-14

这个代码中的对象扫描仪有什么问题?

void exp03(){
    System.out.println("---CREATION DES POINTS---");
    char res = 'O';
    Scanner sc = new Scanner(System.in);
       do{
        Point a = new Point();
        try{
        System.out.println("Entrez la valeur du coordonnée du point suivant X");
        double resx = sc.nextDouble();
        a.setX(resx);
        System.out.println("Entrez la valeur du coordonnée du point suivant Y");
        double resy = sc.nextDouble();
        a.setY(resy);
        }
        catch(CoorExp e){
        System.out.println("ERREUR:coordonnée négative!");  //exit  
        }
        System.out.println("1- Afficher le point creer");
        System.out.println("2- Deplacer le point creer");
        int i = sc.nextInt();
        switch (i){

        case 1 : 
            break;

        case 2 :
            System.out.println("entrer la valeur de deplacement suivant X");
            double depx =sc.nextDouble();
            a.setDx(depx);
            System.out.println("entrer la valeur de deplacement suivant Y");
            double depy =sc.nextDouble();
            a.setDy(depy);
            a.deplace(depx, depy);
            System.out.println("Nouvelles coordonnées du point");
            a.affiche();
            break;
        default:
            System.out.println("Choix Incorrect ! ");


        }
        System.out.println("Voulez vous creez un autre point ? O/N");//exception
        res = sc.next().charAt(0);
        }
        while(res == 'O');  

}

当我选择案例2时,我得到了这个错误:

 > Exception in thread "main" java.util.InputMismatchException 
 > java.util.Scanner.throwFor(Scanner.java:864) 
 > java.util.Scanner.next(Scanner.java:1485) 
 > java.util.Scanner.nextDouble(Scanner.java:2413) 
 > com.mbisc.java.Test.exp03(Test.java:115) 
 > com.mbisc.java.Test.<init>(Test.java:9) 
 > com.mbisc.java.Test.main(Test.java:137)

我认为scanner首先声明为int,现在在切换之后,我用类型double收集答案。我不太确定,我需要更多地了解scanner类是如何工作的。

共有1个答案

南宫保臣
2023-03-14

首先,你必须检查是否已被读取:

if (sc.hasNextDouble())
     double depx = sc.nextDouble();

可能是double不存在。

或者你应该为你的扫描仪声明一个区域设置

Scanner sc = new Scanner(System.in).useLocale(Locale.US);
 类似资料:
  • 我正在用Java编程 我正在尝试编写代码,以识别用户是否在基于控制台的程序中按enter键。 我如何使用java做到这一点。有人告诉我,这可以使用Scanner或缓冲输入阅读器来完成。我不明白(或不知道如何使用)缓冲输入阅读器。 我试着用scanner来做这件事,但按了两次enter键后,程序终止,无法工作 谢啦 --编辑--以下代码使用字符串的方法而不是 如何做到这一点,使用缓冲输入读取器的好处

  • 我正在创建一个小算法,这是其中的一部分。 如果用户输入非整数值,我想输出一条消息,让用户再次输入一个数字: 我得到了一个永无止境的循环,我不知道为什么。 如果用户输入非整数数字,我如何识别? 如果用户输入非整数数字,我如何要求用户再次输入? 更新 当我打印异常时,我得到了InputMismatchExctive,我应该怎么做?

  • 我想从标准输入中读取一个双数,但是我总是得到这个异常: Java . util . inputmismatchexception 如果输入是整数,那没问题,但是如果是双精度的,我会得到异常。 线程“main”Java . util . inputmismatchexception Java . util . scanner . throw for(scanner . Java:864)Java .

  • 问题内容: 如何将扫描仪的定界符设置为;或换行? 我试过: 但这不起作用。 问题答案: 通常,在模式中,您需要将翻倍。 所以,尝试 要么 编辑 :如果是问题,则可能要尝试以下操作: 它匹配的一个或多个,和。 注意 :我还没有尝试过这些。

  • 问题内容: 我有一个创建多个对象并将其放入一个类的类,如下所示: 我有一个从控制台扫描输入“ add”的应用程序,如果找到该应用程序,则调用如下所示的方法: 该应用程序应允许用户根据需要多次输入“添加”,但是在add调用该方法后将出现错误“找不到行” 。 我猜这是因为方法中的尚未关闭,然后在需要时重新打开。这是程序的问题吗?如果是,我将如何修复它? 请注意,该程序尚未完成,因为我将添加一种出售这些

  • 问题内容: 我正在尝试读取具有多个单词的字符串,即。洛杉矶或纽约市。如果有两个词并将它们分割在变量之间,则使用scanner.next()进行“出发”和“到达”只会读取第一个。nextLine()也不是很幸运。这是我的代码: 我知道这很简单,但我还没有弄清楚。 这是上面的代码的输入/输出: 输入航班号:29 输入出发城市:(立即跳至下一行) 输入到达城市: -—我真正想要的是---- 输入航班号: