需要循环帮助

时间:2014-09-20 13:52:10

标签: java loops for-loop

我想显示前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?有人知道什么是错的吗?

3 个答案:

答案 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.为什么我不把它移到一个单独的函数中?

您还不需要icount以及startIndexintCount。他们是多余的。

进行这些更改,删除已注释掉的代码和与调试相关的打印语句,然后编辑您的问题,我保证您会得到更多的关注。

我还建议用英语写出你想要完成的事情并将其分解为步骤(伪代码)。然后浏览您的程序并重新检查实现伪代码每个步骤的实际代码。你会发现在某些情况下,你编写了冗余或过于复杂的代码,或者你没有做你想做的事情。另外,将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个条目。

  • “http:/ query / currentIndex2”这将返回下一个10个条目
  • ..........
  • “http:/ query / currentIndex20”这将返回下一个10个条目“(因为20x10制作)

如果再次运行程序

  • “http:/ query / currentIndex21”这将回馈下10个条目(210个条目)
  • ...........
  • “http:/ query / currentIndex42”这将返回接下来的10个条目(因为42 x 10会产生420个)。

可能它应该在代码中有另一个变量200 = Entries?