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

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

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

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

Q&A

1回答

405閲覧

for文の継続条件を変更したいです。

Andree0

総合スコア0

Java

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

0グッド

0クリップ

投稿2024/12/10 13:38

実現したいこと

ここに実現したいことを箇条書きで書いてください。

  • 通常のfor文を使用して記述しなければなりません。
  • Mapの大きさ分for文を回すような記述に変更しなければなりません。
  • beafMap1について通常のfor文のループカウンタ初期化の部分と継続条件をわかりやすくする必要があります。
  • Mapの値を出力する処理を記述したい部分は、for文のループカウンタの継続条件がListのサイズ分にならないように記述する必要があります。

前提

出力結果は以下の結果となるようにしないといけません。

----- for文: 焼き肉の部位牛リスト -----
カルビ
ロース
サブトン
----- 拡張for文: 焼き肉の部位リスト -----
タン
ハラミ

発生している問題・エラーメッセージ

エラーメッセージは表示されていません。 ソースコードの内容を修正する必要があります。

該当のソースコード

Java

1package check; 2 3import java.util.ArrayList; 4import java.util.HashMap; 5import java.util.List; 6import java.util.Map; 7 8public class Check { 9 10 /* 定数(焼き肉の部位) */ 11 public static final String GYU_100_CALVI = "カルビ"; 12 public static final String GYU_101_TONGUE = "タン"; 13 public static final String GYU_102_LOIN = "ロース"; 14 public static final String GYU_103_HARAMI = "ハラミ"; 15 public static final String GYU_104_ZABUTON = "サブトン"; 16 17 public static void main(String[] args) { 18 19 int startNumber = 100; 20 21 List<String> beafList = new ArrayList<>(); 22 beafList.add(GYU_100_CALVI); 23 beafList.add(GYU_101_TONGUE); 24 beafList.add(GYU_102_LOIN); 25 beafList.add(GYU_103_HARAMI); 26 beafList.add(GYU_104_ZABUTON); 27 28 HashMap<Integer, String> beafMap1 = new HashMap<>(); 29 30 // 問:ループ文を利用して、「beafList」より「beafMap1」に値を設定しなさい。 31 // また、値を設定する際のキー値には「startNumber」を利用しなさい。 32 33 // 問: beafMap1 34 // ルール:【for文】を使用して値を設定しなさい。 35 // ここへ記述 36 for (int i = 0; i < beafList.size(); i++) { 37 beafMap1.put(startNumber+ i ,beafList.get(i)); 38 } 39 System.out.println("----- for文: 焼き肉の部位牛リスト -----"); 40 41 // 問: beafMap1 42 // ルール:【for文】を使用して値を出力しなさい。 43 for (int key :beafMap1.keySet()) { 44 if (key % 2 ==0 ) { 45 System.out.println(beafMap1.get(key)); 46 } 47 } 48 49 startNumber = 100; 50 51 HashMap<Integer, String> beafMap2 = new HashMap<>(); 52 53 for (String beaf : beafList) { 54 beafMap2.put(startNumber++, beaf); 55 } 56 57 System.out.println("----- 拡張for文: 焼き肉の部位リスト -----"); 58 59 for (Map.Entry<Integer , String> entry :beafMap2.entrySet()) { 60 if (entry.getKey() % 2 != 0) { 61 System.out.println(entry.getValue()); 62 } 63 } 64 } 65}

試したこと

for文の継続条件が「i < beafList.size();」とListの大きさ分for文を回すような記述になっているから、
他に考えられる方法を考えて、コンパイルを実行しました。
全て不適切でした。
以下のコードなどはダメみたいです。

for (int i = 0; i < beafList.size(); i++) {
beafMap1.put(startNumber + i, beafList.get(i));
}

System.out.println("----- for文: 焼き肉の部位牛リスト -----"); for (int i = 0; i < beafMap1.size(); i++) { int key = startNumber + i; if (i % 2 == 0) { // Even iteration (i = 0, 2, 4, ...) System.out.println(beafMap1.get(key)); } }

あと、これもダメみたいです。

for (int i = 0; i < beafList.size(); i++) {
beafMap1.put(startNumber + i, beafList.get(i));
}

System.out.println("----- for文: 焼き肉の部位牛リスト -----"); for (int key = startNumber; key < startNumber + beafList.size(); key++) { if (key % 2 == 0) { System.out.println(beafMap1.get(key)); } }

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。
・Javaを学び始めて2週間の初心者です。
・ツールはeclipseを使用しています。
・独学中です。
・踏まえておくべき基礎知識や実務経験はありません。
・答えが分からず、つまずいています。
・何が間違っているのか、分からないまま困っており、手が止まっています。
・chatGPTやGeminiを使いながら、学習しています。
・困ったことを聞いたり、わからないことを聞ける人がいません。

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

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

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

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

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

TakaiY

2024/12/10 15:02

独学とありますが、問題を解いているように見えます。この問題はどこから出たものですか? また、問題そのものを載せることはできますか? コードの どの部分を修正するのかよくわらなず、出題の意図と内容がよくわからないので、アドバイスしにくいです。
meg_

2024/12/10 16:00

> ・独学中です。 問題は参考書や学習サービスからの抜粋でしょうか?どこからの引用か明記した方が良いかと思います。また、サービスによっては転載不可のものもあるかと思いますがその辺りは大丈夫ですか?
jimbe

2024/12/10 16:57 編集

36~38行目の部分は for 文になってますから完了していると見て良いのでしょうか。 43~47行目が拡張 for 文になっていますので、質問はこの部分ということでよろしいですか? 試したといわれる2つが『不適切』でダメみたいということですが、2つ目は条件に beafList.size() があるからとしても1つ目にはありませんし、具体的に何がダメなのでしょう。 それがはっきりしなければあれは?これは?とただ試しまくるしか無く、回答もはっきり書けないのでは無いでしょうか。
guest

回答1

0

どこかのオンライン学習サービスかプログラミングスクールの教材みたいですね。
この問題の意図を推測すると、

普通のfor文だと大変だけど、拡張for文だと同じことが簡単に書けるよ!

ということなのかなと思いますので、それが正しいと仮定して回答しますね。

簡単な回答

この問題でしか動かない回答になりますが、これが一番シンプルでおそらく出題者の意図にそったものな気がします。

beafListのkeyはstartNumberから始まる1ずつ増える(連番になっている)値になっている

という前提を利用したものです。

java

1 for (int i = 0; i < beafMap1.size(); i++) { 2 int key = startNumber + i; 3 if (key % 2 == 0) { 4 System.out.println(beafMap1.get(key)); 5 } 6 }

これならば

for文のループカウンタの継続条件がListのサイズ分にならないように記述する

を満たしているので大丈夫なのではないかと思いますがどうでしょうか?

すこし汎用的な回答

上の方法は「keyの最初の値と、keyが連番である」ことを前提としたコードなので、もうすこし汎用的に動くようにしてみます。
import文を見るかぎりIteratorを使う想定はしていないように見えるので、一度keyを配列に変換して1つ1つアクセスするようにしてみます。

java

1 Integer[] keys = beafMap1.keySet().toArray(new Integer[0]); 2 for (int i = 0; i < keys.length; i++) { 3 int key = keys[i]; 4 if (key % 2 == 0) { 5 System.out.println(beafMap1.get(key)); 6 } 7 }

拡張for文を使ってMapを簡単にアクセスするための問題だと思いますので、「SetをArrayに変換してkeyを取りだす」はちょっとやりすぎな気がしますので、おそらく前の処理が意図したものなんじゃないかいかと思っています。
ご参考までに。

投稿2024/12/10 16:06

toge_

総合スコア317

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問