プロが教えるわが家の防犯対策術!

いくつか数字を入力して読み込ませたものを、入力した時と逆の順番で表示させるにはどうすればよいのでしょうか??

たとえば、




と入力した場合、




と表示されるということです。

// 数列を逆順に書く
class Reverse2 {
public static void main(String [] args){
int data[] = new int[10];
int i,x,kosuu;
i=0;
System.out.println("0以上の数を高々10個打ち込め。終りは -1で表わす。");
System.out.print("> ");
x=IO.in.readInt();
while(x >= 0){
if(i>=10) System.out.println("10個を越えたので無視する。");
else { data[i]=x; i++; }
System.out.print("> ");
x=IO.in.readInt();
}
kosuu=i;
//これで読み込み完了

【ここに配列の中身を逆転するプログラムを書く】

//逆順に書き出し
System.out.println("数列を逆順に書くと以下の通り。");
for(i=kosuu-1; i>=0 ;i--){System.out.println(data[i]);}
}
}

上の【】のところになにを書けばよいか教えて下さいッ(汗)

A 回答 (2件)

2468を逆順に表示するには


data[0]とdata[3]の要素(中身)を交換
data[1]とdata[2]の要素を交換
できればいいのですが、ここで問題があります。
例えば、data[0]とdata[3]の要素を交換する際ただたんに
data[0]=data[3];
data[3]=data[0];
としても
data[0]=data[3]の時点でdata[0]の要素が上書きされてしまい
dataの要素は8468となってしまいます。

これを身近な例に例えて解決したいと思います。
例えば、A君とB君がPS、PS2の同じゲームで遊んでいたとして
お互いのデータを交換したいということになりました。
しかし、A君のデータをB君のメモリーカードに移そうとすると
上書きされて、両方ともA君のデータになってしまいます。
ここでこの問題を解決するため3つ目の空のメモリーカードを用意します。そうすると、
1)A君のデータを空のカードにコピー
2)B君のデータをA君のカードにコピー
3)空のカードのデータをB君のカードにコピー
この手順でみごと両者のデータを交換できます。
これを理解したうえで
A君のデータをdata[0]、B君のデータをdata[3]
int tmp;と変数を宣言し、
空のカードをtmpと置き換えてみるとわかりやすいかと思います。

交換する要素の指定は
for文の中身を(int i=0;i<data.length/2;i++)
(data.lengthは配列dataの長さ(要素数=4)を意味します)とし、
交換するものはdata[i]とdata[(data.length-1)-i]になります
(data.length-1)とするのは、要素数では1から数えてますが
プログラムでは0から数えるため、その誤差を調整するため
1を引いています。

長くなってしまい申し訳ないです。
わからないところがあれば返信ください。
    • good
    • 1

表示する処理が既にカウントダウンループの逆順になっているので、逆転するプログラムは必要ないと思う。



入門プログラマが先輩から課題を与えられたような気配もするが、
仮にそうだとすると、この内容で他人に質問する時点でプログラマのセンスはないと断定できる。
    • good
    • 1

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


このQ&Aを見た人がよく見るQ&A