- 締切済み
プログラミングお願いします(JAVA)
問題 キーボードから10回連続して入力し、そのデータを入力された順番とは逆順に一行で出力するプログラムを作成する 実行結果 ↓ 数値1>10 数値2>11 数値3>13 途中略 数値9>25 数値10>27 入力:10 11 13 15 17 19 21 23 25 27 逆順出力:27 25 23 21 19 17 15 13 11 10 ____________________________________________________________________________________________________ 自分がやったプログラミングですが、実行結果がうまくいきません。エラーは発生しないですけど、最後の入力と逆出力の出し方が実行結果のようにうまく表示させることができません。どうしたらいいでしょうか?? class Sample4 { public static void main(String[] args) throws IOException { System.out.println(""); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int[] test = new int[10]; for (int i = 0; i < 10; i++){ System.out.print("数値"+i+">"); String str = br.readLine(); int num =Integer.parseInt(str); test[i]=num; } for (int i = 0; i < 10/ 2; i++) { int t = test[i]; test[i] = test[10 - i - 1]; test[10 - i - 1] = t; } System.out.println("要素の並びを逆転しました."); for (int i = 0; i < 10; i++){ System.out.print("入力:"+test[i]); System.out.print("逆順出力:"+test[i]); } } }
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- MillenniuM
- ベストアンサー率58% (42/72)
全角の空白を削除して、日本語の文字列を ASCII だけにしてみました。 内容は同じです。今度はどうでしょうか。 import java.io.*; class QA8293175 { private static final int n = 10; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int[] test = new int[n]; for (int i = 0; i < n; i++) { System.out.print("no. " + i + "> "); test[i] = Integer.parseInt(br.readLine()); } System.out.print("in:"); for (int i = 0; i < n; i++) { System.out.print(" " + test[i]); } System.out.println(); for (int i = 0; i < n / 2; i++) { int t = test[i]; test[i] = test[n - i - 1]; test[n - i - 1] = t; } System.out.println("reversed."); System.out.print("out:"); for (int i = 0; i < n; i++) { System.out.print(" " + test[i]); } System.out.println(); } }
- MillenniuM
- ベストアンサー率58% (42/72)
アルゴリズムは合ってると思います。出力の順番が違ってるだけです。 定数の 10 だけは、散らばっていて気持ち悪いので、n としてくくりだしました。 各行の全角のスペースを削除して、試してみてください。 import java.io.*; class QA8293175 { private static final int n = 10; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int[] test = new int[n]; for (int i = 0; i < n; i++) { System.out.print("数値" + i + "> "); test[i] = Integer.parseInt(br.readLine()); } System.out.print("入力:"); for (int i = 0; i < n; i++) { System.out.print(" " + test[i]); } System.out.println(); for (int i = 0; i < n / 2; i++) { int t = test[i]; test[i] = test[n - i - 1]; test[n - i - 1] = t; } System.out.println("要素の並びを逆転しました."); System.out.print("出力:"); for (int i = 0; i < n; i++) { System.out.print(" " + test[i]); } System.out.println(); } }
補足
大量のエラーが発生しますよ??
- MillenniuM
- ベストアンサー率58% (42/72)
Java 勉強中です。 QA8293175.java: import java.util.*; public class QA8293175 { private static final Integer n = 10; public static void main(String[] args) { Scanner in = new Scanner(System.in); ArrayList<Integer> result = new ArrayList<Integer>(); ArrayList<Integer> reverse = new ArrayList<Integer>(); Integer i = 0; while (result.size() < n) { try { System.out.print("num " + (i + 1) + " ? "); result.add(new Integer(in.next())); i++; } catch (Exception e) { continue; } } System.out.println(result); for (Integer j = 0; j < n ; j++) { reverse.add(result.get(n - j - 1)); } System.out.println(reverse); } }
補足
良かったらリバースとかtryなどの」難しい言語使わないでください習ってないので
- kmee
- ベストアンサー率55% (1857/3366)
> これをどこに書くんですか?? これを書くのに適した場所です。 これが何をしているかを考えれば簡単です。 どうしてもわからなければ、いろんなところに実際に置いてコンパイル→実行してください コンパイルエラーになったり、出力結果が期待通りでなければ、間違いです。 期待通りの結果になったら、そこです。 どうしてそうなるか、よく考えてみましょう
- yukichance
- ベストアンサー率13% (9/67)
同配列、時間差上書きしちゃってる。 配列の、入出力は、きっちりと…
- kmee
- ベストアンサー率55% (1857/3366)
いいところまでは、いってるんだけどなぁ まずは、「実行結果のようにうまく表示させることができません」等と中途半端なことを言っていないで 具体的に、なにがどう「うまく表示されない」のか、現象を正確に把握しましょう。 for (int i = 0; i < 10; i++){ System.out.print("入力:"+test[i]); System.out.print("逆順出力:"+test[i]); } これは System.out.print("入力:"+test[i]); System.out.print("逆順出力:"+test[i]); の固まりを繰り返します。 この時点で、既に順番が入れかわっているのですから System.out.print("入力:"+test[0]); としたところで、「順番変更後のtest[0]」が出力されてしまいます。 また、「入力:~」と「逆順出力:~」を交互に実行します。 目的のことをするには 入力だけの出力だけ全部 順番入れ替え 逆順出力だけ全部 とする必要があります。 別解: 「test[]の内容を並び変えろ」とは書いてありません。 ということは、表示順だけ変える、というのも有りでは。 また、10個と決まっているので System.out.print("入力:"+test[0]+" "+test[1+" "+test[2+" "+test[3]+" "+test[4]+" "+test[5]+" "+test[6]+" "+test[7]+" "+test[8]+" "+test[9]+" "); とも書けます。
補足
これをどこに書くんですか?? 入力:"+test[0]+" "+test[1+" "+test[2+" "+test[3]+" "+test[4]+" "+test[5]+" "+test[6]+" "+test[7]+" "+test[8]+" "+test[9]+" ");
補足
うまくいきましたが細かいことを言うと、数値1からですので、i=0からにしてしまいますと、数値が0からのスタートとなってしまいます。その場合はどうしたらいいですか??