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

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

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

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

Q&A

解決済

1回答

671閲覧

1111111111

hiromichi

総合スコア1

Java

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

0グッド

1クリップ

投稿2023/09/06 08:01

編集2024/05/17 02:00

1111111111

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

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

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

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

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

y_waiwai

2023/09/06 08:04

エラーが出たなら、エラーメッセージを提示しましょう エラーメッセージは、よけいな省略翻訳しないで出たそのママをコピペで提示してください
y_waiwai

2023/09/06 08:05

また、このままではコードが読みづらいので、質問を編集し、</>(コードの挿入)ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
jimbe

2023/09/06 08:16 編集

>int[] result = {recent}; これは何ですか。 >for (int i = 2; i < result.length; i--) { result.length が 3 なら、 i が 3以上になることはありませんのでこのループは終わりません。 >for (int i = 0; i < N; i++) { >String recent = new java.util.Scanner(System.in).nextLine(); >} recent はこのループ内にしか存在しません。意味がありません。 >なぜこうなってしまうんでしょうか。 java の理解がまだ足りないのでしょう。
hiromichi

2023/09/06 08:15

コメントありがとうございます。 まだ学習開始3日目で至らない点が多々あると思いますが、ご容赦いただけるとありがたいです。
hiromichi

2023/09/06 08:18

>int[] result = {recent}; これは何ですか。 受け付けた入力内容をrecentとしてひとまとめにできないかと考えました。 >for (int i = 0; i < N; i++) { >String recent = new java.util.Scanner(System.in).nextLine(); >} これも意味がありません。 Nかい入力という問題だったので、それに対応できるように繰り返しの文法を選択しました。
jimbe

2023/09/06 08:23

変数の型、配列の初期化の仕方、変数が使える範囲、 for ループの条件、マジックナンバー等あちこちに穴があります。 ピンポイントに分からないのならともかく、全体的に動かないようでは一問一答のQAサイトには荷が重いように思いますが如何でしょうか。
hiromichi

2023/09/06 08:29

かしこまりました、もう少し自分で精進します。
jimbe

2023/09/06 08:53

>受け付けた入力内容をrecentとしてひとまとめにできないかと考えました。 >Nかい入力という問題だったので、それに対応できるように繰り返しの文法を選択しました。 それぞれの考え方はあっていると思います。
guest

回答1

0

ベストアンサー

「プログラムがユーザーの近況を聞き、聞いた内容を表示する機能を実装します。N回繰り返して近況を入力できるようにし、入力された近況を逆順で表示するクラスを作成してください。」

main メソッド内を順番に見ていきます。
まずは、繰り返す回数 N の定義とその表示です。

java

1int N = 3; 2System.out.println("繰り返す数" + N);

問題無いです。

続いてN回入力します。

java

1for (int i = 0; i < N; i++) { 2 String recent = new java.util.Scanner(System.in).nextLine(); 3}

ここでまず問題なのは、変数 recent です。
java の変数は、宣言された { } 内でしか有効ではありません。 recent は for の { } 内で宣言されていますので、 for の外では存在せず、従って使えません。
ついでになりますが、入力の為にループの度に生成・使用している java.util.Scanner オブジェクトは、何度も生成するモノではありません。

最後にN個を逆順に出力します。

java

1System.out.println("---近況の報告---"); 2int[] result = {recent}; 3for (int i = 2; i < result.length; i--) { 4 System.out.println(result[i]); 5}

質問の主体とされている int[] result = {recent} があります。
『受け付けた入力内容をrecentとしてひとまとめにできないかと考えました』ということですが、入力の部分の通り、まず recent はこの個所では存在しません。( ”Cannot resolve symbol 'recent'” はこのためです。)
また、入力ではループの度に recent に上書きしているため、 recent がここで使えるように修正したとしても最後の一回分しか入っていません。
さらに、入れる先の変数 result は型が int (の配列)になっています。 recentString ですので、入れることは出来ません。
そして、出力のループで i=2 となっていますが、この 2 は何でしょうか。恐らく N=3 からの 2 だと思いますが、それなら N を用いた式にしなければ N=5 とか変更された時に入力は変更通りに動作するのに出力が動作しません。
ループの継続条件も、ループ変数 i の変化に対応していません。i=2 から i-- でループするなら i は減っていきます。i < result.length はいつまで経っても偽になりません。


全体が N 件の文字列を対象に動作し、入力も出力もそのデータを使います。
なら、 N 個の文字列配列を最初から用意し、入力はその配列に順番に入れ、出力は逆順に表示することです。

N 個の文字列配列は

java

1String[] result = new String[N];

で作れます。
これにそれぞれに入力を入れるなら ( Scanner オブジェクトは先に作ります)

java

1java.util.Scanner scanner = new java.util.Scanner(System.in); 2for (int i = 0; i < N; i++) { 3 result[i] = scanner.nextLine(); 4}

とすることで、 result に N 個の文字列が入ることになります。( recent は不要です。)
後は逆順に出力です。

java

1for (int i = N-1; i >= 0; i--) { 2 System.out.println(result[i]); 3}

ループの変数がループ毎にどのような値になりどう動くのかを想像してください。

投稿2023/09/06 09:26

編集2023/09/06 09:45
jimbe

総合スコア13318

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.32%

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

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

質問する

関連した質問