2012-03-20 39 views
0

我正在編寫一個程序,它讀取一個CSV文件並將每列存儲到一個單獨的數組中。後來我想搜索數組A和B,並連續3個0和2個跟隨它們。我運行該程序後,控制檯的一個例子是;在兩個不同的數組中找到3個相等的連續數字。 Java

          A B 
Line # 1 1.3167 1.3164 1.318 1.3174 0 0 
Line # 2 1.3167 1.3164 1.318 1.3174 0 0 
Line # 3 1.3175 1.3164 1.3182 1.3169 0 0 
Line # 4 1.3168 1.3167 1.3225 1.3212 1 1 
Line # 5 1.3213 1.3206 1.3221 1.321 1 0 
Line # 6 1.3211 1.3208 1.3241 1.3239 1 1 
Line # 7 1.324 1.3237 1.3262 1.3242 1 1 
Line # 8 1.3243 1.3234 1.3271 1.3245 0 1 
Line # 9 1.3244 1.3223 1.3251 1.324 0 0 
Line # 10 1.3241 1.3226 1.3269 1.3269 1 1 

還有很多行,但是我希望程序在每次發生1-4行的模式時都能找到併發送消息給我。

我的代碼是

package pacakge; 
import java.io.*; 
import java.util.Scanner; 

public class read { 
    public static void main(String[] args) throws FileNotFoundException { 
    int size=0; 
    double[] open = new double[1000000]; 
    double[] low = new double[1000000]; 
    double[] high = new double[1000000]; 
    double[] close = new double[1000000]; 
    int[] A = new int[1000000]; 
    int[] B = new int[1000000]; 

    int zeroCount = 0; 

    Scanner read = new Scanner(new File("C:/Users/Eric/Documents/Data Structures/EURUSD.csv")); 
    read.nextLine(); 
    while(read.hasNextLine()) { 
     String[] n= read.nextLine().split(","); 
     open[size]=Double.parseDouble(n[0]); 
     low[size]=Double.parseDouble(n[1]); 
     high[size]=Double.parseDouble(n[2]); 
     close[size]=Double.parseDouble(n[3]); 
     A[size]=Integer.parseInt(n[4]); 
     B[size]=Integer.parseInt(n[5]); 
     size++; 
    } 

    for (int i = 0; i < size; i++){ 
     System.out.println(open[i] + "\t" + low[i] + "\t" + high[i] + "\t" + close[i] + "\t" + A[i] + "\t" + B[i]); 
     System.out.println("Line" + i); 
     System.out.println(open[68722]); 

     if(A[i]==0 && A[i+1] == 0 && A[i+2] == 0 && B[i]==0 && B[i+1] == 0 && B[i+2] == 0) { 
     zeroCount++; 
     System.out.println("Found Pattern !!!" + zeroCount); 
     break; 
     } 
    } 
    } 
} 

後,我運行它運行正常,但卻發現3個0,順序是不連續的。我不知道爲什麼這不起作用。謝謝。

+1

如果這是我的代碼,我會使用println語句來分析錯誤。我也嘗試避免創建並行數組,並將每行數據保存在自定義類的單個對象中。 – 2012-03-20 01:36:15

+0

我需要可操縱的CSV,我無法想象一種方法,我可以分開值來比較它們彼此。有更好的方法可以讓我看看嗎? – 2012-03-20 01:40:46

+0

我預計你的第二個循環出現問題。你循環,直到我=大小-1,然後嘗試看A [i + 1]和A [i + 2],以及B [i + 1]和B [i + 2],所有這些都會導致在一個'IndexOutOfBoundsException'中。您還沒有看到這一點的原因是因爲短路評估以及您尚未使用A [size-1] = 0運行程序的事實。 – twain249 2012-03-20 01:41:29

回答

0

更簡單,也許更有效的解決問題的方法是把這些數組a和b你有轉換成String ASTRING和Bstring其中每個字符串中的字符數組中的元素轉換:即,如果

A={0,0,0,1,1,1,1,0,...}; 

然後ASTRING是:

Astring="00011110..."; 

一旦你有了這個,找到你正在尋找一個行取得的成就:

int index = Astring.indexOf("00011"); 

如果index = -1,那麼您沒有要查找的序列0,0,0,1,1。否則,A(索引)將是您要查找的模式中的第一個元素(即A(索引)= 0,A(索引+ 1)= 0,...,A(索引+ 4)= 1)。

相關問題