我正在为课堂上的家庭作业问题做准备。你必须计算两点之间的距离。代码基本完成,但我有一个问题。当我输入q结束循环。我收到了回复信息。
线程“main”中的异常java.lang.NumberFormatException:对于输入字符串:“q”
at.sun.misc.FloatingDecimal.readJavaFormatString(Unkown Source)
at java.lang.Double.parseDouble(Unkown Source)
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
这是我写的代码。任何帮助表示赞赏。
答案 0 :(得分:1)
这意味着'q'不是数字。要比较必须使用equals
的字符串,==
只需比较参考。
答案 1 :(得分:1)
你没有与==进行字符串比较。 “==”比较检查它们是否是完全相同的对象,而不是字符串包含相同的字符。请改为x1String.equals("q")
。
现在发生的事情是“==”会说“这些不是同一个对象”,然后它会尝试将“q”解析为下一行中的double,这就是抛出异常。 / p>
答案 2 :(得分:0)
这个老栗子......
您无法使用==
(安全地)比较字符串。请改用.equals()
:
if (x1String.equals("q")) // change every == to .equals()
Java!= Javascript
答案 3 :(得分:0)
x1String == "q"
只是比较引用。为了将输入字符串与字符串"q"
进行比较,您需要使用compareTo
或equals
:
if (x1String.compareTo("q") == 0)
// or
if (x1String.equals("q"))
答案 4 :(得分:0)
正如其他人所说,你应该使用诸如equals
之类的函数来比较对象的内容(x1String
和"q"
),而不是比较实际的对象/引用,但是您还应该检查字符串是否为数字和/或catch
parseDouble
引发的任何异常。
如果有人输入"asdfg"
怎么办?