为什么循环工作不正常呢?

时间:2015-11-19 20:01:24

标签: java while-loop do-while

我正在为我的课程开展一个项目。该程序运行良好,直到它达到我的最终程序我认为我已经完成时已经搞乱了大约2个小时。

这是它搞乱的代码。

do {
                System.out.println("Do you want to end program? (Enter n or y):");
                endProgram = Input.next();
                if(!endProgram.equals("y") || (!endProgram.equals("n"))){
                    System.out.println("Do you want to end program? (Enter n or y):");
                }
                if (endProgram.equalsIgnoreCase("n")){
                    endProgram = "n";
                    aui = true;
                } 
                if (endProgram.equalsIgnoreCase("y")){
                    endProgram = "y";
                    aui = true;
                }
            } while(aui = false);

如果然后切换到if,我尝试搞乱其他人。完整代码是

public static String endProgram = null;
public static void main(String[] args) {


    String MUR = "--------------Monthly Use Report--------------";
    int minutesAllowed;
    int minutesUsed = 0;
    int minutesOver;
    double totalOwed;
    double monthlyRate = 74.99;
    double minOver = 0.20;
    double realOwed;
    boolean valid = false;
    boolean over = false;
    boolean aui = false;

    Scanner Input = new Scanner(System.in);

    System.out.println("Welcome to the Cell Phone Minutes Calculator.");

    do {

        do {
            System.out.println("Please input the amount of minutes you were allowed to use per month.");
            System.out.println("Please Enter a value between (200 - 800)");

            minutesAllowed = Input.nextInt();

        } while (minutesAllowed <= 199 || minutesAllowed >= 801);{

    }

        do{
            try{
                System.out.println("How many minutes were used during the previous month?");
                minutesUsed = Input.nextInt();

                if(minutesUsed <= 1){
                    System.out.println("--Invalid Input! Please use a positive number.--");
                } else {
                    valid = true;
                }
            } catch(Exception e){
                System.out.println("Invalid Input! Please try again.");
                Input.next();
            }
        }while(!valid);

        minutesOver = minutesAllowed - minutesUsed;

        if(minutesAllowed >= minutesUsed){
            System.out.println("You were not over your minutes for the month!");
        } else {
            System.out.println("You were over your minutes by "+ Math.abs(minutesOver));
            over = true;
        }
            totalOwed = (Math.abs(minutesOver))*(minOver);
            realOwed = totalOwed+monthlyRate;
        System.out.println(MUR);
        System.out.println("Minutes allowed were "+ minutesAllowed);
        System.out.println("Minutes used were "+ minutesUsed);
        if(over){
            System.out.println("Minutes over were "+ Math.abs(minutesOver));
            System.out.println("Total due is $"+ realOwed);
        } else {
            System.out.println("Total due is $"+ monthlyRate);
        }


     do {
            System.out.println("Do you want to end program? (Enter n or y):");
            endProgram = Input.next();
            if(!endProgram.equals("y") || (!endProgram.equals("n"))){
                System.out.println("Do you want to end program? (Enter n or y):");
            }
            if (endProgram.equalsIgnoreCase("n")){
                endProgram = "n";
                aui = true;
            } 
            if (endProgram.equalsIgnoreCase("y")){
                endProgram = "y";
                aui = true;
            }
        } while(aui = false);


    }while((endProgram.equalsIgnoreCase("n")) && (aui = false));

}

}

很抱歉,如果代码很草率。当我运行程序时它运行正常,除非我输入两个不正确的用户输入。比如,

程序运行//

  

--------------月度使用报告--------------

     

允许的分钟数为450

     

使用的分钟数是500

     

会议纪要是50

     

应付总额为84.99美元

     

你想结束节目吗? (输入n或y):

     

     

你想结束节目吗? (输入n或y):

如果我添加Input.Next();将if语句嵌套到

if(!endProgram.equals("y") || (!endProgram.equals("n"))){
                    System.out.println("Do you want to end program? (Enter n or y):");
                    endProgram = Input.next();

它正确显示。我试着搞乱整个项目中的大量do while循环。如果有人可以帮助我,我将不胜感激。对不起如果这很困惑,如果你们有任何问题,我会回复。提前感谢您的任何回复,并对此给您带来的不便表示歉意。

1 个答案:

答案 0 :(得分:5)

替换

Card

Card x, y;

while (aui = false); //here you are assigning aui to false value 是赋值运算符,while (aui == false); //here you are comparing aui to false value 是比较运算符。

最佳做法是直接使用布尔值,而不是通过比较:

=