仅显示带有偏移的列表中的19个元素

时间:2017-05-16 02:20:09

标签: java

我试图一次只显示列表中的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.

3 个答案:

答案 0 :(得分:2)

这里的根本问题是,在第1页以及任何其他页面上,您将始终按if (i % 19 == 0)要求行事0%19 == 0, 19%19 == 0,等等。您必须创建一个特殊情况,以便不检查起始编号。

我建议将if (i % 19 == 0)替换为if (i % 19 == 0 && i != startLine)

答案 1 :(得分:1)

试试这个:

// 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());

答案 2 :(得分:1)

你应该删除:

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;
    }