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