0

编写一个包含@字符的单词作为输入的程序。如果单词不包含@,它应该提示用户输入带有@ 的单词。一旦读取了带有@ 的单词,它应该输出该单词然后终止。

这是我到目前为止所做的:

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

        System.out.println(" Please enter a word with @ ");
        Scanner scan = new Scanner(System.in);

        String bad = "@";

        String word = scan.next();
        do
            if (!word.contains(bad))
                System.out.println(" Please try again ");
            else
                System.out.println(" " + word);
        while (!word.contains(bad));
    }
}

在输入包含“@”的单词后,我可以让它终止,但是如果我尝试在“请重试”之后将扫描仪添加到该行,它会说while expected

4

4 回答 4

5

我认为问题是您缺少 do/while 周围的大括号:

       do
          if (!word.contains( bad ))
            System.out.println( " Please try again " );

            else 
            System.out.println( " " + word);

        while ( !word.contains( bad ));

应该:

do
{
            if (!word.contains( bad ))
            System.out.println( " Please try again " );

            else 
            System.out.println( " " + word);
}while ( !word.contains( bad ));

有些人可能不喜欢这样,但我的建议是始终使用开/关大括号。在这种情况下,对于代码 if/else 也是如此。它避免了很多混乱。

于 2012-12-11T04:54:54.550 回答
1

这就是您的问题所在:

       do
            if (!word.contains(bad))
                System.out.println(" Please try again ");
            else
                System.out.println(" " + word);
        while (!word.contains(bad));

您需要从循环开始的地方放置大括号,直到结束。|所以这个东西应该是这样的:

do {
    if (!word.contains(bad))
        System.out.println(" Please try again ");
    else
        System.out.println(" " + word);
} while(!word.contains(bad));

为了更好的实践,您应该在此处do...while检查循环。

于 2012-12-11T04:54:27.250 回答
0

有两个问题。

  1. 您的代码没有正确使用大括号
  2. 如果没有输入正确的单词,您就不会尝试阅读新单词。

另外,我更喜欢while在这种情况下更好地do-while循环,而不是如下所示的循环。

    Scanner scan = new Scanner ( System.in );
    String required= "@";
    System.out.println( " Please enter a word with @ " );
    String word = scan.next() ;

    //check if the right word(containing @) is entered, 
    //if not then loop until it is enteres
    while((!word.contains(required)){
        System.out.println( " Please try again " );
        //read the new word as input from the user
        word = scan.next() ;
    }
    //right word is entered, display it
    System.out.println(word);

另请注意,当您使用 时scan.next(),如果在同一行中输入,它会分别读取每个单词。

于 2012-12-11T04:56:31.900 回答
0

您的代码的问题在于它没有重新阅读循环中的单词。像这样修改循环(对代码的最小更改)。

do {
        word = scan.next();
        if (!word.contains(bad))
            System.out.println(" Please try again ");

        else
            System.out.println(" " + word);
    }
    while (!word.contains(bad));

是的,正如其他人指出的那样,尝试使用大括号,尤其是嵌套结构。

于 2012-12-11T05:04:20.887 回答