我在编写代码时遇到问题,只要用户没有结束“退出”,就会生成一个while循环请求用户输入。当我运行代码时,它只生成第一个提示问题“输入一个句子或一个短语:”,然后在输入短语后它不会计算while语句。有谁知道我做错了什么?
问题是: “让程序让用户继续输入短语而不是每次都重新启动它会很好。为此,我们需要围绕当前代码的另一个循环。也就是说,当前循环将嵌套在新循环中。添加一个外部while循环,只要用户没有输入短语quit就会继续执行。修改提示以告诉用户输入短语或退出退出。请注意,计数的所有初始化都应在内部while循环(也就是我们希望用户输入的每个新短语重新开始计数)。你需要做的就是添加while语句(并考虑读取的位置,以便循环正常工作)。确保要通过程序并在添加代码后正确缩进 - 使用嵌套循环,内部循环应该缩进。“
import java.util.Scanner;
public class Count
{
public static void main (String[] args)
{
String phrase; // A string of characters
int countBlank; // the number of blanks (spaces) in the phrase
int length; // the length of the phrase
char ch; // an individual character in the string
int countA, countE, countS, countT; // variables for counting the number of each letter
scan = new Scanner(System.in);
// Print a program header
System.out.println ();
System.out.println ("Character Counter");
System.out.println ("(to quit the program, enter 'quit' when prompted for a phrase)");
System.out.println ();
// Creates a while loop to continue to run the program until the user
// terminates it by entering 'quit' into the string prompt.
System.out.print ("Enter a sentence or phrase: ");
phrase = scan.nextLine();
while (phrase != "quit");
{
length = phrase.length();
// Initialize counts
countBlank = 0;
countA = 0;
countE = 0;
countS = 0;
countT = 0;
// a for loop to go through the string character by character
// and count the blank spaces
for (int i = 0; i < length ; i++)
{
ch = phrase.charAt(i);
switch (ch)
{
case 'a': // Puts 'a' in for variable ch
case 'A': countA++; // Puts 'A' in for variable ch and increments countA by 1 each time
break; // one of the variables exists in the phrase
case 'e': // puts 'e' in for variable ch
case 'E': countE++; // ... etc.
break;
case 's':
case 'S': countS++;
break;
case 't':
case 'T': countT++;
break;
case ' ': countBlank++;
break;
}
}
// Print the results
System.out.println ();
System.out.println ("Number of blank spaces: " + countBlank);
System.out.println ();
System.out.println ("Number of a's: " + countA);
System.out.println ("Number of e's: " + countE);
System.out.println ("Number of s's: " + countS);
System.out.println ("Number of t's: " + countT);
System.out.println ();
}
}
}
答案 0 :(得分:5)
这是两个方面的问题:
while (phrase != "quit");
首先,不要使用==
或!=
进行字符串相等性检查。它仅检查引用标识。
其次,最后的;
意味着它将永远循环。它相当于:
while (phrase != "quit")
{
}
你想:
while (!phrase.equals("quit"))
你也想要在循环结束时要求更多输入。 (仍然在循环体内,但在输出部分之后。)或者将循环条件更改为永久循环,在开始时请求输入,然后在输入为&#34;退出&#34;时断开。
答案 1 :(得分:1)
您需要在while
循环内再次收集输入。最后放一些这样的东西:
phrase = scan.nextLine();
请注意,在while循环开始之前,您只获得一次phrase
的值。在那之后,你永远不会把它设置为其他任何东西。执行输出后,您需要为phrase
收集另一个值(可能等于“退出”)。
答案 2 :(得分:0)
地图在这里是更好的选择:
Map<Character, Integer> counter = new HashMap<Character, Integer>();
for(int i = 0; i < length ; i++)
{
ch = phrase.charAt(i);
counter.put(ch, counter.get(ch) + 1);
int charACount = counter.get('A');