我在do-while循环成功将整数更改为if语句中的值时遇到问题。如果输入“ y ”或“ n ”,它将正确退出循环,但整数的值将保持为0。
我正在使用子字符串来允许用户输入类似“是”或“ YE ”的内容,甚至“ Y3 $ ir “并且仍然等同于' y '到java。
代码:
import java.util.Scanner;
public class aTaskforAll
{
public static void main (String [] args)
{
Scanner scan = new Scanner(System.in);
String readAll;
int readAllOption = 0;
do {
System.out.print("Do you want the words printed? (y/n) ");
readAll = scan.nextLine();
System.out.println(readAll.substring(0));
if ((readAll.substring(0) == "y") || (readAll.substring(0) == "Y"))
readAllOption = 1;
else if ((readAll.substring(0) == "n") || (readAll.substring(0) == "N"))
readAllOption = 2;
}
while (readAllOption != 0);
System.out.println(readAllOption); //Tester
//Go on to do task in response to readAllOption = 1 or 2
}
}
答案 0 :(得分:1)
String.substring(int)
方法没有按照您的想法执行。
以下是文档说的内容:
返回一个新字符串,该字符串是此字符串的子字符串。子字符串以指定索引处的字符开头,并延伸到此字符串的末尾。
所以,readAll.substring(0)
会给你一个子字符串,它基本上会包含原始字符串中的所有字符。
您的用例的正确方法是String.substring(int,int)
。
来自文档
返回一个新字符串,该字符串是此字符串的子字符串。子字符串从指定的beginIndex开始,并扩展到索引endIndex - 1处的字符。因此子字符串的长度为endIndex-beginIndex。
因此,readAll.substring(0, 1)
将为您提供仅包含第一个字符的子字符串。
或者使用String.startsWith(String)
方法
if (readAll.startsWith("y") || readAll.startsWith("Y"))
//...
另一个问题是对象(在你的情况下是字符串)使用==
进行等式检查:
//...
if ((readAll.substring(0) == "y") || (readAll.substring(0) == "Y"))
//...
else if ((readAll.substring(0) == "n") || (readAll.substring(0) == "N"))
//...
不要使用==
,而是使用.equals
方法进行相等性检查。 ==
用于身份检查,这意味着只需比较参考文献。
此外,您应该在每次迭代开始时重置readAllOption
的值:
do {
readAllOption = 0;
退出循环。
答案 1 :(得分:1)
首先,你的终止条件是倒退的。
你想要
do {
stuff...
}
while (readAllOption == 0)
如上所述,它只会在readAllOption == 0时退出循环。 你需要在每个循环开始时将它设置为0。
其次,readAll.subString(0)
返回整个String。您需要readAll.charAt(0)
,并将其与字母“Y”或“N”进行比较。
我不知道这段代码是如何为您远程工作的。
答案 2 :(得分:1)
使用字符串,您需要使用.equals("y")
而不是==
,并且您没有子字符串的结束索引。
所以喜欢这个
if (readAll.substring(0, 1).equals("y")){}
正如Bhesh Gurung所说
此外,您应该在每次迭代开始时重置readAllOption的值:
做{ readAllOption = 0;
也作为用户user949300说
你的终止条件是倒退。
你想要
做{ 东西... } while(readAllOption == 0) 如上所述,它只会在readAllOption == 0
时退出循环
答案 3 :(得分:1)
比较字符串时,请使用.equals()
代替==
。
获得第一个角色也会有效(而且效率更高):
readAll.charAt(0) == 'y'
答案 4 :(得分:0)
让你的代码像这样。保持它的完整性。
import java.util.Scanner;
public class aTaskforAll
{
public static void main (String [] args)
{
Scanner scan = new Scanner(System.in);
String readAll;
int readAllOption = 0;
do {
System.out.print("Do you want the words printed? (y/n) ");
readAll = scan.nextLine();
System.out.println(readAll.substring(0));
if ("y".equals(readAll.substring(0,1).toLowerCase())
readAllOption = 1;
else if ("n".equals(readAll.substring(0,1).toLowerCase())
readAllOption = 2;
}
while (readAllOption != 0);
System.out.println(readAllOption); //Tester
//Go on to do task in response to readAllOption = 1 or 2
}
}