新手写作方法 - 计算字符串中的单词

时间:2014-10-11 17:35:29

标签: methods counting

是的,这是作业,但我正在寻求帮助。我已经阅读了我们的书,并且我尝试与一个团队合作,我尝试过在这里和其他地方进行搜索。

我有点工作。它要求两次字符串(应该只询问一次),如果用户输入空白代码,它似乎会给出错误消息。但是,它重复了#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;
}
}

2 个答案:

答案 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,遗憾的是我手机上的格式化版本出现了问题