質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

3回答

13138閲覧

配列とリストのfor文のなかのif文の問題が解けません

kentros511

総合スコア122

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2016/11/20 08:43

編集2016/11/20 09:14

###意図
正解と解く上でのヒントが知りたいです

###コードとわかってる範囲

java

1 2//1.氏名の変数を用意する(初期化) 3String name = ""; 4 5//2.年齢の変数を用意する(初期化) 6int age = 0; 7 8//3.氏名の配列を作る。要素数は5,自分の名前を一つ入れる。※個人情報の為田中一郎にします。 9String[] names = new String[5]; 10names[0] = "田中次郎"; 11names[1] = "谷中次郎"; 12names[2] = "竹中次郎"; 13names[3] = "田口次郎"; 14names[4] = "田中一郎"; 15 16 17 18//4.誕生日のリストを作る。要素数は5、一つ自分の誕生日(19900511) 19List <String> list = new ArrayList <String> (); 20list.add("19800411"); 21list.add("19761105"); 22list.add("19920615"); 23list.add("19850918"); 24list.add("19900511"); 25 26 27 28//5.for文ループ 配列の中身が自分の名前と一致したときに配列から氏名変数を代入してループを抜ける。抜ける際にループ回数を表示 29for( int i = 0; i < names.length; i++ ) { 30if( names[i].equals("田中一郎") { 31System,out.println((i + 1) + "回"); 32} 33} 34 356.for5と違うループ 、誕生日が自分と一致したら誕生日から年齢を出し、年齢をリストから代入 ループ回数を表示 36for( int i = 0; i < list.size; i++ ) { 37if(list(i)== 1990511 ) { 38 39//年月日フォーマット 40SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMdd"); 41//今 42int now = Integer.parseInt(sdf.format(new Date()); 43 44 45int age= (now- birthday)/ 10,000; 46} 47} 48 49 50 51//7.氏名と年齢を出力させる 52System.out.println(name + "," + age + "歳” ); 53 54 55

###挨拶
お力を貸していただけますでしょうか
どういう風に解くのかわかりません。
配列とリストの中のfor文のif文の中身が一致した場合のその入れ子の中身の生成がわかりません。
System.out.println(names[i]);

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2016/11/20 08:46

何がわからないか具体的にお願いします。
MasahikoHirata

2016/11/20 09:07

swordoneさんと同じですが、必要なのは’ループ回数’?つまり何番目か?それと誕生日は1対1の対応でなく、これまた’ループ回数’で回答?ならばすぐにソースは書けますが。何がしたいのであろうか?
guest

回答3

0

ベストアンサー

ほとんどコメントに書いてあるとおりだと思いますがね。
5.は「氏名変数を代入してループを抜ける。」と書いてあります。この通りすればいいのです。
最初に宣言した変数を忘れないで下さい。
6.は、Listから要素を取り出す際のメソッドはご存知でしょうか?
そこが配列と異なるだけであとはほとんど一緒なのですが。


###3と4の補足
配列やListの宣言は簡単な方法があります。

java

1String[] names = {"田中次郎", "谷中次郎", "竹中次郎", "田口次郎", "田中一郎"}; 2List<String> list = Arrays.asList("19800411", "19761105", "19920615", "19850918", "19900511");

###5について

for文ループ 配列の中身が自分の名前と一致したときに配列から氏名変数を代入してループを抜ける。抜ける際にループ回数を表示

これをそのままやればいいんです。あなたのコードには「氏名変数を代入」と「ループを抜ける」が抜けているのです。

java

1for( int i = 0; i < names.length; i++ ) { 2 if( names[i].equals("田中一郎") { 3 System,out.println((i + 1) + "回")// 括弧が全角になっていた 4 name = names[i]; // 指名変数を代入 5 break; //ループを抜ける 6 } 7}

###6について

for文 5と違うループ 、誕生日が自分と一致したら誕生日から年齢を出し、年齢をリストから代入 ループ回数を表示

「5と違うループ」と言うのはおそらく拡張for文を使えということでは?

java

1for (String day : list) { 2 //処理 3}

ただこちらも「ループ数の表示」があるので、for文の外にループカウントを別途置く必要があるのか…
普通のfor文のほうが良さそうです(出題意図がわからないので推測)。
ただ現状のforループも間違いだらけです。

java

1// Listに可視なsizeというフィールドはない。メソッドsize()ならある 2for( int i = 0; i < list.size(); i++ ) { 3 //変数に括弧付けて数値という書き方はない Stringと数値は比較できない 4 if(list.get(i).equals("1990511")) { 5 SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMdd"); 6 int now = Integer.parseInt(sdf.format(new Date()); 7 //birthdayも数値化しないとこのあとの計算ができない 8 int birthday = Integer.parseInt(list.get(i)); 9 //ここでint ageとするとローカル変数の宣言になり、前と重複する。前で宣言した変数に代入することで意味を成す 10 //数値リテラルはコンマ区切りすると意味が変わる 桁区切りしたいなら_(アンダースコア) 11 age = (now- birthday)/ 10_000; 12 System.out.println(i + 1); 13 break; 14 } 15} 16

(以下は間違い 年齢の算出方法は成立していた)

ただし、年齢の出し方がおかしいです。
あなたの計算だと19900511(1990年5月11日)が誕生日で、今日が20160401だとすれば、
まだその年の誕生日を迎えてないので25歳のはずですが、この計算だと26歳になってしまいます。

投稿2016/11/20 09:21

編集2016/11/20 14:25
swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kentros511

2016/11/20 10:20

names[i] = nameっていうことでしょうか list.get(i) 今 - 誕生日 /10000で年齢を求めたいのですが
swordone

2016/11/20 10:25 編集

> names[i] = nameっていうことでしょうか プログラミングにおける=の意味をもう一回調べて下さい。 > 今 - 誕生日 /10000で年齢を求めたいのですが ごめんなさい、これは成立していました。
kentros511

2016/11/20 10:52

文字列なのでnames[i].equal(name)=""; でしょうか
guest

0

以下のコードで動きはします

java

1import java.io.Console; 2 import java.util.*; 3import java.text.SimpleDateFormat; 4 5public class C4{ 6 public static void main(String[] args){ 7 //1.氏名の変数を用意する(初期化) 8String name = "田中一郎"; 9 10//2.年齢の変数を用意する(初期化) 11int age = 0; 12 13//3.氏名の配列を作る。要素数は5,自分の名前を一つ入れる。※個人情報の為田中一郎にします。 14String[] names = new String[5]; 15names[0] = "田中次郎"; 16names[1] = "谷中次郎"; 17names[2] = "竹中次郎"; 18names[3] = "田口次郎"; 19names[4] = "田中一郎"; 20 21 22 23//4.誕生日のリストを作る。要素数は5、一つ自分の誕生日(19900511) 24List <String> list = new ArrayList <String> (); 25list.add("19900511"); 26list.add("19800411"); 27list.add("19761105"); 28list.add("19920615"); 29list.add("19850918"); 30 31 32 33 34//5.for文ループ 配列の中身が自分の名前と一致したときに配列から氏名変数を代入してループを抜ける。抜ける際にループ回数を表示 35for( int i = 0; i < names.length; i++ ) { 36if( names[i].equals(name)){ 37System.out.println((i+1)+"回"); 38} 39} 40 41//6.for文 5と違うループ 、誕生日が自分と一致したら誕生日から年齢を出し、年齢をリストから代入 ループ回数を表示 42for( int i = 0; i < list.size(); i++ ) { 43if(list.get(i).equals("19900511") ) { 44 45//年月日フォーマット 46SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMdd"); 47//今 48 49 50 51 52 53int now = Integer.parseInt(sdf.format(new Date())); 54int birthday = Integer.parseInt(list.get(i)); 55 56 57age= (now- birthday)/ 10000; 58} 59} 60 61 62 63//7.氏名と年齢を出力させる 64System.out.println(name + "," + age + "歳" ); 65 } 66 }

投稿2016/11/20 13:36

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2016/11/20 13:47 編集

あの…いい加減何もなしに正解コードいきなりドンと貼るのやめません? 正解でもないな 条件満たしてない(名前変数代入、ループ脱出)
kentros511

2016/11/20 14:04

ありがとうございました。 復習します
guest

0

・nameに代入する処理がない。
・誕生日文字列の比較に==を使っている。
・誕生日の計算が誕生年の差になっているので、厳密には年齢ではない。

投稿2016/11/20 09:23

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kentros511

2016/11/20 13:09

for文の中の正解が知りたいです。 自分でも考えてもわからなったので
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問