• 締切済み

javaの表示方法がわかりません。

javaを勉強しているのですがもう少しと言うところで悩んでいます。 配列の中身を見て同じコードがある場合にはその個数をカウントし表示するというようなことをしたいのですが表示部分でうまくいきません。 初歩的な質問ですみませんが、どうやって重複しないで表示させることができるのでしょうか。 **表示させたい結果** 001は2個 003は2個 004は1個 005は4個 ********* **表示される結果** 001は2個 001は2個 003は2個 003は2個 004は1個 005は4個 005は4個 005は4個 005は4個 ********* **ソース** class str{ public static void main(String args[]){ int i = 0; int j = 0; int S = 0; String test[] ={"001","001","003","003","004","005","005","005","005"}; String str1 = ""; String str2 = ""; for(i=0;i<9;i++){ str1 = test[i]; for(j=0;j<9;j++){ str2 = test[j]; if(str1.equals(str2)){ S++; } } System.out.println(str1 + "は" + S + "個"); S = 0; } } } *********

みんなの回答

回答No.7

javaが… とか 表示方法が… って問題じゃなくて、 アルゴリズムが分からない ってことじゃないかな? 自分がマシンになった気持ちで1つ1つ処理を並べていって、フローチャートを描いてみるといいと思う。 別に厳密に「条件分岐は菱形で…」とかじゃなくていいから。 それこそ裏紙なんかにただの矢印と処理内容だけでもいいから。 そうやって1つ1つ処理を書いていって、大きな処理についてはjavaのコードに書けるくらいまで、段々と細かくしていけばいいと思う。 (この質問のレベルのものならそんなにたくさん書くことにならないし。) 書き終わったら、その通りにプログラムを書いて実行して、間違えたらプログラムを直すんじゃなくて、フローチャートを直す。 こういうことを繰り返すと段々慣れて書かなくてもある程度は書けるようになりますよ。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.6

#5とか反ってわかりにくくなったような気がしますので、別のやり方でやってみました。 配列testの最後のデータとして""を追加していますが、データの追加をしない場合は、//で消してるprintlnを復活させてください。 ------------------------------------------------ class str{ public static void main(String args[]){ String test[] ={"001","001","003","003","004","005","005","005","005",""}; int i; int S=0; String str = ""; for(i=0;i<test.length;i++){ if(str.equals(test[i])){ S++; } else { if(str.length()!=0){ System.out.println(str + "は" + S + "個"); } S=1; str=test[i]; } } // System.out.println(str + "は" + S + "個"); } }

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

Set<String> とか クラス<型> も使えなかったかも・ 1.4環境がないので試してないけど、多分いいと思う import java.util.TreeMap; import java.util.Set; import java.util.Iterator; //for 1.4 class StringCount2{ public static void main(String args[]){ String test[] ={"001","001","003","003","004","005","005","005","005"}; TreeMap sortedMap = new TreeMap(); for(int i=0;i<test.length;i++){ if(sortedMap.get(test[i])==null){ sortedMap.put(test[i], 1); } else { sortedMap.put(test[i], (Integer)sortedMap.get(test[i])+1); } } Set keys = sortedMap.keySet(); Iterator itr=keys.iterator(); String str; while(itr.hasNext()){ str=(String)itr.next(); System.out.println(str+"は"+sortedMap.get(str)+"個"); } } }

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

>for(String s : test){ >のところで『;がありません』となってしまいました。。。 for(型 : コレクション)みたいな書き方は、1.5からなので、だめだったんですね 1.4でも(多分)動く様に書き換えてみました。 意味は同じです。 //for 1.4 --------8<--------8<--------8<--------8<-------- import java.util.TreeMap; import java.util.Set; import java.util.Iterator; class StringCount1{ public static void main(String args[]){ String test[] ={"001","001","003","003","004","005","005","005","005"}; TreeMap<String,Integer> sortedMap = new TreeMap<String,Integer>(); for(int i=0;i<test.length;i++){ if(sortedMap.get(test[i])==null){ sortedMap.put(test[i], 1); } else { sortedMap.put(test[i], sortedMap.get(test[i])+1); } } Set<String> keys = sortedMap.keySet(); Iterator<String> itr=keys.iterator(); String str; while(itr.hasNext()){ str=itr.next(); System.out.println(str+"は"+sortedMap.get(str)+"個"); } } }

回答No.3

私も初心者ですがこういうのはどうでしょうか? お書きになったプログラムに少し付け加えてみました。★印の就いている部分が追加した部分です。 読みにくいかもしれませんが… あまり適切なものではないかもしれませんね(笑) こんな事を考えた人間も居る程度に思って下さい。 逆にとんでもない間違いを犯していたらすみません。 考えとしては、「文字列を手前から順にチェックしていって、過去にチェックしたことがある文字列が再び出てきた場合は次の文字列チェックに飛ぶ」という事です。 class str { public static void main(String args[]){    int i = 0; int j = 0; int S = 0; String test[] ={"001","001","003","003","004","005","005","005","005"}; String str1 = ""; String str2 = ""; test: for(i=0;i<9;i++){ str1 = test[i]; for(j=0;j<9;j++){ str2 = test[j]; if(str1.equals(str2)){ if(j<i){//★★★★ここから★★★★ S=0; continue test; }//★★★★ここまで★★★★ S++; } } System.out.println(str1 + "は" + S + "個"); S = 0; } } }

  • tachiwa
  • ベストアンサー率34% (25/73)
回答No.2

普遍性のあるコードかどうか、確認までしていませんがとりあえず試してみてください。 class str{ public static void main(String args[]){ int i = 0; int j = 0; int S = 0; String test[] ={"001","001","003","003","004","005","005","005","005"}; String str1 = ""; String str2 = ""; for(i=0;i<9;i++){ str1 = test[i]; if(i<8 && test[i].equals(test[i+1])){ continue; } for(j=0;j<9;j++){ str2 = test[j]; if(str1.equals(str2)){ S++; } } System.out.println(str1 + "は" + S + "個"); S = 0; } } }

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

TreeMapのようなクラスを使うと、キーと値を関連づけて管理できます。 //for java1.5 ---------8<---------8<---------8<--------- import java.util.TreeMap; class str{ public static void main(String args[]){ String test[] ={"001","001","003","003","004","005","005","005","005"}; TreeMap<String,Integer> sortedMap = new TreeMap<String,Integer>(); for(String s : test){ if(sortedMap.get(s)==null){ sortedMap.put(s, 1); } else { sortedMap.put(s, sortedMap.get(s)+1); } } for(String s : sortedMap.keySet()){ System.out.printf("%sは%d個\n", s, sortedMap.get(s)); } } }

goo00_001
質問者

お礼

回答ありがとうございます。 早速試してみたのですが for(String s : test){ のところで『;がありません』となってしまいました。。。 TreeMapを調べていろいろやってみましたが何処が悪いのか判りません。 すみませんが教えていただければと思います。

関連するQ&A

専門家に質問してみよう