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

扫描仪上的数字类型

咸臻
2023-03-14

我制作了一个简单的程序,根据公式中的3个数字计算增量。但是,小数点后的分数和数字(如3.33、3/4)有问题。如果我将其替换为任何字母,则会出现错误:

线程“main”java中出现异常。util。java上的InputMismatchException。base/java。util。扫描仪。throwFor(Scanner.java:939)访问java。base/java。util。扫描仪。下一步(Scanner.java:1594)是java。base/java。util。扫描仪。java上的nextInt(Scanner.java:2258)。base/java。util。扫描仪。位于Main的nextInt(Scanner.java:2212)。main(main.java:11)

如何添加修补程序以使程序正常工作?我的代码如下:

import java.util.Scanner;
import java.lang.Math;
import java.util.Locale;
public class Main {
    public static void main(String[] args) {
        final double n1; //a
        final double n2; //b
        final double n3; //c
        Scanner reader= new Scanner(System.in).useLocale(Locale.US);
        System.out.print("calculation of the delta. Enter the first number (a from the formula)");
        n1 = reader.nextDouble();
        System.out.print("give the second number (b from the formula)");
        n2 = reader.nextDouble();
        System.out.print("give the last number (c from the formula)");
        n3 = reader.nextDouble();
        final double delta = Math.pow(n2, 2) - 4 * n1 * n3;
        final double d01 = (-n2 + Math.sqrt(delta)) / (2 * n1);
        final double d02 = (-n2 - Math.sqrt(delta)) / (2 * n1);
        final String dinfo = "Delta is equal: ";
        if(delta>0) {
            System.out.println(dinfo + (int)delta + " , has [two] zero places, which is equal to: " + (int)d01 + " and " + (int)d02);
        }
        else if (delta == 0) {
            System.out.println(dinfo + (int)delta + ", has exactly [one] zero place, which is equal to: " + (int)d01);
        }
        else {
            System.out.println(dinfo + (int)delta + ", no zero places.");
        }
    }
}

共有2个答案

仲孙逸明
2023-03-14

先把int改成双

 final double n1; //a
 final double n2; //b
 final double n3; //c

 n1 = reader.nextDouble();
 n2 = reader.nextDouble();
 n3 = reader.nextDouble();

您需要设置区域设置。我们需要解决这个输入不匹配异常。否则,它可能会使用“,”或其他字符作为十进制分隔符。这将解决您的十进制问题

Scanner reader= new Scanner(System.in).useLocale(Locale.US);
陆琦
2023-03-14

如果要将输入数字接受为十进制,则应使用浮点或双精度类型。例如

double n1;
n1 = reader.nextDouble();

关于分数,您应该使用字符串类型,然后将其转换为数字类型。例如

    String tmp;
    Scanner reader= new Scanner(System.in).useLocale(Locale.US);
    System.out.print("calculation of the delta. Enter the first number (a from the formula)");
    tmp = reader.next();
    n1 = fractionToDouble(tmp);
    tmp = reader.next();
    n2 = fractionToDouble(tmp);
....

添加fractionToDouble转换方法。参考:米沙多夫的回答

static double fractionToDouble(String ratio) {
        if (ratio.contains("/")) {
            String[] rat = ratio.split("/");
            return Double.parseDouble(rat[0]) / Double.parseDouble(rat[1]);
        } else {
            return Double.parseDouble(ratio);
        }
    }

 类似资料:
  • 问题内容: 我的Java作业有问题。我遇到了意外的异常,特别是: java.util.NoSuchElementException:找不到行 我正在使用,该程序不断读取任何内容,并重复“无效格式”异常文本。如果输入正确的值,则第一部分通过,然后该部分立即进入此异常。如果输入的值不正确,则它将开始循环异常。 这是我的代码: 问题答案: 您关闭了多个库,这些库关闭了底层库,因此另一个库将不再从同一库和

  • 问题内容: 使用Scanner类中的useDelimiter时遇到一些问题。 如果我有这个输入 美国广播公司 输出将是 AB 然后等到我键入另一个“-”以打印出最后一个字符 但是,如果我没有用户输入数据,而是将字符串插入到Scanner中,则代码将起作用。原因是什么?如何解决?我不想使用StringTokenzier 问题答案: 如果没有等待您输入另一个,则将错误地假定您已完成输入。 我的意思是,

  • 我做了一个程序,要求3个整数来输出三角形的类型。所有内容都成功运行和编译,但是,在要求用户查看是否要再次循环的部分,联机编译器会输出错误: 异常线程"main"java.util.NoSuchElement异常在java.util.Scanner.throwFor(Scanner.java:838)在java.util.Scanner.next(Scanner.java:1347)在Assignm

  • 我的问题是格式化通过扫描仪输入的字符串。我试图输入“Result is”,但printf()似乎只看到字符串的“Result”部分,那么空格的命令是什么呢?thx公司

  • 我创建了一个简单的扫描器,用于计算中的字符串数。txt文件。每个字符串位于下一行。它算错了,每次它给我数字297,甚至有超过20000个字符串。这个txt文件是由我编写的另一个程序创建的,它从网站获取链接,并使用FileWriter和BufferedWriter将其保存到。txt文件。可能有什么问题? 编辑:字符串示例:

  • 我正在尝试编写使用Scanner类从用户那里获取输入的代码。但是hasNext()、hasNextInt()和hasNextLine()每次都会运行无限循环。