1

这是我的程序...

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 编译器。视窗 7 32 位。

4

4 回答 4

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();
于 2013-08-08T15:14:01.053 回答
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 会大惊小怪!

于 2013-08-08T15:15:32.807 回答
2

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

于 2013-08-08T15:14:29.223 回答
1

使用如下:

Scanner s = new Scanner(System.in);
double x = s.nextDouble();
于 2013-08-08T15:16:58.413 回答