Java 爪哇>;int到double(扫描仪>;系统输出)

Java 爪哇>;int到double(扫描仪>;系统输出),java,int,double,Java,Int,Double,这是我的第一个问题)希望有人能帮忙: 我正在尝试编写下一个程序: 所以我有1个输入,最多2个输出 首先,我检查输入是否为(int!) 如果为TRUE,我打印出消息“是的,它是整数”,并显示“在变量int中保存的数字” 但如果我输入double,我想打印message=(“不,它不是INT)+ 并以双格式显示它 当我输入int时一切正常,但当我输入double时就不正确了 public class Scan { public static void main(String[] args)

这是我的第一个问题)希望有人能帮忙:

我正在尝试编写下一个程序: 所以我有1个输入,最多2个输出 首先,我检查输入是否为(int!) 如果为TRUE,我打印出消息“是的,它是整数”,并显示“在变量int中保存的数字”

但如果我输入double,我想打印message=(“不,它不是INT)+ 并以双格式显示它

当我输入int时一切正常,但当我输入double时就不正确了

public class Scan {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int check;
            System.out.println("Your number? ");

        if(sc.hasNextInt()){
        check=sc.nextInt();
            System.out.println("OKEI "+check+ " IT IS INTEGER! ");}
        else if(sc.hasNextDouble()){
        check=sc.nextDouble();
            System.out.println("Nooo " + check + " NO it is not INT");
            }
    }

}

一种解决方案是将
check
改为
double
,并将检查更改为:

if (check == Math.floor(check))
在您的解决方案中,您试图将一个
double
分配给一个
int
。由于它不适合,它将失去精度并被截断

最终解决方案应如下所示:

Scanner sc = new Scanner(System.in);
check = sc.nextDouble();
if (check == Math.floor(check)) {
    // an "int"
} else {
    // not integer
}

创建一个新的双变量,并将sc.nextDouble()指定给该双变量

例如: 双重检查;


将int转换为双倍值,可能会有所帮助

else if (sc.hasNextDouble()) {
            check = (int) sc.nextDouble();
            System.out.println("Nooo " + check + " NO it is not INT");
        }

在Eclipse中尝试代码时,使用
check=sc.nextDouble()
check
作为
int
)时出现错误,您可以这样修复它:

  public static void main(final String[] args) {
    System.out.println("Your number? ");
    final Scanner sc = new Scanner(System.in);
    if (sc.hasNextInt()) {
      final int check = sc.nextInt();
      System.out.println("OKEI " + check + " IT IS INTEGER! ");
    } else if (sc.hasNextDouble()) {
      final double check = sc.nextDouble();
      System.out.println("Nooo " + check + " NO it is not INT");
    } else {
      System.out.println("Failed.");
    }
  }

这样,使用
Math.floor
或cast时不会丢失任何小数部分。

什么意思
当我输入double时,它是不正确的
@Jens他可能是指他输入了一个
double
,但它的行为类似于一个整数(因为他存储该
double
输入的变量是一个整数)。请注意,Double格式取决于区域设置的使用,因此根据系统配置,Double可能是
1.25
1,25
如果(check-(int)check==0),我将使用
但这不会有太大区别。谢谢Maroun Maroun,我想这是我第一次不使用数学库)确定这很舒服)我输入了1.25,我的信息是(Nooo 1不,它不是INT),所以1.25转换为1(我尝试使用相同的==1.25)),谢谢,你的代码和Lwax回答的一样。但我看到constanta(最终)请说明为什么我们必须使用它?因为我的Eclipse配置为使所有变量/参数/成员都不会被修改为最终版本。至于为什么要使用它?禁止更改值(或对象的引用)-我认为这对于参数/成员很重要,对于变量则不太重要。
  public static void main(final String[] args) {
    System.out.println("Your number? ");
    final Scanner sc = new Scanner(System.in);
    if (sc.hasNextInt()) {
      final int check = sc.nextInt();
      System.out.println("OKEI " + check + " IT IS INTEGER! ");
    } else if (sc.hasNextDouble()) {
      final double check = sc.nextDouble();
      System.out.println("Nooo " + check + " NO it is not INT");
    } else {
      System.out.println("Failed.");
    }
  }