簡體   English   中英

如何停止循環執行n次?

[英]How to stop the loop executing n times?

我遇到了一個問題,我希望下面的代碼將第一個數組中的指定元素添加到給定索引處的新數組中。 但是,問題在於循環沒有退出。

例如。 下面應該打印索引 4 和 5 處的項目,然后退出,因為數組只有索引到 5 的項目。但是它打印“the”,“mat”,后跟“null”和“null”。

任何提示將不勝感激。 它通過了以下測試,以下建議沒有通過。 ''' @Test public void _2c_pagedData_reflection() 拋出異常 {

    String[] data = {"the", "cat", "sat", "on", "the", "mat"};

    {
        final String[] expected2n2 = {"sat", "on"};
        final String[] result = tester.executeStatic(String[].class, "pagedData", data, 2, 2);
        assertArrayEquals(expected2n2, result);
    }
    {
        final String[] expected4n4 = {"the", "mat"};
        final String[] result = tester.executeStatic(String[].class, "pagedData", data, 4, 4);
        assertArrayEquals(expected4n4, result);
    }
    {
        final String[] expected2n3 = {"sat", "on", "the"};
        final String[] result = tester.executeStatic(String[].class, "pagedData", data, 2, 3);
        assertArrayEquals(expected2n3, result);
    }
}'''

'

package com.company;

public class Main {

    public static void main(String[] args) {
        String[] data = {"the", "cat", "sat", "on", "the", "mat"};

        String[] lol = pagedData(data, 4, 4);

        for (int i = 0; i < lol.length; i++) {
            System.out.println(lol[i]);
        }

    }

    static String[] pagedData(String[] array, int startIndex, int maxSize) {

        String[] newArray = new String[maxSize];
        int count = 1;

            for (int i = 0; i < newArray.length; i++) {
                
                if (startIndex < array.length) {

                String index = array[startIndex];
                newArray[i] = index;
                startIndex++;
                count++;
            }
        }
        return newArray;

        }

}

您正在創建一個大小為 4 的空數組,並且您只想從輸入值中復制 2 個最后一個值。 所以最后兩個值是 null。

static String[] pagedData(String[] array, int startIndex, int maxSize) {
    if(array.length - maxSize<1){ // edge case
       return new String[0];
    }
    String[] newArray = new String[array.length - maxSize];

    ...
    return newArray;

}

您可以使用 List 而不是數組,這樣您就可以完全跳過這個問題。 其次從列表轉換為數組是直接的

static String[] pagedData(String[] array, int startIndex, int maxSize) {
    int counter = 0;
    List<String> results = new ArrayList<>();
    for (int i = startIndex; i < array.length && counter <= maxSize; i++) {
         String index = array[startIndex];
         results.add(index); 
         counter ++;
    }
    return results.toArray(new String[0]);
}

結果:

["the", "mat"]

您正在實例化一個長度為maxSize (即 4)的數組,即使它只會將 2 個元素復制到該數組中 - 所以其他 2 個元素是 null。 array.lengthstartIndex計算返回數組的大小,然后通過maxSize對其進行限制。 使用System.arrayCopy()復制 arrays。

static String[] pagedData(String[] array, int startIndex, int maxSize) {
  int length = array.length - startIndex;
  if (length > maxSize) {
    length = maxSize;
  }
  String[] slice = new String[length];
  System.arrayCopy(array, startIndex, slice, 0, length);
  return slice;
}

編輯:添加示例 JUnit 測試

@Test public void testSlice() {
  String[] array = {"the","cat","sat","on","the","mat"};
  int startIndex = 4;
  int maxSize = 4;
  String[] expected = {"the","mat"};

  String[] actual  = Testing.pagedData(array, startIndex, maxSize);

  Assert.assertArrayEquals(expected, actual);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM