2017-05-16 60 views
0

我試圖一次只顯示列表中的19個元素(以保持輸出在輸出區域的限制內)。我認爲目前的代碼只能一次顯示一行。從偏移列表中只顯示19個元素

List<String> lines = new ArrayList<String>(){ 
     private static final long serialVersionUID = -3916568049983591216L; 
    { 
     add("Line 1"); 
     add("Line 2"); 
     add("Line 3"); 
     add("Line 4"); 
     add("Line 5"); 
     add("Line 6"); 
     add("Line 7"); 
     add("Line 8"); 
     add("Line 9"); 
     add("Line 10"); 
     add("Line 11"); 
     add("Line 12"); 
     add("Line 13"); 
     add("Line 14"); 
     add("Line 15"); 
     add("Line 16"); 
     add("Line 17"); 
     add("Line 18"); 
     add("Line 19"); 
     add("Line 20"); 
    }}; 

    int page = 1; 
    boolean np = false; 
    StringBuilder help = new StringBuilder(); 

    // Stuff to determine page 

    int startLine = 0; 
    if (page > 1) { 
     startLine = 19 * page; 
    } 

    for (int i = startLine; i < lines.size(); i++) { 
     String line = lines.get(i); 
     help.append(line); 
     help.append("\n"); 
     if (i % 19 == 0) { // If 19th element break 
      if (lines.size() > i) // Set next page to true if there is still more elements to show 
       np = true; 
      break; 
     } 
    } 

    System.out.println(help.toString()); 
    if (np) 
     System.out.println("There is a next page."); 

哪個,而不是顯示第19行(因爲頁面是1)它顯示1行:

Line 1
There is a next page.

+4

它可能讓你知道'0%19 == 0'是'true' – 4castle

回答

2

這裏的根本問題是,第1頁,以及任何額外的頁面,你總是會跳出if (i % 19 == 0)的要求,如0%19 == 0, 19%19 == 0等等。您必須創建一個特殊情況,以便不檢查起始號碼。

我建議用if (i % 19 == 0 && i != startLine)

+0

現在它完全有意義。我甚至沒有想到這一點。 – JordanSasquatchMan

+0

對下一堆線條沒有幫助。在你的測試用例中添加更多行,你將只能看到下一頁的第一行。 –

+0

@凱文安德森是的,我完全同意。我沒有看到那麼遙遠。我對它進行了修改,以便它可以在所有後續頁面上運行。 – Drone6251

1

更換if (i % 19 == 0)試試這個:

// Stuff to determine page 
    int startLine = 19 * (page - 1); // Always true, even on page 1 

    for (int i = 0; i < 19 && startLine + i < lines.size(); i++) { 
     String line = lines.get(startLine + i); 
     help.append(line); 
     help.append("\n"); 
    } 
    np = (startLine + 19 < lines.size()); 

    System.out.println(help.toString()); 
1

你應該刪除:

如果(I%19 == 0){

// If 19th element break 
    if (lines.size() > i) // Set next page to true if there is still more elements to show 
      np = true; 
     break; 
    } 
+0

if(i%19 == 0){//如果第19個元素中斷 if(lines.size()> i)//如果還有更多元素要顯示,請將下一頁設置爲true np = true; 休息; } –

+0

該評論的目的是什麼? – CodingNinja