回答編集履歴

1

いろいろ指摘

2015/12/21 16:36

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -21,3 +21,123 @@
21
21
  ```
22
22
 
23
23
  こうなるのではないでしょうか?
24
+
25
+
26
+
27
+ ---
28
+
29
+ せっかくコードを載せてくれたので、いくつか指摘したいと思います。
30
+
31
+ - tryとwhileの囲みの関係を逆にして、whileループをbreakで抜けるようにする
32
+
33
+ 今のままだと不正な入力をした場合にループを抜けてしまい、間違ったまま処理をする事になります。
34
+
35
+ なのでwhileループ内で例外処理してループを続行させるようにします。
36
+
37
+ whileにはtrueを渡してbreakで抜けるようにすればconditionという変数も不要になります。
38
+
39
+ ```java
40
+
41
+ while(true) {
42
+
43
+ try {
44
+
45
+ numberPeg = scan.nextInt();
46
+
47
+ if(numberPeg >= 3 && numberPeg <= 8){ //ここも修正
48
+
49
+ orderPeg = new String [numberPeg];
50
+
51
+ break;
52
+
53
+ } else {System.err.println("Enter the number between 3-8.");}
54
+
55
+ } catch(InputMismatchException ime){
56
+
57
+ //不正な入力はループ内で処理してループ継続
58
+
59
+ System.err.println("Input valid argument.");
60
+
61
+ }
62
+
63
+ }
64
+
65
+ ```
66
+
67
+ - catchは一つのtryブロックに対していくつも書ける
68
+
69
+ - 語順入れ替えでNullPointerチェックは不要になる
70
+
71
+ ```java
72
+
73
+ try{
74
+
75
+ int counter=0;
76
+
77
+ while(counter<nameColour.length){
78
+
79
+ String inputColour = scan.next();
80
+
81
+ if(inputColour.equals("blue")||inputColour.equals("green")||inputColour.equals("orange")||inputColour.equals("purple")){
82
+
83
+ nameColour[counter]=inputColour;
84
+
85
+ counter++;
86
+
87
+ }
88
+
89
+ else{System.err.println("Colours must be blue, green, orange or purple.");}
90
+
91
+ }
92
+
93
+ }
94
+
95
+ catch(NullPointerException npe){}
96
+
97
+ catch(InputMismatchException ime){System.err.println("Input valid argument.");}
98
+
99
+ ```
100
+
101
+ tryのネストを一つ外してこれでも機能します。
102
+
103
+ しかし先ほどの通りここもwhileとtryを逆にすべきです。
104
+
105
+ そしてNullPointerExceptionの心配は、おそらくinputolourとの比較の場面だと思われるのですが、
106
+
107
+ ```java
108
+
109
+ "blue".equals(inputColour)
110
+
111
+ ```
112
+
113
+ のようにすればその心配はありません(nullならfalseが返ってくるだけ)。
114
+
115
+ これも色の名前をList化してcontainsチェックのほうが楽に書けそうですが。
116
+
117
+ - 配列の各要素とチェックしたいならループ処理
118
+
119
+ 本題ですが、ご自分でも書いていらっしゃるように、現状では配列の一つの要素としか比較していません。
120
+
121
+ ループ処理で各要素と比較する必要があります。
122
+
123
+ ```java
124
+
125
+ boolean match = false;
126
+
127
+ for(String colour : nameColour){
128
+
129
+ if(colour.equals(inputColour){
130
+
131
+ //処理
132
+
133
+ match = true;
134
+
135
+ }
136
+
137
+ }
138
+
139
+ if(!match){/* なかった場合の処理 */}
140
+
141
+ ```
142
+
143
+ 最初の私の回答のようにList化すればループせずにcontainsで解決しますが。