電子書籍の厳選無料作品が豊富!

問題
  キーボードから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]);

}



}
}

A 回答 (6件)

全角の空白を削除して、日本語の文字列を 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();
}
}

この回答への補足

うまくいきましたが細かいことを言うと、数値1からですので、i=0からにしてしまいますと、数値が0からのスタートとなってしまいます。その場合はどうしたらいいですか??

補足日時:2013/10/06 19:09
    • good
    • 0

アルゴリズムは合ってると思います。

出力の順番が違ってるだけです。
定数の 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();
 }
}

この回答への補足

大量のエラーが発生しますよ??

補足日時:2013/10/06 17:56
    • good
    • 0

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などの」難しい言語使わないでください習ってないので

補足日時:2013/10/06 13:42
    • good
    • 0

> これをどこに書くんですか??



これを書くのに適した場所です。
これが何をしているかを考えれば簡単です。

どうしてもわからなければ、いろんなところに実際に置いてコンパイル→実行してください
コンパイルエラーになったり、出力結果が期待通りでなければ、間違いです。
期待通りの結果になったら、そこです。
どうしてそうなるか、よく考えてみましょう
    • good
    • 0

同配列、時間差上書きしちゃってる。


配列の、入出力は、きっちりと…
    • good
    • 0

いいところまでは、いってるんだけどなぁ



まずは、「実行結果のようにうまく表示させることができません」等と中途半端なことを言っていないで
具体的に、なにがどう「うまく表示されない」のか、現象を正確に把握しましょう。


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]+" ");

補足日時:2013/10/05 22:26
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!