Исключение в теме "главная", что это значит? - PullRequest
0 голосов
/ 24 октября 2011

Я работаю над проблемой домашнего задания для класса. Где вы должны рассчитать расстояние между двумя точками. Код в основном готов, но у меня есть один вопрос. Когда я введу q, чтобы закончить цикл. Я получаю сообщение обратно.

Исключение в потоке "main" java.lang.NumberFormatException: Для входной строки: "q"

at.sun.misc.FloatingDecimal.readJavaFormatString (неизвестный источник)

at 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

Это код, который я написал. Любая помощь приветствуется.

Ответы [ 5 ]

1 голос
/ 24 октября 2011

Вы не сравниваете строку с ==. Сравнение "==" проверяет, являются ли они точно такими же объектами, а не в том случае, если строки содержат одинаковые символы. Попробуйте x1String.equals("q") вместо.

Что происходит сейчас, так это то, что «==» скажет «это не один и тот же объект», а затем попытается проанализировать «q» как двойное число в следующей строке, что вызывает исключение.

1 голос
/ 24 октября 2011

Это означает, что «q» не является числом. Для сравнения строк вы должны использовать equals, == просто сравнивает ссылки.

0 голосов
/ 24 октября 2011

Как уже говорили другие, вы должны использовать функцию, такую ​​как equals, для сравнения содержимого объектов (x1String и "q"), а не сравнивать фактические объекты / ссылки, но вы также должны проверить, если строка числовая и / или catch с любыми исключениями, которые выбрасываются parseDouble.

Что если кто-то введет "asdfg"?

0 голосов
/ 24 октября 2011

x1String == "q" просто сравнивает ссылки.Чтобы сравнить входную строку со строкой "q", необходимо использовать compareTo или equals:

if (x1String.compareTo("q") == 0)
// or
if (x1String.equals("q"))
0 голосов
/ 24 октября 2011

Этот старый каштан ...

Вы не можете сравнить строки (безопасно), используя ==.Используйте .equals() вместо:

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

Java! = Javascript

...