【问题标题】:Finding Average Character Per Word in a Single String查找单个字符串中每个单词的平均字符
【发布时间】:2013-03-11 22:06:03
【问题描述】:

我有点卡在这个问题上。我试图在一个字符串中存储 1 个或多个单词,找到所有单词组合的长度,然后将其除以单词数以找到平均值。我需要在 while 循环中执行此操作(这是作业的目标)

当我输入“Hello my name is”时,它会返回长度为

Result:  
5  
2  
4  
2  

但我想要的是将这些结果相加,然后除以字数

5+2+4+2 = 13  
13/4 = 3.25

这是我目前所拥有的:

Scanner in = new Scanner(System.in);

int counter = 0;
double sum = 0;

while (in.hasNext()) {
    String word = in.next();
    double totalchar = word.length();
    sum = totalchar + sum;
    counter++;


    double average = 0;
    if (counter > 0) {
        average = sum / counter;

    }
    System.out.println(average);
}

【问题讨论】:

  • 非常感谢您的帮助。毕竟,我能够发送它而不需要 break 语句。是时候好好睡一觉了..

标签: java


【解决方案1】:

只需将average 的计算和打印移到while 循环之外:

while (in.hasNext()) {
    String word = in.next();
    if (word.equals("exit")) {
        break;
    }
    double totalchar = word.length();
    sum = totalchar + sum;
    counter++;
}
double average = 0;
if (counter > 0) {
    average = sum / counter;
}
System.out.println(average);

【讨论】:

  • 我似乎无法通过运行此程序获得任何输出。也许我需要在运行一次后将 while 条件设为 false,但我不知道该怎么做。有什么建议?这在 for 循环中会容易得多......
  • @user1723337 答案已更新。请参阅this answer 以了解我添加if 验证以打破while 循环的原因。
  • 非常感谢路易吉。这解决了问题!但是一些坏消息..我必须将它提交给在线编译器,它还不够聪明,无法将 if 语句视为哨兵。它希望能够在不输入任何额外数据的情况下循环。如果我只使用两个布尔类型变量,它可以工作吗?将两者都设置为true,然后在执行一次后将其中一个设置为false以自动退出?同样,您的解决方案完全有效,但在线提交者正在寻找只需要用户输入一次的内容。
  • @user1723337 如果是这种情况,请在发送之前删除if 验证。我确信机器人会提供一个文件作为输入,然后in.hasNext() 会在一段时间内返回false
  • 是的,没有运气。它说while循环是无限的。我似乎找不到任何东西来自动打破 if 语句。
【解决方案2】:

也许这对你有帮助:
您必须将计算从 average outside while 循环
否则每次都会计算和打印!

我也对其进行了一些改进。 (你不需要每次都加倍)

Scanner scanner = new Scanner(System.in);

int sum = 0;
int counter = 0;

while (in.hasNext())
{
    sum += in.next().length();
    counter++;
}

double average = 0.0;
if (counter > 0)
    average = sum / counter;

System.out.println(average);

【讨论】:

  • 我的回答中没有说明吗?
【解决方案3】:

请参阅下面的增强版本:

    int counter = 0;
    int sum = 0; // not yet needed to be of type double
    String word = null;

    while (in.hasNext()) {
        word = in.next();
        sum += word.length();
        counter++;
    }

    double average = 0;
    if (counter > 0) {
        average = sum / counter;
    }
    System.out.println(average);

当它们将在循环中重新分配时,请在外部声明变量。

将您的计数器检查放在循环内是不好的,因为您将一遍又一遍地创建平均值以及检查计数器是否为 0。
这样,它会减慢您的处理周转时间。

【讨论】:

    【解决方案4】:

    以下示例是使用 BufferedReader:

    import java.util.*;
    import java.io.*;
    class WordAmount {
    public static void main(String... args) throws IOException{
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String line = "";
    
    while((line=br.readLine())!=null) {
       if(line.length() > 0) {
       String[] words = line.split(" ");
       int totalWords = words.length;
       int totalChars = 0;
       System.out.println("Number of words: "+totalWords);
       for(int i=0;i<words.length;i++) {
          System.out.println("Length 0f "+words[i]+" : "+words[i].length());
          totalChars += words[i].length();
       }
       System.out.println("Average count :"+ ((double)totalChars/totalWords));
      }
    }
    }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多