在do-while循环中为整数添加值

时间:2013-03-07 06:08:58

标签: java loops if-statement do-while

我在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
    }
}

5 个答案:

答案 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
   }
}