

Java初心者です。学校の課題でJavaの配列に取り組んでいます。  
とりあえず、配列内にキーボードで入力値を入れるところまでできたのですが、  
イメージとは違うようです。

ユーザが入力した値を配列に入れ、最後に配列内の値を逆順で出力するプログラムです。  
イメージとしては、以下のような感じです。

プロンプトとユーザからの入力:

[code]

    整数を入力してください
    3
    2
    1
    
[/code]

出力結果:

[code]

    1
    2
    3
    
[/code]

ソースコードにおいて誤ってる箇所などありましたら指摘いただけるとありがたいです。

[code]

    public static void main(String[] args) {
    
        // 配列sの初期化
        int[] s = new int[10];
        // 入力を10回受け付ける
        for (int i = 0; i < s.length-1; i++) {
            System.out.println("整数を入力してください");
            Scanner scan1 = new Scanner(System.in);
            s[i] = scan1.nextInt();
            System.out.println(s[i]);
        }
    }
    
[/code]


CC BY-SA 3.0
2017-08-15T06:00:37.893
37207
2017-08-18T21:32:57.183
2017-08-16T10:07:49.860
5008
24884
question
java
Javaで配列の要素を逆順で出力したい


「数字の入力」と「結果の出力」を1つのループにまとめてしまうと当然結果も入力順にしか出力されないでしょう。ループを2つ(数字の入力、結果を逆順に出力)用意する必要があるかと思います。

結果の出力時は配列のサイズでインデックスを`-1`ずつしながらfor文で処理すれば、逆順での出力が出来ると思います。


CC BY-SA 3.0
2017-08-15T06:14:04.457
37208
2017-08-15T06:14:04.457
3060
37207
answer


入力用のForの後ろに

[code]

    for (int i = s[i].length; i > 0; i--) {
        System.out.println(s[i-1]);
    }
    
[/code]

で出力すれば、いかがでしょう。


CC BY-SA 3.0
2017-08-15T06:20:52.360
37209
2017-08-15T06:20:52.360
23688
37207
answer


こんな感じかな？  
テストはしてません。

[code]

    public static void main(String[] args) {
    
        // 配列sの初期化
        int[] s = new int[10];
        // 入力を10回受け付ける
        for (int i = 0; i < s.length-1; i++) {
            System.out.println("整数を入力してください");
            Scanner scan1 = new Scanner(System.in);
            s[i] = scan1.nextInt();
        }
        for(int i = 0; i < s.length-1; i++) {
            System.out.println(s[(s.length-1) - i]);
        }
    }
    
[/code]


CC BY-SA 3.0
2017-08-15T06:21:16.627
37210
2017-08-15T06:33:52.880
2017-08-15T06:33:52.880
21092
24490
37207
answer


`整数を入力してください`と表示してから、10回ユーザーの入力を受け付けて、逆順に表示したいということでしたら、以下のようなコードになると思います。

[code]

    public static void main(String[] args) {
        // 配列sの初期化
        int[] s = new int[10];
        System.out.println("整数を入力してください");
        // 入力を10回受け付ける
        try (Scanner scan1 = new Scanner(System.in);) {
            for (int i = 0; i < s.length; i++) {
                s[i] = scan1.nextInt();
            }
            for (int i = s.length; i > 0; i--) {
                System.out.println(s[i - 1]);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
[/code]

※`scan1`は最後に`close()`を呼び出した方がいいので、`try-with-
resources`を使う方がよりいいです(今回のようなmainメソッドを実行するだけの処理であれば、そこまで気にしなくていいですが、場合によってはリソースリークします)。Java6以前であれば、`try-
with-resources`が無いので、`finally`句で`scan1.close();`を実行します。


CC BY-SA 3.0
2017-08-15T07:41:19.420
37213
2017-08-15T07:47:47.293
2017-08-15T07:47:47.293
21092
21092
37207
answer


Java のバージョン指定がなければこんなのはいかがでしょうか。

[code]

    import java.util.Scanner;
    import java.util.stream.IntStream;
    
    public class SchoolChallenges {
    
    public static void main(String[] args) {
        int elementCount = 10;
        int[] s = new int[elementCount];
        System.out.println("整数を入力してください");
        try (Scanner scan1 = new Scanner(System.in);) {
            IntStream.range(0, elementCount).forEach(e -> {
                s[e] = scan1.nextInt();
            });
    
            System.out.println("入力と逆順に出力");
            IntStream.rangeClosed(1, elementCount)
                    .boxed()
                    .mapToInt(i -> s[elementCount - i])
                    .forEach(System.out::println);
    
        } catch (Exception e) {
            e.printStackTrace();
        }
    
    }
    
[/code]

}


CC BY-SA 3.0
2017-08-18T21:32:57.183
37322
2017-08-18T21:32:57.183
2869
37207
answer