以下は私が書いたプログラムです。
public class Replace{ public static void main(String[] args){ Scanner kbd = new Scanner(System.in); int n; System.out.print("n=");//nを入力 n = kbd.nextInt(); int[] a = {1, 2, 3, 4, 5}; rshift(a,n); rrotate(a,n); print(a,5);//5個の数字を表示 } static void rshift(int[]a,int n){ for(int i=1;i<n;i++) a[i-1]=a[i]; } //配列aの先頭のn個の要素をrrotateする static void rrotate(int[]a,int n){ int w=a[n-1]; rshift(a,n); a[2]=w; } //配列aの先頭n個の要素を表示 static void print(int[]a,int n){ for(int i=0;i<n&&a[i]>0;i++) System.out.print(a[i]+" "); System.out.println(); } }
nはキーボードから入力します。
shiftと逆の操作(rshift)ということは、配列aの先頭n個の要素を1つずつ後にずらすということですよね?
ということは、例えばn=4とすると、
{1,1,2,3,5}になります。それからまたrotateと逆の操作(rrotate)をすると、消えた4が前から2番目の位置にくるから、最終的に{1,4,2,3,5}となるはずなんですが、、、。実行結果は3 4 4 4 5となりました。1と2はどこへ消えてしまったのでしょう?そもそも私のrshiftとrrotateの考え方が間違っていますか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。