我的do / while循环不起作用

时间:2013-09-19 11:10:25

标签: java do-while

所以我有一个do-while循环,它应该读取用户输入。如果用户键入J,那么它应该要求用户键入2个数字来计算它们,但如果用户键入N则应该停止循环。知道为什么它不起作用吗?

if (input.equalsIgnoreCase("J")) {
    do
    {
        status=true;
    }
    while (status);{
        if (input.equalsIgnoreCase("N"))
            status = false;
    }
}

完整代码:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        boolean status=true;
        while (status){
            Scanner minScanner1 = new Scanner(System.in);  // mina scanners som tar in userinput
            Scanner scanner2 = new Scanner(System.in);
            System.out.println("Skriv in ditt nummer en och en :\n"); //obivous

            double nr1 = minScanner1.nextDouble(); // int nr 1 lagrar det userinput skriver in på scanner 1
            double nr2 = minScanner1.nextDouble();


            System.out.println("välj vad du vill göra: ");

            double svar =0;

            String användarInlägg = scanner2.nextLine(); // själva miniräknaren
            if(användarInlägg.equalsIgnoreCase("+")) { 
                svar = nr1 + nr2;
            }
            else if(användarInlägg.equalsIgnoreCase("-")) {
                svar = nr1 - nr2;
            }
            else if(användarInlägg.equalsIgnoreCase("*")) {
                svar = nr1 * nr2;
            }
            else if(användarInlägg.equalsIgnoreCase("/")) {
                svar = nr1 / nr2;
            }
            System.out.printf("= %.2f\n ", svar);
            System.out.println("Skriv in J för att fortsätta N för att sluta: \n"); 

            Scanner scanner3 = new Scanner(System.in);
            String input=scanner3.nextLine();

            do
            {
                if (input.equalsIgnoreCase("N")) status = false;
                else if (input.equalsIgnoreCase("J")) status =true;
            } while(true);
        }
    }
}

5 个答案:

答案 0 :(得分:4)

这不是do / while循环的正确语法

必须是

    do {
        // body
    } while(condition);

while循环看起来像

    while(condition) {
        // body
    }

您必须将代码更改为:

    String input;
    boolean status;
    do {
        input = // read input
        status = input.equalsIgnoreCase("J");
    } while(status);

答案 1 :(得分:1)

do-while结构只是这一部分:

do
{
   status=true;
}
while (status);

其余所有内容都不属于do-while结构。

顺便说一下,这将是一个无限循环,因为while条件总是正确的。

修改

这可能是你真正想要的:

do
{
   //TODO here: update input variable

   if (input.equalsIgnoreCase("N")) status = false;
} while(status);

<强> EDIT2

String input;
do
{
   scanner3 = new Scanner(System.in);
   input=scanner3.nextLine();

   if (input.equalsIgnoreCase("N")) status = false;
} while(status);

答案 2 :(得分:1)

试试这段代码:

package com.example.main;

import java.util.Scanner;

public class Main { public static void main(String[] args) {

  public static void main(String[] args) {
    boolean status = true;
    Scanner sc = new Scanner(System.in);
    while (status){
        System.out.println("Skriv in ditt nummer en och en :\n");
        double nr1 = Double.parseDouble(sc.nextLine());
        double nr2 = Double.parseDouble(sc.nextLine());

        System.out.println("välj vad du vill göra: ");

        double svr = 0;

        String användarInlägg = sc.nextLine();
        if (användarInlägg.equalsIgnoreCase("+")) {
            svr = nr1 + nr2;
        } else if (användarInlägg.equalsIgnoreCase("-")) {
            svr = nr1 - nr2;
        } else if (användarInlägg.equalsIgnoreCase("*")) {
            svr = nr1 * nr2;
        } else if (användarInlägg.equalsIgnoreCase("/")) {
            svr = nr1 / nr2;
        }
        System.out.printf("= %.2f\n ", svr);
        System.out
                .println("Skriv in J för att fortsätta N för att sluta: \n");


        String input = sc.nextLine();

        if (input.equalsIgnoreCase("N"))
            status = false;
    }
    }

    }

如果输入为“N”,则将状态设置为false

编辑:将scan-init放在

之外 老答案:

它的无限循环,你将状态设置为true,但只要状态为真,你就会迭代

     do
    {
    status=true;
    }
     while (status);

实际上我今天在你的另一个问题上发布了针对该问题的解决方法......

答案 3 :(得分:1)

试试这个

do
{
       if (input.equalsIgnoreCase("J")) {
             status=true;
       }
       else if (input.equalsIgnoreCase("N"))
           status = false;
       }
}while (status);

答案 4 :(得分:0)

你的循环是:

 do{
    status=true;
 } while (status);

永远不会达到if子句。您需要将if子句放在循环中。