我想知道是否有人可以告诉我为什么我的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
答案 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
循环后,您的变量wordCount
和do-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 + ".");
}
}