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

回答編集履歴

3

code

2016/11/20 14:25

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -5,6 +5,59 @@
5
5
  そこが配列と異なるだけであとはほとんど一緒なのですが。
6
6
 
7
7
  ---
8
+
9
+ ###3と4の補足
10
+ 配列やListの宣言は簡単な方法があります。
11
+ ```java
12
+ String[] names = {"田中次郎", "谷中次郎", "竹中次郎", "田口次郎", "田中一郎"};
13
+ List<String> list = Arrays.asList("19800411", "19761105", "19920615", "19850918", "19900511");
14
+ ```
15
+ ###5について
16
+ > for文ループ 配列の中身が自分の名前と一致したときに配列から氏名変数を代入してループを抜ける。抜ける際にループ回数を表示
17
+
18
+ これをそのままやればいいんです。あなたのコードには「氏名変数を代入」と「ループを抜ける」が抜けているのです。
19
+ ```java
20
+ for( int i = 0; i < names.length; i++ ) {
21
+ if( names[i].equals("田中一郎") {
22
+ System,out.println((i + 1) + "回"); // 括弧が全角になっていた
23
+ name = names[i]; // 指名変数を代入
24
+ break; //ループを抜ける
25
+ }
26
+ }
27
+ ```
28
+
29
+ ###6について
30
+ > for文 5と違うループ 、誕生日が自分と一致したら誕生日から年齢を出し、年齢をリストから代入 ループ回数を表示
31
+
32
+ 「5と違うループ」と言うのはおそらく拡張for文を使えということでは?
33
+ ```java
34
+ for (String day : list) {
35
+ //処理
36
+ }
37
+ ```
38
+ ただこちらも「ループ数の表示」があるので、for文の外にループカウントを別途置く必要があるのか…
39
+ 普通のfor文のほうが良さそうです(出題意図がわからないので推測)。
40
+ ただ現状のforループも間違いだらけです。
41
+ ```java
42
+ // Listに可視なsizeというフィールドはない。メソッドsize()ならある
43
+ for( int i = 0; i < list.size(); i++ ) {
44
+ //変数に括弧付けて数値という書き方はない Stringと数値は比較できない
45
+ if(list.get(i).equals("1990511")) {
46
+ SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMdd");
47
+ int now = Integer.parseInt(sdf.format(new Date());
48
+ //birthdayも数値化しないとこのあとの計算ができない
49
+ int birthday = Integer.parseInt(list.get(i));
50
+ //ここでint ageとするとローカル変数の宣言になり、前と重複する。前で宣言した変数に代入することで意味を成す
51
+ //数値リテラルはコンマ区切りすると意味が変わる 桁区切りしたいなら_(アンダースコア)
52
+ age = (now- birthday)/ 10_000;
53
+ System.out.println(i + 1);
54
+ break;
55
+ }
56
+ }
57
+
58
+ ```
59
+
60
+ ---
8
61
  (以下は間違い 年齢の算出方法は成立していた)
9
62
 
10
63
  ただし、年齢の出し方がおかしいです。

2

年齢算出は成立していました

2016/11/20 14:25

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -3,6 +3,10 @@
3
3
  最初に宣言した変数を忘れないで下さい。
4
4
  6.は、Listから要素を取り出す際のメソッドはご存知でしょうか?
5
5
  そこが配列と異なるだけであとはほとんど一緒なのですが。
6
+
7
+ ---
8
+ (以下は間違い 年齢の算出方法は成立していた)
9
+
6
10
  ただし、年齢の出し方がおかしいです。
7
11
  あなたの計算だと19900511(1990年5月11日)が誕生日で、今日が20160401だとすれば、
8
12
  まだその年の誕生日を迎えてないので25歳のはずですが、この計算だと26歳になってしまいます。

1

誤字\(際→歳\)

2016/11/20 10:26

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -5,4 +5,4 @@
5
5
  そこが配列と異なるだけであとはほとんど一緒なのですが。
6
6
  ただし、年齢の出し方がおかしいです。
7
7
  あなたの計算だと19900511(1990年5月11日)が誕生日で、今日が20160401だとすれば、
8
- まだその年の誕生日を迎えてないので25歳のはずですが、この計算だと26になってしまいます。
8
+ まだその年の誕生日を迎えてないので25歳のはずですが、この計算だと26になってしまいます。