1

私はこの問題にちょっと立ち往生しています。1 つ以上の単語を 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);
}
4

4 に答える 4

1

次の例は、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));
  }
}
}
}
于 2013-03-22T06:37:16.350 に答える
1

その拡張バージョンについては、以下を参照してください。

    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の場合はチェックするためです
。これにより、処理の所要時間が遅くなります。

于 2013-03-22T06:21:22.003 に答える
1

たぶんこれが役に立ちます: while ループの
から計算を移動する必要があります。そうしない と、毎回計算されて出力されます! average

私も少し改善しました。(毎回2倍にする必要はありません)

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);
于 2013-03-22T06:18:47.377 に答える
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);
于 2013-03-22T06:12:48.137 に答える