2017-03-08 4 views
1

私はJavaの初心者です。私は、このreverse arrayListの値の最後の2つをどのように出力するのだろうかと疑問に思っていました。なぜなら、それは4の連続シーケンスの一部ではないからです。(numbers.size()%4==0)を使用することを考えていましたが、4つの値の連続したシーケンスの一部ではないArrayListの最後の値を出力するにはどうすればよいですか?


import java.util.*; 
    public class printArray { 

    public static void main(String[] args) { 
     ArrayList <Integer> numbers= new ArrayList<>(); 
     numbers.add(10); 
     numbers.add(13); 
     numbers.add(2); 
     numbers.add(8); 
     numbers.add(7); 
     numbers.add(90); 
     numbers.add(-1); 
     numbers.add(2); 
     numbers.add(4); 
     numbers.add(5); 




     System.out.println(numbers); 

     System.out.println(reverse4(numbers)); 

    } 
    public static ArrayList<Integer> reverse4 (ArrayList<Integer> numbers){ 
     ArrayList< Integer> reverseSet= new ArrayList<>(); 
      for (int i = 0; i < numbers.size(); i += 4) {//goes from 0 to 4, 4 to 8 and keeps incrementing by 4 
       for (int k = i + 3; k >= i ; k--)// reverse order, executes 4 times before going to the outer loop 
      reverseSet.add(numbers.get(k)); 


     } 

     return reverseSet; 

    } 
} 
+0

'reverseSet'の最後の要素はいくつまで印刷しますか? –

+0

そうですが、最後の値を変更しないで印刷したいと思います。たとえば、値が1 2 3 4 5 6 7の配列を持つ場合、最初の4つの連続する値は4 3 2 1になり、残りは変更されずに出力されます。したがって、最後に次のようになります。4 3 2 1 5 6 7 –

+0

arrayListのサイズによって異なります。 23個の要素がある場合、4のシーケンスの倍数も一部でもないので、3は変わらないでしょう。 –

答えて

3

あなたがreverseSet.add()を行う前kが範囲

if (k < numbers.size()) 

内にあるかどうかを確認できます。

編集:申し訳ありませんが、あなたがしていることを誤解しています。最後の部分集合ではなく、4つの完全な集合を逆にしたいと思っています。だから、

、カウント:

position | 1  2  3  4 | 5  6  7 
---------+----------------------------+-------------------- 
count | size-7 size-6 size-5 size-4|size-3 size-2 size-1 
      last 
      one 

position | 1  2  3  4 | 5  6 
---------+----------------------------+-------------------- 
count | size-6 size-5 size-4 size-3|size-2 size-1 
      last 
      one 

position | 1  2  3  4 | 5 
---------+----------------------------+-------------------- 
count | size-5 size-4 size-3 size-2|size-1 
      last 
      one 

position | 1  2  3  4 | 
---------+----------------------------+-------------------- 
count | size-4 size-3 size-2 size-1| 
      last 
      one 

ArrayListには短すぎるが、あなたは別の必要があると思いますしない限り、iの最後の有効な値は常に配列マイナス3(のサイズよりも小さくなければならないように見えます私の以前の答えはそこで動作するはずです)。だから、上記の代わりに、i < numbers.size()i < numbers.size() - 3に置き換えてください。ここで

+0

これは私の結果です。元の[10,13,2,8,7,8 0,1、 2、4、5] 逆さま[8、2、13、10、2、-1、90、7、5、4] 4と5が4のシーケンスの一部ではないので、 ? –

0

は変更reverse4方法です:

public static ArrayList<Integer> reverse4(ArrayList<Integer> numbers) { 
     ArrayList<Integer> reverseSet = new ArrayList<>(); 
     for (int i = 0; i < numbers.size(); i += 4) { 
      if (i + 3 < numbers.size()) { // check if remaining number of elements less than 4 
       for (int k = i + 3; k >= i; k--) 
        reverseSet.add(numbers.get(k)); 

      } else { 
       for (int k = i; k < numbers.size(); k++) { 
        reverseSet.add(numbers.get(k)); // add the remaining elements without reversing 
       } 
      } 
     } 

     return reverseSet; 

    } 

リストは4つの、残りの要素を持っているかどうかを確認するために新たな条件を注意してください。

関連する問題