import java.util.Scanner;

public class Switch {


    private static void case1() {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter side A");
        String a = input.next();

        System.out.println("Enter side B");
        String b = input.next();

        double number1 = Double.parseDouble(a);
        double number2 = Double.parseDouble(b);


        double A2 = number1 * number1;
        double B2 = number2 * number2;

        System.out.println(A2);
        System.out.println(B2);

        double Csq = A2 + B2;

        double C = Math.sqrt(Csq);

        System.out.println("C equals " + C);
        input.close();
    }

    private static void case2() {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter side A");
        String a = input.next();

        System.out.println("Enter side C");
        String c = input.next();

        double number1 = Double.parseDouble(a);
        double number2 = Double.parseDouble(c);


        double A2 = number1 * number1;
        double C2 = number2 * number2;

        System.out.println(A2);
        System.out.println(C2);

        double b1 = C2 - A2;

        double B = Math.sqrt(b1);

        System.out.println("B equals " + B);
        input.close();
    }

    private static void case3() {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter side B");
        String b = input.next();

        System.out.println("Enter side C");
        String c = input.next();

        double number1 = Double.parseDouble(b);
        double number2 = Double.parseDouble(c);


        double B2 = number1 * number1;
        double C2 = number2 * number2;

        System.out.println(B2);
        System.out.println(C2);

        double a1 = C2 - B2;

        double A = Math.sqrt(a1);

        System.out.println("A equals " + A);
        input.close();
    }


    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String cont = "y";

        do {

            try{
                System.out.println("Welcome to the Pythagorean Theorm Program!!");
                System.out.println("");
                System.out.println("Choose one of the following:");
                System.out.println("");
                System.out.println("1. A2 + B2 = X");
                System.out.println("2. A2 + X = C2");
                System.out.println("3. X + B2 = C2");

                int choice = input.nextInt();

                switch (choice) {

                    case 1: case1();
                            break;
                    case 2: case2();
                            break;
                    case 3: case3();
                            break;
                }
            }
            catch(Exception e) {
                System.out.println("error");
            }

            System.out.println("Do you want to continue?");
            String more = input.next();
        } while (more.equals(cont));



    }
}

Мне нужен пользовательский ввод непосредственно перед циклом while, чтобы он знал, хочет ли программа продолжить. Проблема в том, что большее значение внутри условия while не видит, что сканер вводит строку раньше. Какие-либо предложения?

0
Tyler Bull 5 Сен 2016 в 18:28

3 ответа

Лучший ответ

Поместите объявление String more за пределы цикла while:

`public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String cont = "y";
        String more = null;


        do {

            try{
                System.out.println("Welcome to the Pythagorean Theorm Program!!");
                System.out.println("");
                System.out.println("Choose one of the following:");
                System.out.println("");
                System.out.println("1. A2 + B2 = X");
                System.out.println("2. A2 + X = C2");
                System.out.println("3. X + B2 = C2");

                int choice = input.nextInt();

                switch (choice) {

                    case 1: case1();
                            break;
                    case 2: case2();
                            break;
                    case 3: case3();
                            break;
                }
            }
            catch(Exception e) {
                System.out.println("error");
            }

            System.out.println("Do you want to continue?");
            more = input.next();
        } while (more.equals(cont));



    }`
0
Elgayed 5 Сен 2016 в 15:35

Переменная more находится только в области видимости внутри цикла do while. Одним из решений было бы объявить больше вне цикла и только обновить его значение внутри.

Как это...

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    String cont = "y";
    String more = null;

    do {
        .
        .// code here
        .

        System.out.println("Do you want to continue?");
        more = input.next();
    } while (more.equals(cont));

Это происходит потому, что любая переменная, объявленная внутри конструкции do-while, находится в области видимости только в том же цикле, к ней нельзя получить доступ вне цикла или в условии цикла.

Объявление переменной вне цикла и внутри main дает доступ к переменной где угодно внутри основного метода.

0
skeidsberget2365 5 Сен 2016 в 15:36

Ваша проблема здесь в области видимости переменной, вы определили String еще во время своего оператора do, а затем имеете условие while за ее пределами, чтобы исправить это, вам нужно вместо этого изменить область действия на локальную для основной функции, для этого просто добавьте это к вашему коду, прежде чем делать

 public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    String cont = "y";
    String more = null;
    do {
    // rest of code

Вам также нужно будет избавиться от ключевого слова "String" для определения типа данных в вашем do, но это должно быть все.

Хотя, если ваша цель - повторить программу, если им нужно использовать ее снова, почему бы вам не инкапсулировать всю свою основную функцию в цикле while, а условие, например, зависит от ввода пользователя в конце цикла

boolean more = True;
While(more = True){
    // your current code
    // then check to see if they want to go again, if not , change more to false
}

Надеюсь, это поможет

0
Brandon Jones 5 Сен 2016 в 15:37