我想显示前200个条目,如果我再次运行200个以上,依此类推。变量totalResults
将在以后动态设置。如果我只有45个条目,它应该显示那些条目,如果有,例如,540个条目,那么它应该只显示前200个条目。我使用属性文件。这是代码:
public class NewClass1 {
public static void main(String args[]) throws FileNotFoundException, IOException {
int totalResults = 420; //
int itemsperPage = 10;
int count = 200;
int i = 0;
FileOutputStream output = null;
Properties prop = new Properties();
FileInputStream input = null;
input = new FileInputStream("config.properties");
// load a properties file
prop.load(input);
//get the property value startIndex and print it out
String iStr = prop.getProperty("i");
int startIndex = Integer.parseInt(iStr);
System.out.println("startIndex " + startIndex);
//get the property value startIndex and print it out
String iCount = prop.getProperty("count");
int intCount = Integer.parseInt(iCount);
System.out.println("intCount " + intCount);
count = intCount;
for (i = startIndex; i <= (count / itemsperPage); i++) {
//System.out.println("count/itemsperPage "+(count / itemsperPage));
System.out.println("count for " + count);
System.out.println("i for " + i);
if (totalResults >= count) {
System.out.println(" i " + i);
System.out.println("last");
output = new FileOutputStream("config.properties");
//prop.setProperty("pos", strI+"0");
String strI = "" + (i);
prop.setProperty("i", strI);
String strCount = "" + (count + 200);
prop.setProperty("count", strCount);
prop.store(output, null);
}else{
System.out.println("else");
break;
}
}
}
}
如果我是第一次运行此程序,请使用config.properties
键和值
应该为count=200;
和i=1;
第一次运行的输出是:
i for 1, i for 2, i......, i for 20
如果我再次运行它:
i for 20, i for 21,i....., i for 40
它显示起始索引最多为40但有420个条目。不应该打印出来 起始指数高达420?有人知道什么是错的吗?
答案 0 :(得分:1)
不幸的是,除了错误的循环条件之外,这里还有很多问题。
首先,我看到的最明显的问题是:你在循环中分配output = new FileOutputStream("config.properties");
,这是非常糟糕的。
通常,此代码大约需要4倍,这使得它很难理解。例如:
Properties prop = new Properties();
FileInputStream input = null;
input = new FileInputStream("config.properties");
// load a properties file
prop.load(input);
应该是
Properties prop = new Properties();
prop.load(new FileInputStream("config.properties"));
评论也没有必要。评论只应用于非显而易见的事情,否则它们只会让人分心。
//get the property value startIndex and print it out
String iStr = prop.getProperty("i");
int startIndex = Integer.parseInt(iStr);
System.out.println("startIndex " + startIndex);
变为
int startIndex = Integer.parseInt(prop.getProperty("i"));
等
养成问自己这3个问题的习惯:
我可以在更少的线路上做几行我想做的事情吗?
2.在更多线路上做什么我会得到什么?
3.为什么我不把它移到一个单独的函数中?
您还不需要i
和count
以及startIndex
和intCount
。他们是多余的。
进行这些更改,删除已注释掉的代码和与调试相关的打印语句,然后编辑您的问题,我保证您会得到更多的关注。
我还建议用英语写出你想要完成的事情并将其分解为步骤(伪代码)。然后浏览您的程序并重新检查实现伪代码每个步骤的实际代码。你会发现在某些情况下,你编写了冗余或过于复杂的代码,或者你没有做你想做的事情。另外,将psuedocode和你的问题一起发布将对我们有所帮助。
最重要的是,不要气馁。我们在某些时候都写过这样的代码;变得更好是一个漫长而痛苦的过程,但你付出的努力越多,你学得的就越快。
答案 1 :(得分:1)
我知道你已经选择了一个已接受的答案。但是,如果您需要提供给您的解决方案。我已经添加了下面的源代码,以实现您的预期操作。
是的,因为Floegipoky指出你的代码不易阅读。只需确保将相关代码组合在一起 - 这样就解决了一半的可读性问题。
import java.util.Properties;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class ReadFile
{
public static void main(String args[]) throws FileNotFoundException, IOException
{
Properties config = new Properties();
config.load(new FileInputStream("config.properties"));
int itemsPerPage = Integer.parseInt(config.getProperty("itemsPerPage"));
int currentIndex = Integer.parseInt(config.getProperty("currentIndex"));
int totalItemCount = Integer.parseInt(config.getProperty("totalItemCount"));
if(currentIndex < totalItemCount)
{
for(int iterator = 0; iterator < itemsPerPage; iterator++)
{
if(currentIndex < totalItemCount)
{
//TODO Insert what ever processing of those batch operations here
currentIndex++;
continue;
}
}
config.setProperty("currentIndex", ((Integer)currentIndex).toString());
config.store(new FileOutputStream("config.properties"),null);
}
}
}
答案 2 :(得分:0)
我向网站发出请求,这给了我一个带有变量,totalresults,itemsperPage和pos的XML响应:在这个例子中,上面写的代码是:totalresults = totalItemCount,pos = currentIndex:
这个界面确实每天只提供200个条目,总结果可能比这个200多 这就是如何从正确的位置循环第二天,itemsperPage是10, 如果totalItemCount为425,则对于一个请求,它会在File中给出10个条目的响应 在这种情况下,最后一个文件将有5个条目。
控制台上的输出应为:
例如: totalItemCount = 425
这应该是循环
“http:/ query / currentIndex1”这将返回10个条目。
如果再次运行程序
可能它应该在代码中有另一个变量200 = Entries?