teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

いろいろ指摘

2015/12/21 16:36

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -9,4 +9,64 @@
9
9
  List<String> list = Arrays.asList(existingString);
10
10
  if(list.contains(input)){ /* listにinputと一致するものが存在する場合の処理 */ }
11
11
  ```
12
- こうなるのではないでしょうか?
12
+ こうなるのではないでしょうか?
13
+
14
+ ---
15
+ せっかくコードを載せてくれたので、いくつか指摘したいと思います。
16
+ - tryとwhileの囲みの関係を逆にして、whileループをbreakで抜けるようにする
17
+ 今のままだと不正な入力をした場合にループを抜けてしまい、間違ったまま処理をする事になります。
18
+ なのでwhileループ内で例外処理してループを続行させるようにします。
19
+ whileにはtrueを渡してbreakで抜けるようにすればconditionという変数も不要になります。
20
+ ```java
21
+ while(true) {
22
+ try {
23
+ numberPeg = scan.nextInt();
24
+ if(numberPeg >= 3 && numberPeg <= 8){ //ここも修正
25
+ orderPeg = new String [numberPeg];
26
+ break;
27
+ } else {System.err.println("Enter the number between 3-8.");}
28
+ } catch(InputMismatchException ime){
29
+ //不正な入力はループ内で処理してループ継続
30
+ System.err.println("Input valid argument.");
31
+ }
32
+ }
33
+ ```
34
+ - catchは一つのtryブロックに対していくつも書ける
35
+ - 語順入れ替えでNullPointerチェックは不要になる
36
+ ```java
37
+ try{
38
+ int counter=0;
39
+ while(counter<nameColour.length){
40
+ String inputColour = scan.next();
41
+ if(inputColour.equals("blue")||inputColour.equals("green")||inputColour.equals("orange")||inputColour.equals("purple")){
42
+ nameColour[counter]=inputColour;
43
+ counter++;
44
+ }
45
+ else{System.err.println("Colours must be blue, green, orange or purple.");}
46
+ }
47
+ }
48
+ catch(NullPointerException npe){}
49
+ catch(InputMismatchException ime){System.err.println("Input valid argument.");}
50
+ ```
51
+ tryのネストを一つ外してこれでも機能します。
52
+ しかし先ほどの通りここもwhileとtryを逆にすべきです。
53
+ そしてNullPointerExceptionの心配は、おそらくinputolourとの比較の場面だと思われるのですが、
54
+ ```java
55
+ "blue".equals(inputColour)
56
+ ```
57
+ のようにすればその心配はありません(nullならfalseが返ってくるだけ)。
58
+ これも色の名前をList化してcontainsチェックのほうが楽に書けそうですが。
59
+ - 配列の各要素とチェックしたいならループ処理
60
+ 本題ですが、ご自分でも書いていらっしゃるように、現状では配列の一つの要素としか比較していません。
61
+ ループ処理で各要素と比較する必要があります。
62
+ ```java
63
+ boolean match = false;
64
+ for(String colour : nameColour){
65
+ if(colour.equals(inputColour){
66
+ //処理
67
+ match = true;
68
+ }
69
+ }
70
+ if(!match){/* なかった場合の処理 */}
71
+ ```
72
+ 最初の私の回答のようにList化すればループせずにcontainsで解決しますが。