简单的Java程序奇怪的输出

时间:2013-08-08 15:11:40

标签: 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。我哪里错了?编译没问题。

我正在使用DrJava IDE。 JDK 7u25编译器。 Windows 7 32位。

4 个答案:

答案 0 :(得分:8)

System.in.read()会返回一个字符。然后它的整数表示转换为double。

您可以使用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();

答案 1 :(得分:4)

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

不。我建议将其包装在Scanner

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

只需制作更好的代码!

记住

import java.util.Scanner放在页面顶部,否则Java会有点大惊小怪!

答案 2 :(得分:2)

问题在于,当您在获取用户输入时将其转换为double时,它会将输入中的第一个字符转换为其ascii值。 ('7'= 55,'2'= 50)

答案 3 :(得分:1)

使用以下:

Scanner s = new Scanner(System.in);
double x = s.nextDouble();