• 締切済み

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; } } } *********

  • Java
  • 回答数7
  • ありがとう数6

みんなの回答

回答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

  • javaについて

    以下のプログラムで[\\D]+はどういう働きをしているのか分からないので教えていただけますでしょうか。 実行結果は 1990 と表示されます。 よろしくお願いいたします。 public class split{ public static void main (String[]args){ String s = "明日は1990年です。"; String [] str = s.split("[\\D]+"); for( String st: str ){ if( !st.equals("") ){ System.out.println( st ); } } } }

    • ベストアンサー
    • Java
  • javaについて

    キーボードから入力をして、その後str[0][0]とstr[1][0]の文字を繋げたいのですがエラーとなってしまいます。どう変えたらよいでしょうか。 以下がプログラムです。 import java.io.*; import java.lang.*; import java.net.*; import java.awt.*; class gugu3 { public static void main(String[] args) throws IOException { int KEYWORDMAX=10; int CNTMAX=100; String [][]str = new String[KEYWORDMAX][CNTMAX]; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line=null; for (int i=0;i<KEYWORDMAX;i++){ System.out.println("第"+(i+1)+"番目のキーワードを設定しますか?(y/n)"); line=br.readLine(); if(line.equals("n")) break; for (int s=0;s<CNTMAX;s++){ System.out.println("キーワードを入力してください(終了=0)"); line=br.readLine(); if(line.equals("0"))break; str[s][i]=line; } } String keyword = new String(str[0][0]" "str[1][0]); System.out.println("キーワードは "+keyword); } } 以下はエラー表示です。 gugu3.java:24: ')' がありません。 String keyword = new String(str[0][0]" "str[1][0]); ^ gugu3.java:24: 文ではありません。 String keyword = new String(str[0][0]" "str[1][0]); ^ gugu3.java:24: ';' がありません。 String keyword = new String(str[0][0]" "str[1][0]); ^ エラー 3 個

    • ベストアンサー
    • Java
  • javaの問題

    import java.util.Scanner; class test6{ static void printArray(int[] a) { for(int i=0;i<a.length;i++) System.out.print(String.format("%1$6s", (a[i]+" "))); System.out.println(); } static void printArray(int[][] a) { for(int[] i:a) { for(int j:i) System.out.print(String.format("%1$6s",(j+"\t"))); System.out.println(); } } public static void main(String[] args) { int[] a = {12,536,-8,7}; int[][] c = {{32,-1,32,45,67}, {535,99999,2}, {2,5,-123,9}}; printArray(a); printArray(c); } } このプログラムを表示するとこのようになるのですが、 12 536 -8 7 32 -1 32 45 67 535 99999 2 2 5 -123 9 これに一工夫加えて見やすくしたいです。 このような形にするのはどのようにすればよいのでしょうか + + | 32 -1 45 67 | | 535 99999 2 | | 2 5 -123 9 | + +

  • javaの条件分岐でコンソールにうまく表示できません(TmT)

    eclipse3.4.1を使用して、Javaで下記のようなコードを書いたのですが、望んだ結果が得られません。 public class 条件分岐 { public static void main(String[] args){ for (int i = 1; i < 6; i++){ for (int j = 0; j < i; j++){ System.out.print("☆"); } System.out.println(); } } } そして、コンソールには、 ☆ ☆☆ ☆☆☆ ☆☆☆☆ ☆☆☆☆☆ と、階段状に表示されます。 この結果を ☆ ☆☆ ☆☆☆ ☆☆☆☆ ☆☆☆☆☆ と、このようにピラミッド上に表示したいのですが、 どうすればよいのか分かりません。 どなたか、ご指導お願いいたします。

    • ベストアンサー
    • Java
  • javaについて・・・

    このように出力されるプログラムを考えています ↓ 受験者人数を入力してください 3 3人分の点数を入力してください 50 80 20 1人目の点数は50です 2人目の点数は80です 3人目の点数は20です 最高点は80です っという感じのプログラムを考えています。 そしていまここまでプログラムを書いたのはいいのですが 感じんの最高点が表示されません・・・ import java.io.*; class test{ public static void main(String[] args) throws IOException{ System.out.println("テストの受験者数を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str =br.readLine(); int num = Integer.parseInt(str); int test[] = new int[num]; int max=0; System.out.println(test.length +"人の点数を入力してください"); for(int i=0; i<num; i++){ String str1 = br.readLine(); test[i] = Integer.parseInt(str1); } for(int i=0; j<num; i++){ System.out.println((i+1)+"番目の人の点数は"+ test[i]+"です。"); if(test[i]>max){ max=test[i]; } } System.out.println("最高点は" +max+ "です。"); } } どこをどのように直せば最高点が表示されるようになるでしょうか? ご指摘おねがいします。

  • javaのプログラムについて

    java始めたばかりの者です。 class sample1 { public static void main(String[] args) { for(int i=1; i<=5; i++){ for(int j=0; j<i; j++){ System.out.println("*"); } System.out.println("\n"); } } } これを実行すると * * * * * * * * * * * * * * * こうなってしまい * ** *** **** ***** このようにするにはどうしたらいいのでしょうか??

    • ベストアンサー
    • Java
  • java九九表示

    package kuku; public class Kuku { public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ // 配列の宣言をする。 int[][] x = new int[9][9]; // 九九の結果を配列に保存する。 for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { x[i][j] = (i + 1) * (j + 1); } } // 九九の結果を表示する。 for (int i1 = 0; i1 < 9; i1++) { for (int j1 = 0; j1 < 9; j1++) { System.out.print(String.format("x" + args, x)); } // 改行する。 System.out.println(); } } } _________________________________ 九九の表示ができません。 String.formatも使いたいのですが、使い方がわかりません。 String.formatも使って九九を表示させるにはどうしたらいいのか教えてください。 お願いいたします。

  • Javaで配列を定義する方法

    こんにちは、片岡といいます。 Java言語で配列を定義する場合、以下の二つの書式に違いはありますか。 違いがあるとすれば、どのような違いですか。 また、違いがないのならば、どちらの記述がよいのですか。 ご存知の方はいらっしゃいませんか。 (1) public class Main1 { public static void main(String[] args) { String str[] = new String[] { new String("itiban"), new String("niban"), new String("sanban"), }; for (int i = 0; i < str.length; i++ ) { System.out.println(str[i]); } } } (2) public class Main2 { public static void main(String[] args) { String str[] = { new String("itiban"), new String("niban"), new String("sanban"), }; for (int i = 0; i < str.length; i++ ) { System.out.println(str[i]); } } } なお、私の環境は以下の通りです。 OS: Microsoft Windows XP Professional SP2 java: java version "1.4.2_13" 検索エンジンで"配列 オブジェクト java"を検索しましたが、 解決に役立つ情報は見つかりませんでした。

    • ベストアンサー
    • Java
  • Javaの初歩的なプログラムについて

    public class ForInFor{ public static void main(String[] args){ for(int i=1; i<=9; i++){ String a = ""; for(int j=1; j<=9; j++){ a += i * j + " "; } System.out.println(a); } } } を実行すると九九の表のようになりました。 println(a)の中のaはjの方のforの繰り返しが終わったら代入するものだと思っていましたので 戸惑っています。 実際にはどういう流れで九九の表ができるのでしょうか?

  • javaについて

    以下のようにキーボードから入力していくプログラムを試行しているのですが、エラーが出てくるので行き詰まっています。 理想的にはキーボードに”あいう”エンター”えおか”エンターと打ち込んだら str[0]=あいう str[1]=えおか と表示させていきたいのですが、よろしくお願いします。 import java.io.*; import java.lang.*; import java.net.*; import java.awt.*; class gugu2 { public static void main(String[] args) throws IOException { int i=0; while(i<2){ System.out.println("キーワード入力"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = br.readLine(); char str[] = input.toCharArray(); System.out.println("キーワードは" + str[]); i=i+1; } for(i=0;i<2;i++){ System.out.println(str[]); } } } これがエラー表示です。 gugu2.java:17: '.class' がありません。 System.out.println("キーワードは" + str[]); ^ gugu2.java:21: '.class' がありません。 System.out.println(str[]); ^ エラー 2 個

    • ベストアンサー
    • Java