-2

所以我有一个 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);
        }
    }
}
4

5 回答 5

5

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

它一定要是

    do {
        // body
    } while(condition);

while 循环看起来像这样

    while(condition) {
        // body
    }

您必须将代码更改为以下内容:

    String input;
    boolean status;
    do {
        input = // read input
        status = input.equalsIgnoreCase("J");
    } while(status);
于 2013-09-19T11:18:41.480 回答
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);

编辑2

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

   if (input.equalsIgnoreCase("N")) status = false;
} while(status);
于 2013-09-19T11:12:49.680 回答
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

编辑:把scanner-init放在一边

旧答案:

它的无限循环,您将状态设置为 true 但是,只要状态为 true,您就可以迭代

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

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

于 2013-09-19T11:12:57.003 回答
1

尝试这个

do
{
       if (input.equalsIgnoreCase("J")) {
             status=true;
       }
       else if (input.equalsIgnoreCase("N"))
           status = false;
       }
}while (status);
于 2013-09-19T11:13:39.580 回答
0

你的循环是:

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

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

于 2013-09-19T11:12:58.020 回答