无法摆脱我的while循环

时间:2013-06-28 04:13:07

标签: java string while-loop string-length word-count

我想知道是否有人可以告诉我为什么我的while循环表现得很有趣。当我输入一个3字的短语时,它应该创建一个首字母缩略词。出于我的java理解之外的原因,while循环执行但是即使客户端输入正确的答案也会继续执行。知道为什么吗?我已经阅读了几百万个帖子,并观看了关于它的YouTube视频,但没有任何线索。

import javax.swing.*;
import java.util.*;

public class ThreeLetterAcronym
{
    public static void main(String args[]) 
    {
        //variables
        String phrase;
        int wordCount;
        String acronym;

        //input
        phrase = JOptionPane.showInputDialog(null, "Please enter a three word phrase.");
        String [] word = phrase.split("\\s+");
        wordCount = word.length;

        //loop for error when less than 3 words
            do
            {
                    JOptionPane.showMessageDialog(null, "Error, you need to input a 3 word phrase to create a 3 letter acronym." + '\n' 
                    + "Please try again.");
                    phrase = JOptionPane.showInputDialog(null, "Please enter a three word phrase");
            }       
            while(wordCount !=3);

        //create acronym
        acronym = Character.toString(word[0].charAt(0)).toUpperCase() + 
                     Character.toString(word[1].charAt(0)).toUpperCase() + 
                     Character.toString(word[2].charAt(0)).toUpperCase();

        //output
        JOptionPane.showMessageDialog(null, "The phrase you inputed is " + "." 
        + phrase + "\nYour 3 letter acronym is " + acronym + ".");


    } 
}



enter code here

4 个答案:

答案 0 :(得分:0)

如果用户键入4个或更多单词,您的循环将失败。将wordCount != 3更改为wordCount < 3或准备好处理更长的短语,例如北大西洋公约组织

do-while循环始终至少执行一次。在这里,您要检查错误,这实际上是合理的,但您也永远不会重新计算word数组,因此错误情况仍然存在。你想要像以下逻辑:

String[] words;  // words, not word.  There is more than one.
while (true) {
    // 1. Fill in the word array from the user's input.
    // 2. Check the input for errors.
    //     a. If there are none, break out of the loop with a break statement.
    //     b. Otherwise, show the error message.
}
// Create the acronym.  Try to use a loop for this too, as in:
StringBuilder acronym = new StringBuilder();
for (String word: words) {
    // Append to acronym.
}
// report acronym.

最后,尽量不要在main中完成所有工作。创建一个ThreeLetterAcronym对象,给它实例变量和方法,并告诉它做这项工作。将main中的工作分解为更小的方法。现在,您可以测试这些方法。

答案 1 :(得分:0)

在输入一个三字短语后你的循环正在执行,因为正如Eric所说,'do-while'循环总是至少执行一次。解决该问题的最佳,简单的解决方案是使用while循环,如下所示:

while(wordCount != 3)
{
    JOptionPane.showMessageDialog(null, "Error, you need to input a 3 word phrase to create a 3 letter acronym." + '\n' 
    phrase = JOptionPane.showInputDialog(null, "Please enter a three word phrase");enter code here
}

do-while循环执行操作,然后检查是否应该再次执行该操作。 while循环检查它是否应该首先执行操作,这是您想要执行的操作。


还有一些其他重要问题值得同时解决。

程序进入word循环后,您的变量wordCountdo-while不会更新。如果用户首先输入三个单词的短语,他们就没事了。如果他们输入任何其他长度的短语,程序将无限循环。由于程序仅在do-while循环内执行逻辑,并且不包括将新单词保存到变量word中或者计算它们的长度并将其存储在wordCount中,因此没有退出循环的方法。

作为一个快速解决方案,我添加了这两行来解决这些问题:

word = phrase.split("\\s+");
wordCount = word.length;

你也可以通过检查完全消除wordCount变量,但我老实说不确定这样做是否有价值而不是使用变量。 phrase.split("\\s+").length循环中的while

答案 2 :(得分:0)

你的主要问题是你的循环永远不会终止; wordCount阻止内部未do...while更新。

您的下一个问题是do...while循环始终至少运行一次。

你可以做些什么来解决这个问题是将word的另一个实例化移动到你的循环体中,删除不必要的wordCount变量(因为它是数组的属性,我们只需要它一个地方),并将您的do...while更改为while

//input
phrase = JOptionPane.showInputDialog(null, "Please enter a three word phrase.");
String[] word = phrase.split("\\s+");

//loop for error when less than 3 words
while(word.length < 3) {
    JOptionPane.showMessageDialog(null, "Error, you need to input a 3 word phrase to create a 3 letter acronym." + '\n'
            + "Please try again.");
    phrase = JOptionPane.showInputDialog(null, "Please enter a three word phrase");
    word = phrase.split("\\s+");
}

答案 3 :(得分:0)

解决

使用此代码 -

import javax.swing.*;

public class ThreeLetterAcronym
{

public static void main(String args[]) 
{
    //variables
    String phrase;
    int wordCount;
    String acronym;

    //input
    phrase = JOptionPane.showInputDialog(null, "Please enter a three word phrase.");
    String [] word = phrase.split(" ");

    wordCount = word.length;        

    //loop for error when other than 3 words
        while(wordCount!=3)
        {
                JOptionPane.showMessageDialog(null, "Error, you need to input a 3 word phrase to create a 3 letter acronym." + '\n' 
                + "Please try again.");
                phrase = JOptionPane.showInputDialog(null, "Please enter a three word phrase");
        } 

    //create acronym
    acronym = Character.toString(word[0].charAt(0)).toUpperCase() + 
                 Character.toString(word[1].charAt(0)).toUpperCase() + 
                 Character.toString(word[2].charAt(0)).toUpperCase();

    //output
    JOptionPane.showMessageDialog(null, "The phrase you inputed is " + "." 
    + phrase + "\nYour 3 letter acronym is " + acronym + ".");

   } 
}