【问题标题】:Exception in thread "main", What does this mean?线程“main”中的异常,这是什么意思?
【发布时间】:2011-10-24 07:58:11
【问题描述】:

我正在处理课堂作业问题。您必须计算两点之间的距离。代码基本上完成了,但我有一个问题。当我输入 q 结束循环时。我收到一条消息。

线程“main”java.lang.NumberFormatException 中的异常:对于输入字符串:“q”

at.sun.misc.FloatingDecimal.readJavaFormatString(未知来源)

在 java.lang.Double.parseDouble(未知来源)

atDistance.main(Distance.java:11)

import java.util.Scanner;
public class Distance {
public static void main(String[] args){
    Scanner input = new Scanner(System.in);
    while (true){
        System.out.print("Enter coordinate for x1: ");
        String x1String = input.next();
        if (x1String == "q")
            break;
            double x1 = Double.parseDouble(x1String);

        System.out.print("Enter coordinate for y1: ");
        String y1String = input.next();
        if (y1String == "q")
            break;
            double y1 = Double.parseDouble(y1String);

        System.out.print("Enter coordinate for x2: ");
        String x2String = input.next();
        if (x2String == "q")
            break;
            double x2 = Double.parseDouble(x2String);

        System.out.print("Enter coordinate for y2: ");
        String y2String = input.next();
        if (y2String == "q")
            break;
            double y2 = Double.parseDouble(y2String);

        double distance = (Math.pow(x2 - x1,2)) + (Math.pow(y2 - y1,2));
        distance = Math.sqrt(distance);
        System.out.printf("The distance is %5.2f",distance);
        System.out.println("");
    }
}//main
}//Distance

这是我写的代码。任何帮助表示赞赏。

【问题讨论】:

    标签: java exception runtime-error


    【解决方案1】:

    你不会用 == 进行字符串比较。 "==" 比较检查它们是否是完全相同的对象,而不是字符串是否包含相同的字符。请改用x1String.equals("q")

    现在发生的事情是“==”会说“这些不是同一个对象”,然后它会尝试将“q”解析为下一行中的双精度值,这会引发异常。

    【讨论】:

      【解决方案2】:

      这意味着“q”不是数字。要比较字符串,您必须使用equals== 只是比较引用。

      【讨论】:

        【解决方案3】:

        这个老栗子……

        不能使用==(安全地)比较字符串。请改用.equals()

        if (x1String.equals("q")) // change every == to .equals()
        



        Java != Javascript

        【讨论】:

          【解决方案4】:

          x1String == "q" 只是比较引用。为了将输入字符串与字符串"q"进行比较,需要使用compareToequals

          if (x1String.compareTo("q") == 0)
          // or
          if (x1String.equals("q"))
          

          【讨论】:

            【解决方案5】:

            正如其他人所说,您应该使用诸如 equals 之类的函数来比较对象的内容(x1String"q"),而不是比较实际的对象/引用,但您还应该检查是否该字符串是数字和/或catching 任何由parseDouble 引发的异常。

            如果有人输入"asdfg"怎么办?

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-07-03
              • 1970-01-01
              相关资源
              最近更新 更多