Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在两个不同的数组中查找3个相等的连续数。JAVA_Java - Fatal编程技术网

在两个不同的数组中查找3个相等的连续数。JAVA

在两个不同的数组中查找3个相等的连续数。JAVA,java,Java,我正在编写一个程序,读取一个CSV文件,并将每列存储到一个单独的数组中。稍后我要搜索数组A和B,并连续搜索3个0,然后再搜索后面的2个0。运行程序后的控制台示例如下: 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.31

我正在编写一个程序,读取一个CSV文件,并将每列存储到一个单独的数组中。稍后我要搜索数组A和B,并连续搜索3个0,然后再搜索后面的2个0。运行程序后的控制台示例如下:

                                            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;
      }
    }
  }
}
包装;
导入java.io.*;
导入java.util.Scanner;
公开课阅读{
公共静态void main(字符串[]args)引发FileNotFoundException{
int size=0;
double[]打开=新的double[1000000];
double[]低=新的double[1000000];
双[]高=新双[1000000];
double[]close=新的double[1000000];
int[]A=新int[1000000];
int[]B=新int[1000000];
int零计数=0;
扫描仪读取=新扫描仪(新文件(“C:/Users/Eric/Documents/Data Structures/euruds.csv”);
read.nextLine();
while(read.hasNextLine()){
字符串[]n=read.nextLine().split(“,”);
open[size]=Double.parseDouble(n[0]);
低[size]=Double.parseDouble(n[1]);
高[size]=Double.parseDouble(n[2]);
close[size]=Double.parseDouble(n[3]);
A[size]=Integer.parseInt(n[4]);
B[size]=Integer.parseInt(n[5]);
大小++;
}
对于(int i=0;i

在我运行之后,它运行得很好,但是它找到了3个0。然而,顺序不是连续的。我不知道这为什么不起作用。谢谢。

解决您的问题的一个更简单、也许更有效的方法是将这些数组A和B转换为字符串Astring和Bstring,其中字符串中的每个字符都是数组中的一个元素:即如果

A={0,0,0,1,1,1,1,0,...};
然后是:

Astring="00011110...";
一旦你有了这些,就可以在一行中找到你想要的东西:

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

如果index=-1,则没有要查找的序列0,0,0,1,1。否则,A(index)将是您要查找的模式中的第一个元素(即A(index)=0,A(index+1)=0,…,A(index+4)=1)。

如果这是我的代码,我会在其中添加println语句以尝试隔离错误。我还试图避免创建并行数组,而是将每一行数据保存在自定义类的单个对象中。我需要CSV可操作,我想不出一种方法来分离这些值以相互比较。你有没有更好的方法告诉我?我预见到你的第二个循环有问题。循环直到i=size-1,然后尝试查看A[i+1]和A[i+2],以及B[i+1]和B[i+2],所有这些都将导致
索引自动边界异常。你还没有看到这一点的原因是因为短路评估和你还没有用[size-1]=0运行程序的事实。我认为@HovercraftFullOfEels的意思是你可以创建一个类,该类有
打开、低、高、关闭、A、,然后创建该类的1个数组,而不是创建6个包含基元的数组。然后,您可以创建一个构造函数,该构造函数接受由
split
函数创建的字符串数组,并生成类实例。@Eric:当然,创建您的对象,然后通过调用要比较的两个对象的getA()来比较列。getB()也是如此。或者,您可以为类提供一个同时比较a列和B列的方法,即compareAandB(…)。