Компилятор Java просто учитывает первую цифру

#java #methods

#java #методы

Вопрос:

Если входные данные равны 13, компилятор просто учтет первую цифру, равную 1. Я дам вам код Java.

 class Max {
    static void checkFever(double choice) {
        
        // if temperature is less than 37, print "You have fever"
        if (choice > 37) {
            System.out.println("You have fever.");
        }
            else {
                System.out.println("You don't have fever.");
            }
        
    }

    public static void main(String[] args) throws IOException { 
           char choice;
           choice = (char) System.in.read();
            
             checkFever(choice);
             System.out.println(choice); // this will make appear the result
        
        
  }
}
  

результат следующий:

 38
You have fever.
3
  

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

1. char это один символ, вы, вероятно, захотите прочитать целое String или, что более предпочтительно double , или float

2. Компилятор этого не делает, программа. Программа делает это, потому read() что считывает один байт; для текстового ввода 3 это один байт и 7 еще один байт.

3. Можете ли вы сделать System.out.println в начале метода checkFever?

Ответ №1:

Используйте a Scanner , который переносит System.in (который является InputStream ), чтобы прочитать всю строку, проанализированную в соответствующий примитивный или объектный тип данных. В вашем случае для температуры int было бы достаточно, но предпочтительнее десятичное float или double .

 Scanner scanner = new Scanner(System.in);
double choice = scanner.nextDouble();

checkFever(choice);

System.out.println(choice);
  

Ваш код не работает, потому что вы читаете один байт, используя метод InputStream::read

Считывает следующий байт данных из входного потока. Байт значения возвращается как int в диапазоне от 0 до 255.

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

1. Чтобы добавить к этому ответу, ваш ввод преобразуется в char , поэтому 38 читается как '3' . При преобразовании этого в double это так 51.0 .

Ответ №2:

System.in.read() считывает только один символ. Вы можете прочитать целую строку с помощью java.util.Scanner вспомогательного класса, поэтому:

 import java.io.IOException;
import java.util.Scanner;

class Max {
    static void checkFever(double choice) {
        
        // if temperature is less than 37, print "You have fever"
        if (choice > 37) {
            System.out.println("You have fever.");
        }
            else {
                System.out.println("You don't have fever.");
            }
        
    }
    public static void main(String[] args) throws IOException { 
           Scanner input = new Scanner(System.in);
           String answer = input.nextLine();
           int temp = Integer.parseInt(answer);
            
           checkFever(temp);
           System.out.println(answer); // this will make appear the result
        
        
  }
}
  

Это даст a NumberFormatException , если пользователь не ввел допустимое целое число. Не стесняйтесь улучшать код. 🙂

(Справка : try{...} catch(...) )