所以我有一个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);
}
}
}
答案 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
结构。
修改强>
这可能是你真正想要的:
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
子句放在循环中。