2013-08-08 2 views
1

Это моя программа ...Простая программа Java Странная Выход

import java.lang.Math; 
class SquareRoot 
{ 
    public static void main(String args[]) 
    { 
    try 
    { 
     System.out.println("Enter A Number To Find its Square Root"); 
     System.out.flush(); 
     double x = (double) System.in.read(); 
     double y; 
     y = Math.sqrt(x); 
     System.out.println("Square Root of " + x + " is " + y); 
    } 
    catch (Exception e) 
    { 
     System.out.println("I/O Error! Humein Maaf Kar Do Bhaaya"); 
    } 
    } 
} 

Если я вхожу 75 в качестве входных данных он показывает .. Квадратный корень из 55.0 является < 55 в квадратный корень>
На входе 23 он показывает Квадратный корень 50.0. Где я ошибаюсь? Нет проблем с компиляцией.

Я использую IDE DrJava. Компилятор JDK 7u25. Windows 7 32 бит.

+2

Пользовательский ввод сделан неправильно. Используйте 'Scanner' вместо' System.in' напрямую. –

+0

Как это сделать правильно ..? Я новичок в Java. – GunJack

+0

ASCII из 7 (в 75) - 55, а ASCII из 2 (в 23) - 50 – ipeiro

ответ

4
double x = (double) System.in.read(); 

Nope. Я бы рекомендовал обернуть это в Scanner.

Scanner s = new Scanner(System.in); 
double x = s.nextDouble(); 
String str = s.nextLine(); // <-- Just an example! 

Только для более удобного кода!

Запомнить

Поместите import java.util.Scanner в верхней части страницы, в противном случае Java будет поднимать немного суеты!

+0

Нет необходимости назначать 's.nextLine()' для строки, если вы используете ее только для того, чтобы освободить буфер – BackSlash

+0

. Я просто использовал это как пример его использования. – christopher

+0

Что такое String str? – GunJack

8

System.in.read() возвращается один знак. Затем его целочисленное представление приводится к двойному.

Вы можете использовать BufferedReader:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
String s = br.readLine(); 
double number = Double.parseDouble(s); 

Или Scanner:

Scanner scanner = new Scanner(System.in); 
double number = scanner.nextDouble(); 
+0

Или 'Scanner' для простоты кода и избегать анализа 'String' данных, которые мне нужны/нужны. –

+0

@LuiggiMendoza, обязательно, добавлено – RiaD

2

Проблема заключается в том, что когда вы бросаете в качестве двойной при получении пользовательского ввода, это преобразование первого символа в вход в его значение ascii. ('7' = 55, '2' = 50)

+0

Получил .. спасибо. – GunJack

1

Использование следующим образом:

Scanner s = new Scanner(System.in); 
double x = s.nextDouble(); 
Смежные вопросы