-1

我想知道是否有人可以告诉我为什么我的 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

4 回答 4

0

如果用户输入 4 个或更多单词,您的循环将失败。更改wordCount != 3wordCount < 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分解成更小的方法。现在,您可以测试这些方法。

于 2013-06-28T04:29:07.667 回答
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 + ".");

   } 
}
于 2013-06-28T06:43:44.467 回答
0

您的主要问题是您的循环永远不会终止;wordCount没有在您的do...while块内更新。

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

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

//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+");
}
于 2013-06-28T06:06:43.620 回答
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循环检查它是否应该首先执行一个动作,这就是你想要做的。


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

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

作为快速修复,我添加了这两行来解决这些问题:

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

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

于 2013-06-28T05:11:11.743 回答