【问题标题】:I am having difficulty looping my program back to the beginning to start a new loop我很难将我的程序循环回到开头以开始一个新循环
【发布时间】:2016-07-05 05:31:34
【问题描述】:

我正在编写一个代码,用户试图找到三角形的斜边。我的代码首先询问用户他们希望从 A 面还是 B 面开始。我使用 Switch 方法来涵盖这两种情况。在使用任何一种情况后,我希望我的代码做的是回到起点,直到用户退出。出于某种原因,我的代码只处理一种情况,但不会回到开头开始一个全新的循环。我使用了错误的方法吗?我是不是写错了代码?我能做些什么来解决它?

import java.util.Scanner;

public class HandleException {
public static void main (String[] args){
    int data= 0;
    int data1= 0;
    int sum= 0;

    Scanner input = new Scanner (System.in);
    //ask user for a command
    System.out.println("Which side would you like to start with A or B");
    String s= input.next();
            char letter= s.charAt(0);

                loop:while (letter!= 'q'){      


    switch (letter){

    //if user inputs 'A'
        case 'a':

            System.out.println("Enter value for side A: ");
            data= input.nextInt();
                System.out.println("Enter next command: A : value for side A; B : Value for side B; C: Calculate; Q : Quit program.");
                s=input.next();
                letter=s.charAt(0);
                    if (letter == 'b')
                    System.out.println("Enter Value For side B: ");
                    data1= input.nextInt();
                        System.out.println("Enter next command: A : value for side A; B : Value for side B; C: Calculate; Q : Quit program.");
                        s=input.next();
                        letter=s.charAt(0);
                            if (letter== 'c')
                                sum=data*data+data1*data1;
                                int sumsrt = (int) Math.sqrt(sum);
                                System.out.println("The hypotenuse is:  "+sumsrt);
                                continue;

        //if user inputs 'B'                        
        case 'b':
            System.out.println("Enter value for side B: ");
            data= input.nextInt();
                System.out.println("Enter next command: A : value for side A; B : Value for side B; C: Calculate; Q : Quit program.");
                s=input.next();
                letter=s.charAt(0);
                    if (letter == 'a')
                    System.out.println("Enter Value For side a: ");
                    data1= input.nextInt();
                        System.out.println("Enter next command: A : value for side A; B : Value for side B; C: Calculate; Q : Quit program.");
                        s=input.next();
                        letter=s.charAt(0);
                            if (letter== 'c')
                                sum=data*data+data1*data1;
                                int sumsrt1 = (int) Math.sqrt(sum);
                                System.out.println("The hypotenuse is:  "+sumsrt1); 
                                continue;




    }

}
}
}

【问题讨论】:

  • @Makketronix 他的循环中有一堆 input.next()。
  • 啊。但他们在案例“a”和案例“b”下。如果他放别的东西怎么办?
  • 坦率地说,你正在做的事情很难理解,而且在我看来,你在 ifs 之后缺少一些 {}。你是不是来自python?
  • 您可能还必须每次都创建新的扫描仪。见stackoverflow.com/questions/11871520/…

标签: java loops switch-statement


【解决方案1】:

在切换案例后再次读取输入。试试这个

import java.util.Scanner;

public class HandleException {
    public static void main(String[] args) {
        int data = 0;
        int data1 = 0;
        int sum = 0;

        Scanner input = new Scanner(System.in);
        // ask user for a command
        System.out.println("Which side would you like to start with A or B");
        String s = input.next();
        char letter = s.charAt(0);

        while (letter != 'q') {

            switch (letter) {

            // if user inputs 'A'
            case 'a':

                System.out.println("Enter value for side A: ");
                data = input.nextInt();
                System.out.println("Enter next command: A : value for side A; B : Value for side B; C: Calculate; Q : Quit program.");
                s = input.next();
                letter = s.charAt(0);
                if (letter == 'b')
                    System.out.println("Enter Value For side B: ");
                data1 = input.nextInt();
                System.out.println("Enter next command: A : value for side A; B : Value for side B; C: Calculate; Q : Quit program.");
                s = input.next();
                letter = s.charAt(0);
                if (letter == 'c')
                    sum = data * data + data1 * data1;
                int sumsrt = (int) Math.sqrt(sum);
                System.out.println("The hypotenuse is:  " + sumsrt);
                break;

                // if user inputs 'B'
            case 'b':
                System.out.println("Enter value for side B: ");
                data = input.nextInt();
                System.out.println("Enter next command: A : value for side A; B : Value for side B; C: Calculate; Q : Quit program.");
                s = input.next();
                letter = s.charAt(0);
                if (letter == 'a')
                    System.out.println("Enter Value For side a: ");
                data1 = input.nextInt();
                System.out.println("Enter next command: A : value for side A; B : Value for side B; C: Calculate; Q : Quit program.");
                s = input.next();
                letter = s.charAt(0);
                if (letter == 'c')
                    sum = data * data + data1 * data1;
                int sumsrt1 = (int) Math.sqrt(sum);
                System.out.println("The hypotenuse is:  " + sumsrt1);
                break;

            }

            System.out.println("Which side would you like to start with A or B");
            s = input.next();
            letter = s.charAt(0);

        }
    }
}

【讨论】:

    【解决方案2】:

    第一次循环结束后,转到while(letter!= 'q')这一行 字母值为c

    switch 中没有匹配值,所以第二次循环将结束并且什么都不做。

    它会一直循环,所以你没有机会问下一个System.in

    【讨论】:

      【解决方案3】:

      完成斜边计算后,您不会要求退出字符。这就是为什么程序进入无限循环而不退出的原因你也使用 break 一旦完成。

      if (letter == 'b')
                          System.out.println("Enter Value For side B: ");
                          data1= input.nextInt();
                              System.out.println("Enter next command: A : value for side A; B : Value for side B; C: Calculate; Q : Quit program.");
                              s=input.next();
                              letter=s.charAt(0);
                                  if (letter== 'c')
                                      sum=data*data+data1*data1;
                                      int sumsrt = (int) Math.sqrt(sum);
                                      System.out.println("The hypotenuse is:  "+sumsrt);
                          System.out.println("Press q for quit otherwise enter side ");
      
                            break;
      

      case 'b' 也一样

      【讨论】:

        猜你喜欢
        • 2021-04-06
        • 1970-01-01
        • 1970-01-01
        • 2019-03-30
        • 2018-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多