是的,这是作业,但我正在寻求帮助。我已经阅读了我们的书,并且我尝试与一个团队合作,我尝试过在这里和其他地方进行搜索。
我有点工作。它要求两次字符串(应该只询问一次),如果用户输入空白代码,它似乎会给出错误消息。但是,它重复了#34;你的字符串中有1个单词。你的字符串中有2个单词。你的字符串中有3个单词。你的字符串中有4个单词。你的字符串中有5个单词。"然后再重复 - 无论字符串中有多少个单词。我无法弄清楚我做错了什么,并感谢任何帮助。
/*
* Lab07a.java
*
* A simple program that computes the number of words in an input string.
* Used to practice breaking code up into methods.
*
* @author ENTER YOUR NAMES HERE
*
*/
package osu.cse1223;
import java.util.Scanner;
public class Lab07a {
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in); //get scanner//
getInputString(keyboard);
String input = getInputString(keyboard);
int count = getWordCount(input);
}
// Given a Scanner, prompt the user for a String. If the user enters an empty
// String, report an error message and ask for a non-empty String. Return the
// String to the calling program.
private static String getInputString(Scanner keyboardScanner) {
System.out.print("Enter a string: ");
String str = keyboardScanner.nextLine();
if (str.length() ==0)
{
System.out.print("ERROR - string must not be empty");
}
return str;
}
// Given a String return the number of words in the String. A word is a sequence of
// characters with no spaces. Write this method so that the function call:
// int count = getWordCount("The quick brown fox jumped");
// results in count having a value of 5. You will call this method from the main method.
// For this assignment you may assume that
// words will be separated by exactly one space.
private static int getWordCount(String str) {
int spaces = 0;
int i = 0;
while (i <str.length())
{
char ch = str.charAt(i);
if (ch == ' ')
i++;
{
spaces++;
System.out.print("Your string has " + spaces + "words in it." );
}
}
return spaces;
}
}
答案 0 :(得分:0)
它要求你输入两次字符串的原因是你告诉它,就在这里:
getInputString(keyboard); //HERE YOU ASK FOR AN INPUT STRING
String input = getInputString(keyboard); //HERE YOU ASK FOR IT AGAIN
请求一次,然后存储结果,然后继续。
主要问题的最佳答案是考虑算法,计算这些空间的计划。用英语写出来,并确保在将它放入Java之前相信它。这就是你现在正在做的事情:
while we haven't reached end of string
if the current character is a space
go further in the string
else
add 1 to the number of spaces found so far
print the number of spaces found so far
现在,这显然不是你的意思。首先,如果你到达一个空间,为什么还要更进一步?另一方面,如果你找不到空格,你为什么要加1到目前为止找到的空格数?为什么要打印到目前为止找到的空格数 - 每次进入循环时 - 但只有在没有找到空格的情况下?
难怪它正在打印1个空格,2个空格,3个空格等。
通过用英语编写算法来提前规划对于避免这样的问题至关重要。
所以:采用这种算法并对其进行更改,使其显示您想要说的内容,仍然使用英语 - 然后转换为Java。
进一步的提示:你的缩进看起来随意到最后。这使得你很难看出你是否犯了错误。严格注意缩进,您将能够更好地检测是否存在问题。
答案 1 :(得分:-1)
移动此行
System.out.print(&#34;你的字符串有&#34; +空格+&#34;其中有单词。&#34;);
应该解决你的概率的循环。没有1
我真的怀疑它是否会进行两次打印。
但是我必须说有更好的方法可以做到这一点。 str.split(&#34;&#34;); 是其中之一
修改强> 您是否两次调用getWordsCount,遗憾的是我手机上的格式化版本出现了问题