1

Дана задача: Написать программу, которая переводит значение угла из градусов в радианы, и наоборот, в зависимости от символа при вводе.

Например: 45.00D означает значение в градусах, а 45.00R - в радианах.

После ввода числа, программа не даёт ввести символ и сразу переходит к выполнению условия error.

Код программы :

package NIIT;

import java.util.Scanner;

public class RadianConvertor { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("Value"); double value = scan.nextDouble(); System.out.println("Enter degrees or radian"); String letter = scan.nextLine();

    double Pi = 3.14159265359;

    if (letter.equals("D") || letter.equals("d")) {
        System.out.println(value * Pi / 180);
    }
    if (letter.equals("R") || letter.equals("r")) {
        System.out.println(value * 180 / Pi);
    }
    else {
        System.out.println("Error");
    }
}

}

Результат выполнения :

Value
12
Enter degrees or radian
Error

Process finished with exit code 0

Nowhere Man
  • 15,995
  • 33
  • 19
  • 29
Andrei97
  • 161
  • Ваши условия звучат так: "введённая буква должна быть и заглавной и строчной одновременно". Вы понимаете что это невыполнимое условие? Это как сказать, что число должно быть и положительным и отрицательным одновременно – ArchDemon Nov 19 '21 at 15:20
  • Спасибо большое . Поправил ! Но это не решило мою проблему . – Andrei97 Nov 19 '21 at 15:24
  • Я думаю проблема в функции scanner во втором случае , потому что он даже не переходит к ней . Но что конкретно не так понять не могу . – Andrei97 Nov 19 '21 at 15:25
  • 4
  • 2
    https://qna.habr.com/q/269359 – ArchDemon Nov 19 '21 at 15:31

1 Answers1

1

Вам следует заменить && на || ,

тк && - означает И, а letter не может быть одновременно d и D, поэтому Вам нужен || (ИЛИ)

Хотя я бы на твоем месте сделал следующее: letter.toLowerCase().equals("d")

package NIIT;

import java.util.Scanner;

public class RadianConvertor {

public static void main(String[] args){
    Scanner scan = new Scanner(System.in);
    System.out.println("Value");
    double value = Double.parseDouble(scan.nextLine()); // Лучше nextLine, и затем parseDouble
    System.out.println("Enter degrees or radian");
    String letter = scan.nextLine();
    scan.close(); // Лучше закрывать Scanner;

    double Pi = Math.PI; // Лучше использовавть уже готовый PI

    if(letter.toLowerCase().equals("d")) {  // toLowerCase() заменяет все символы на строчные
        System.out.println(value*Pi/180);
    } else if(letter.toLowerCase().equals("r")) {
        System.out.println(value*180/Pi);
    }else{
        System.out.println("Error");
    }
}

}

Agzam
  • 981
  • 1
  • 5
  • 19
  • Всё по делу, кроме одного совета: Scanner открытый на System.in не нужно закрывать, так как закроется и System.in. – Nowhere Man Nov 19 '21 at 16:09