ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Java質問&情報提供サイトコミュの助けてください…

  • mixiチェック
  • このエントリーをはてなブックマークに追加
先日Arrayについて質問をさせていただいた者です。
お答えくださったみなさまどうもありがとうございます。
けどやっぱりどうやったらいいのかどうしても分からなくて…
なのでこの問題をどのようにして解いたらいいのかご存知の
方がいらっしゃいましたら…ぜひ詳しく教えてください。
よろしくお願いします><!!

Write a Java program with three (3) static methods that implements this algorithm:

a.Method 1: Ask the user to enter a sentence. Get the String input by using class Scanner method nextLine(). (Note: do not use method next(), or you will only get the first word.) Store the sentence as a String in a local variable. Return the local variable (the sentence) to the main method.

b.Method 2: the parameter to this method is the sentence (a String variable). Declare an array of 26 integers. Use a for loop to loop through each character in the sentence. Use the String method charAt(position) to get each character from the sentence. If the character is a letter, increment the corresponding array element. For example, the letter a corresponds to the first element in the array of integers. The letter b corresponds to the second element in the array of integers. Return the array of integers to the main method. The array of integers should contain the frequency count for each letter.

c.Method 3: The parameter to this method is the array of integers, which is the frequency count. Output the frequency count to the screen.

例:
Enter a sentence: aaaaazzzzzzz

Frequency of each letter:

a: 5
b: 0
c: 0
d: 0
e: 0
f: 0
g: 0
h: 0
i: 0
j: 0
k: 0
l: 0
m: 0
n: 0
o: 0
p: 0
q: 0
r: 0
s: 0
t: 0
u: 0
v: 0
w: 0
x: 0
y: 0
z: 7

コメント(5)

このコミュは、丸投げコミュではないので、ヒント程度の解説しか書きません。あとは自分で考えてください。

まずは、1つめのメソッドですが、キーボードから入力された文字列を拾ってきて、Stringにして返してやればよいわけですよね。

引数:なし、戻り値:Stringクラス、のstaticメソッドを定義してやれば良いわけです。

キーボード(コンソール)からの入力は、System.inです。
ただし、ドキュメントを見ても分かるように、System.inはInputStreamです。
また、文字列を読むためには、BufferedReaderクラスのオブジェクトを作ってやって、readLine()メソッドを呼べば良いのです。
InputStreamとBufferedReaderをつなげてやるには、どうすればよいか?
それは、java.ioにあるとあるクラスを使えば出来ます。
次に、2つめのメソッドですが、与えられた文字列の中に、それぞれのアルファベットの出てくる頻度を格納したint型の配列を返してやれば良いわけですよね。

引数:Stringクラス、戻り値:int[]、のstaticメソッドを定義してやれば良いです。

まずは、どういうループを回すかを考えます。
まあ、当然、アルファベット1文字ずつのループですよね。
そして、その中に、与えられたStringオブジェクトの中に、そのアルファベットが出てくる回数を数えるループを書いてやればいいわけです。
StringクラスのcharAt(position)メソッドを使えと書いてあるので、その通りやって、1文字ずつ判定していけばいいですね。
ちなみに、このループの回数は、「文字列の長さ」ですよね。

あと、これは問題に書いていないのでわからないのですが、大文字小文字を無視するのであれば、toLowerCase()メソッドでも使ってやればOKです。
3つめは簡単ですよねw
2つめのメソッドで帰ってきた配列を、ループを回して表示してやるだけです。

もし、まだ分からないことがありましたら、書いてくださいませ。
どうもありがとうございます。
でも実はまだちょっと分からなくて…
BufferedReaderもreadlineも習ったことがないのですが、
他に方法はないでしょうか…?
なんとかやってみたのですが…
ちっともうまく動いてくれません…
どこをどう直したらいいのか教えてください…
あと2時間で締め切りなので…できればそれまでに教えて
いただけると嬉しいです。
よろしくお願いします。

import java.util.*;
public class Frequency {
  public String str;
  public char ch;
public static void main(String[] args) {
String str;
Scanner input = new Scanner(System.in);
System.out.print("Enter a sentence: ");
  str = input.nextLine().toLowerCase();
}
  int freq [] = new int[26];{

 for(int i = 0; i < str.length(); i ++) {
char ch = str.charAt(i);
if(ch>= 'a' && ch<= 'z'){
freq[ch - 'a']++;
}
  for (int j =0; j <26; j++){
 System.out.println("Frequency of each letter: ");
 System.out.println((char)(i+'a') +" = " + freq[i]);
 }
}
いいところまで出来ていると思います
課題の通り、各処理ごとにstatic methodに分けてmainからはそれを呼ぶだけにしてみてください。
また、クラス変数は持たずに、methodの引数と返り値で変数の受け渡しをするようにしてみてください。
methodごとに分ければスッキリしてバグも見つけやすくなりますよ

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Java質問&情報提供サイト 更新情報

Java質問&情報提供サイトのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。