回答編集履歴

2

コード

2016/04/26 01:35

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -1,3 +1,27 @@
1
+ ```java
2
+
3
+ while(true){
4
+
5
+ System.out.println("第1コースデータを入力して下さい");
6
+
7
+ String firstCourse = new Scanner(System.in).nextLine();
8
+
9
+ course = new HashMap<String, Integer>(); // <-ここ
10
+
11
+
12
+
13
+ // 無限ループを抜ける唯一のタイミング
14
+
15
+ if(firstCourse.equals("9999")){
16
+
17
+ System.out.println("入力を終了します");
18
+
19
+ break;
20
+
21
+ }
22
+
23
+ ```
24
+
1
25
  screenInput()メソッドの無限ループ処理で、ループの最初にcourseのHashMapを新規に生成しています。
2
26
 
3
27
  この操作のたびにcourseは空になってしまい、ループを抜けるタイミングがここしかないため、**courseが空のまま次のsortDisplay()に入っています。**

1

追加

2016/04/26 01:35

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -1,3 +1,79 @@
1
1
  screenInput()メソッドの無限ループ処理で、ループの最初にcourseのHashMapを新規に生成しています。
2
2
 
3
3
  この操作のたびにcourseは空になってしまい、ループを抜けるタイミングがここしかないため、**courseが空のまま次のsortDisplay()に入っています。**
4
+
5
+ courseが空のため、sortDisplay()での最初のループも実は入っておらず、なにもしないまま
6
+
7
+ ```java
8
+
9
+ System.out.println(listCourse.get(0));//ここは表示される
10
+
11
+ ```
12
+
13
+ が処理され、その次のループもcourseが空のためループに入らず、
14
+
15
+ ```java
16
+
17
+ System.out.println("表示一覧を終了します");//ここは表示される
18
+
19
+ ```
20
+
21
+ が処理されている、というだけの話です。
22
+
23
+
24
+
25
+ ---
26
+
27
+
28
+
29
+ そもそも無駄な処理が多すぎます。HashMapを使っているのですから、キーを探すのにループする必要はありません。screenInput()でのArrayListの存在意義も不明です。
30
+
31
+ おそらく最初のメソッドでやりたいのはこういうことですよね?
32
+
33
+ ```java
34
+
35
+ public static void screenInput(){//画面から入力する
36
+
37
+ int count = 0;
38
+
39
+ course = new HashMap<String, Integer>();
40
+
41
+
42
+
43
+ while(true){
44
+
45
+ count++;
46
+
47
+ System.out.println("第" + count + "コースデータを入力して下さい");
48
+
49
+ String firstCourse = new Scanner(System.in).nextLine();
50
+
51
+
52
+
53
+ if(firstCourse.equals("9999")){//無限ループを抜ける入力"9999"があったら
54
+
55
+ System.out.println("入力を終了します");
56
+
57
+ return;//無限ループを抜ける メソッドから抜けるreturnでOK
58
+
59
+ }
60
+
61
+ Integer now = course.get(firstCourse);
62
+
63
+ if(now == null){
64
+
65
+ course.put(firstCourse, 1);
66
+
67
+ }else{
68
+
69
+ course.put(firstCourse, now + 1);
70
+
71
+ }
72
+
73
+ }
74
+
75
+ }
76
+
77
+ ```
78
+
79
+ そしてその後の並び替えは前の方の回答通りキャストが無駄ですし、Map.Entry<String, Integer>でリスト化してソートアルゴリズム使えばいいだけの話なのでは?