Java: проверка ввода на наличие double, но он принимает int и превращает его в double

#java

#java

Вопрос:

Итак, я пытаюсь запустить эту программу, которая будет проверять каждый ввод, чтобы убедиться, что ввод соответствует правильному типу, int , double и boolean . Однако двойное значение вызывает у меня проблемы. hasnextDouble принимает значение int, а переменная превращает его в double . Буду признателен за любую помощь, которую я могу получить для решения этой проблемы, наряду с объяснением того, почему, я не просто хочу получить ответ, я хочу понять.

 import java.util.Scanner;

public class TestValidInput
{
  public static void main(String[] args)
  {
    Scanner input = new Scanner(System.in);
    int anInt = 0;
    double aDouble = 0.0;
    boolean aBoolean = false;

    System.out.printf("%nEnter an integer:  ");

    while(!input.hasNextInt())
    {
      input.next(); 
      System.out.printf("%nYou must only enter an integer:  ");
    }

    anInt = input.nextInt();

    System.out.printf("%n%d%n", anInt); 

    System.out.printf("%nEnter a double:  ");

    while(!input.hasNextDouble())
    {
      input.next();  
      System.out.printf("%nYou must only enter a double:  ");
    }

    aDouble = input.nextDouble(); 

    System.out.printf("%n%f%n", aDouble); 

    System.out.printf("%nEnter a true or a false:  ");

    while(!input.hasNextBoolean()) 
    {
      input.next();  
      System.out.printf("%nYou must only enter a TRUE or FALSE:  ");  
    }

    aBoolean = input.nextBoolean();  

    System.out.printf("%n%b%n", aBoolean);  

    input.close();

    System.exit(0);
  }
}
 

Ответ №1:

Объяснение, почему

с объяснением, почему

Поскольку значение int может быть представлено как значение double, в java целочисленное значение может быть неявно преобразовано в double, но не наоборот:

 double d = 1.0; // valid
double dd = 1; // valid
int i = 1; // valid
int ii = 1.0; // error
 

Как решить

Любая помощь, которую я могу получить, чтобы решить эту проблему

Добавьте проверку, что оно не в целочисленном формате:

 while(!(input.hasNextDouble() amp;amp; !input.hasNextInt()))
 

Ответ №2:

Пространство double — это надмножество целых чисел, т. Е. И int может вписываться в double или интерпретироваться как таковой. если вам конкретно нужна десятичная точка в числе, вы должны проверить это вместо этого.

Комментарии:

1. Я ценю это, это был лакомый кусочек, который я забыл учесть.