0

基本的な配列の問題に関するヘルプを探しています。プログラムは、文を読み取り、単語の長さの頻度を配列に格納してから、1文字の単語、2文字の単語などの単語数を出力する必要があります。

私はかなり生のJavaプログラマーですが、以下でそれを突き刺しました。いくつかのガイダンスをいただければ幸いです。私が持っているものはコンパイルされているように見えますが、プログラムを実行して文を入力すると、文字化けしたヘックスが吐き出されます。

プログラムに文を入力すると、次のような出力が得られます。

[I@eb42cbf
[I@eb42cbf
[I@eb42cbf
[I@eb42cbf
[I@eb42cbf
[I@eb42cbf

私のコード:

class WordCount
{
    public static void main(String[] args)
    {
        int wordList[] = new int[20];
        System.out.println("Please enter a sentence.");

        for (int i = 0; i <= wordList.length; i++)
        {
            String s = Console.readToken();
            int x = s.length();
            wordList[x]++;
        }

        int x = 1;

        while (x < wordList.length)
        {
            if (wordList[x] > 0)
                System.out.println(x + "-letter words: " + wordList[x]);
            x++;
        }
    }
}
4

5 に答える 5

3

これが私の提案です:

  • 標準のJDKの一部ではないConsole.readTokenの代わりにスキャナーを使用します
  • 標準の変数名を使用します(カウンターのiはxよりも優れています)
  • コードの残りの部分は正常に機能します
  • しかし、ループする必要がある回数がわかっているので、whileの代わりにforループを使用します

これが私のバージョンです-変更点は次のとおりです。スキャナーの使用、xの名前の変更をiに変更し、whileループをforループに変更します。

public static void main(String[] args) {
    int wordList[] = new int[20];
    System.out.println("Please enter a sentence.");
    Scanner scanner = new Scanner(System.in); //Use a scanner, part of the standard JDK

    for (int i = 0; i <= wordList.length; i++) {
        String s = scanner.next(); //reads the next string
        int length = s.length();
        wordList[length]++;
    }

    for (int i = 0; i < wordList.length; i++) { //use a for loop
        if (wordList[i] > 0) {
            System.out.println(i + "-letter words: " + wordList[i]);
        }
    }
}
于 2012-07-31T10:54:03.033 に答える
1

whileループはすべきではありません

while(i < wordlist.Length){
  if (wordlist[i] > 0){
      System.out.println(i + "-letter words: " + wordlist[i]);
  }
  i++;      
}
于 2012-07-31T10:36:22.390 に答える
0
private static long wordcount(String line){
    long numWords = 0;
    int index = 0;
    boolean prevWhiteSpace = true;
    while(index < line.length()){
        char c = line.charAt(index++);
        boolean currWhiteSpace = Character.isWhitespace(c);
        if(prevWhiteSpace && !currWhiteSpace){
            numWords++;
        }
        prevWhiteSpace = currWhiteSpace;
    }
    return numWords;
}
于 2012-07-31T10:35:05.827 に答える
0

「これはその文です」のように文が入力された場合、出力は次のようになります。

4文字の単語:2

2文字の単語:1

1文字の単語:1

8文字の単語:1

私のコード:

  import java.util.HashMap;
  import java.util.Scanner;

        class WordCount {
            public static void main(String[] args) {
                HashMap<Integer, Integer> statistic = new HashMap<Integer, Integer>();

                System.out.println("Please enter a sentence.");
                Scanner in = new Scanner(System.in);
                String s = in.nextLine();

                String[] words = s.split(" ");

                for (int i = 0; i < words.length; i++) {
                    if (statistic.containsKey(words[i].length())) {
                        Integer value = statistic.get(words[i].length());
                        statistic.put(words[i].length(), value + 1);
                    } else
                        statistic.put(words[i].length(), 1);
                }

                for (Integer num : statistic.keySet()) {

                    Integer key = num;
                    Integer value = statistic.get(num);
                    System.out.println(key + "-letter words: " + value);

                }

            }
        }
于 2012-07-31T11:05:42.900 に答える
0

さらに別のアプローチ:

int wordList[] = new int[20];
    System.out.println("Please enter a sentence.");
    String s = "";
    try{
        BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in));
        s  = bufferRead.readLine();        
    }
    catch(IOException e){
        e.printStackTrace();
    }

    String[] s1 = s.split(" ");
    for(int i = 0 ; i < s1.length ; i++){
        int len = s1[i].length(); 
        wordList[len]++; 
    }
    for (int i = 0; i < wordList.length; i++) { //use a for loop
    if (wordList[i] > 0) {
        System.out.println(i + "-letter words: " + wordList[i]);
       }
    }
于 2012-07-31T11:18:42.223 に答える