2014-09-20 226 views
-2

我想顯示前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

爲什麼你認爲它應該在startIndex 40之後保持循環?在這一點上「計數」的價值是什麼? totalResults的價值是什麼? – folkol 2014-09-20 15:17:47

+1

問題的部分原因是,你試圖做什麼並不完全清楚;你所說的和你的代碼所說的內容之間存在巨大的脫節。你說你想打印前200個條目,但是你的代碼中沒有提到任何類型的條目。此外,你的循環只迭代了20次,你似乎很高興?有多個未使用和/或冗餘的變量。我試圖幫助你清理代碼,以便我們能夠弄清楚你正在嘗試做什麼。否則,我們無法修復它。 – Floegipoky 2014-09-20 17:02:19

回答

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); 
       } 
     } 
} 
+0

嗨,這個代碼更具可讀性。但它沒有這樣的行爲。我的英語不太好,所以我可以解釋不好。我會解釋我需要的代碼,這將有助於我希望如此。 – 2014-09-21 10:12:01

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")); 

獲得成習慣問自己這三個問題的:
1.我可以做我想做了較少的幾行線代替?
2.通過更多線路做什麼可以獲得什麼?
3.爲什麼我不把它移動到一個單獨的功能?

您也不需要icount以及startIndexintCount。它們是多餘的。

進行這些更改,擺脫註釋掉的代碼和調試相關的打印語句,然後編輯您的問題,我保證您會得到更多關注。

我也真的建議用英文寫出你想要完成的事情,並將其分解成步驟(僞代碼)。然後通過你的程序並重新檢查實現僞代碼每一步的實際代碼。你會發現,在某些情況下,你寫過冗餘或過於複雜的代碼,或者你沒有做你想做的事情。另外,將psuedocode與您的問題一起發佈將對我們有所幫助。

首先,不要灰心。我們都在某個時候寫了這樣的代碼;變得更好是一個漫長而痛苦的過程,但你付出的努力越多,學習的速度就越快。

+0

感謝您的知識分享,但我仍然不知道如何使這個循環,我試了很多次,不知道,如果你能幫助我,它會很好。 – 2014-09-20 16:24:26

0

我做一個網站的請求這給了我與變量,使用totalResults,itemsperPage和POS一個XML響應:在這個例子中上面的代碼至極deniss寫的是:使用totalResults = totalItemCount,和POS = CURRENTINDEX :

這個界面確實僅給出了200項每天一次使用totalResults可能是鐵道部比這200 和那點itemsperPage如何循環從正確的位置,第二天,就是10, 一個請求時,它給出了一個如果在這種情況下totalItemCount是425 ,那麼最後一個文件將有5個條目。

在控制檯上的輸出應爲:

例如: totalItemCount是= 425

這應該是環

「HTTP:/查詢/ currentIndex1」 這會給回來, 10個參賽作品。

  • 「HTTP:/查詢/ currentIndex2」 這會給後面接下來的10項
  • ..........
  • 「HTTP:/查詢/ currentIndex20」 這會給後面接下來的10項」(因爲20×10使)

如果運行PROGRAMM再次

  • 「HTTP:/查詢/ currentIndex21」 這會給後面接下來的10項(210項)
  • ...........
  • 「http:/ query/currentIndex42」這將返回接下來的10個條目(因爲42 x 10使420)。

可能它應該在代碼中有另外一個200 = Entries的變量嗎?