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

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

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

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

1064閲覧

配列の文字列逆順表示

oimo0505

総合スコア22

Java

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2022/05/18 02:31

前提

Javaで入力する回数を選択、入力、入力した文字列を逆順で表示するプログラムを作っています。
現在入力した文字を配列に格納してそのままの順序で表示するまではできたのですが逆順で表示させる方法をご教授いただきたいです。またその際できれば配列を用いて逆順表示をしたいです。

実現したいこと

入力した文字の逆順表示

(実行後の例)
繰り返す数:3
あいうえお
かきくけこ
さしすせそ
ーーー逆順ーーー
さしすせそ
かきくけこ
あいうえお

該当のソースコード

Java

1import java.io.*; 2 3public class Make { 4 public static void main ( String [] args ) throws IOException { 5 6 System.out.println("繰り返す数: "); 7 BufferedReader br = 8 new BufferedReader (new InputStreamReader (System.in)); 9 10 String str = br.readLine(); 11 int num = Integer.parseInt(str); 12 13 String [] test; 14 test = new String [num]; 15 16 for (int n = 0; n < num; n++) { 17 str = br.readLine(); 18 test [n] = str; 19 } 20 21 System.out.println("--- 逆順 ---"); 22 23 for (int n = 0; n < num; n++) { 24 System.out.println(test[n]); 25 } 26 } 27}

試したこと

最後のfor文を以下のように変更したところ逆順以降の表示がそもそもされなくなった
for (int n = num; num < 0; n--) {

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

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

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

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

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

guest

回答2

0

ベストアンサー

× for (int n = num; num < 0; n--) {
〇 for (int n = num-1; n >= 0; n--) {

投稿2022/05/18 02:33

編集2022/05/18 10:42
episteme

総合スコア16614

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

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

oimo0505

2022/05/18 03:01

回答ありがとうございます。 うまく作動いたしました。
episteme

2022/05/18 06:14

なぜダメだったか、理解/納得しました?
TN8001

2022/05/18 08:28

n >= 0ではないですか?
episteme

2022/05/18 08:30

あなた for (int n = num; num < 0; n--) {... とやってダメだったんですよ。 「n >= 0」 がダメな理由なんですか?
TN8001

2022/05/18 10:25

私は質問者ではありません。 回答について指摘しています。
episteme

2022/05/18 10:43 編集

あ...失礼。修正しました。 # なんでベストアンサーついたんだろ...
TN8001

2022/05/18 10:58

対応ありがとうございました^^
oimo0505

2022/05/21 05:19

episteme様 返信が遅くなってしまい申し訳ございません。 最初のfor文においてn=0と定義しているため、入力した繰り返す数から1引いた数がデクリメント演算子により減少していく中で0以上の間表示されるという認識をしてうまく表示されたため次の開発に取り組んでいました。 n => 0に関しては回答をもとに修正している中で自分で気付いたため、迅速な回答、問題点を指摘していただいたepisteme様をベストアンサーとさせていただきました。加えてTN8001様も回答していただきありがとうございました。
guest

0

多分、for文を理解していない気がする…

そもそもfor文の書き方は常にfor( int i = 0; i < (ここに回数); i++ )...ではありません。
for文の基本は「範囲」です。

まず、for( int i = 0; i < 10; i++ ) System.out.println( "Hello" );を例に取ってみましょう。

for文はfor( 初期値; 条件式; 増減式 )...となっています。
これはまず初期値で初期化します。int i = 0; となっていれば 変数 iを用意してそれの初期値を0とする。
そして条件式を満たす間、増減式を行いながらSystem.out.printとかのような処理をしていく。
でまたfor文の先端に戻り、条件式を満たすかどうかを検査して、満たす場合に増減式を行いながら処理…とやっていって、最終的に条件式を満たさなくなったら終了という感じです。

ということは、for( int i = 0; i < 10; i++ ) System.out.println( "Hello" );は、
iの初期値は0で、iが10未満の間、iをインクリメント( i = i + 1 )しながらHelloと表示する…という感じです。

これを実際にシミュレーションしてみましょう。

まず、i = 0 ですよね。i < 10 は満たしますか? 0 < 10 なので満たしますよね。0は10より小さいので。
よって System.out.println( "Hello" );を行う。そして i の値を +1 する。( i++ なので )

つまり、i = 1 となっている。( i = 0 + 1 = 1 なので )
で、for文の先端に戻って、i < 10を満たすかどうか検査。1 < 10 なので満たす。
よってSystem.out.println( "Hello" );を行なってi++。

i = 2になっているので、同じように…

とやっていき、i = 10 のとき、同じようにfor文の先端に来る。
だけど、i < 10 は満たしません。10 < 10 は満たさないですよね? だって同じ値なんだから 10 = 10 になっていないとおかしいです。i <= 10 であれば満たしていますが今回は i < 10 なので満たさない。
よってこれ以上ループせずに次のステップ( for文の次に書かれているようなもの ) に移る。

ということは必ずしもfor( int i = 0; i < (回数); i++ )...である必要はないのです。

で、配列は0番目から(n-1)番目までですよね。後ろから見ていく場合、どのようになりますか?
たとえば N = 10、つまり要素数10の配列ということです。この配列を後ろから見ていく場合はどのようにやりますか?
普通に考えて、arr[9], arr[8], arr[7], arr[6] ... のようになっていくはずです。
これを実装すればいいだけです。

数字が大きい方から順に1まで減っていくのだから、初期値は n-1 で、nが0以上(n≧0)の間、iの値を-1していく…と考えることができますよね。これを実装するだけです。
あとはデバッグとかをして仕様に沿うようにやればいいだけです。

投稿2022/05/18 03:20

BeatStar

総合スコア4958

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

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

oimo0505

2022/05/21 05:26

BeatStar様 とても丁寧な解説ありがとうございます。配列、逆順といった新しい要素を加えようとした瞬間に初期値のn-1に気付かずこのようにエラーを出してしまい、自分の理解の精度が甘いことを実感させられました。 一つ一つの理解をもっと正確にしていくよう精進します。
BeatStar

2022/05/21 05:56

for文の『範囲』なので、数直線で考えてみるとわかりやすいかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問