2012-03-20 2 views
0

나는 CSV 파일을 읽고 각 열을 별도의 배열에 저장하는 프로그램을 작성 중이다. 나중에 배열 A와 B를 검색하고 3 개의 연속 된 0과 그 다음 2 개의 연속 0을 만들고 싶습니다. 프로그램을 실행 한 후 콘솔의 예는 다음과 같습니다.두 개의 서로 다른 배열에서 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; 
     } 
    } 
    } 
} 

이지만 순서가 연속되지 않습니다, 그러나 세 개의 0을 찾습니다. 왜 이것이 작동하지 않는 지 모르겠습니다. 고맙습니다.

+1

이것이 내 코드라면 println 문을 사용하여 오류를 격리하려고합니다. 또한 병렬 배열 생성을 피하고 대신 사용자 정의 클래스의 단일 객체에 각 데이터 행을 보관합니다. –

+0

CSV를 조작 할 필요가 있습니다. 값을 분리하여 서로 비교할 수있는 방법을 생각할 수 없었습니다. 나에게 보여줄 수있는 더 좋은 방법이 있습니까? –

+0

두 번째 루프에서 문제가 발생할 것으로 예상됩니다. i = size -1이 될 때까지 반복 한 다음 A [i + 1]과 A [i + 2]는 물론 B [i + 1]과 B [i + 2]를 모두 시도해보고 IndexOutOfBoundsException에서. 당신이 이것을 아직 보지 못한 이유는 단락 회로 평가와 A [size-1] = 0으로 프로그램을 실행하지 않았기 때문입니다. – twain249

답변

0

문제에 대한 간단하고 아마 더 효율적인 솔루션은 문자열의 각 문자가 배열의 요소 당신이 문자열 Astring 및 Bstring에있는이 배열 A와 B 변환하는 것입니다 : 즉

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 (색인) = 0, A (색인 + 1) = 0, ..., A (색인 + 4) = 1)을 찾고있는 패턴의 첫 번째 요소가됩니다.

관련 문제