试图从数组中的向量中找到模式

时间:2017-01-10 19:10:22

标签: java

我正在学习Java,我有这个练习,我需要从矩阵中的向量中找到一个模式,然后将找到模式的行数复制到另一个向量。

我试图将矩阵的每一行复制到另一个向量,然后将其与模式进行比较,但它只保存找到模式的第一行

package exercise;

import java.io.*;
import java.util.Locale;
import java.util.Scanner;

public class Exercise {

    static final int M = 7;
    static final int N = 7;

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        Scanner fEnt = null;
        Scanner fEnt1 = null;
        PrintStream fSal = null;
        double[] pattern = new double[M];
        double[][] m = new double[N][N];
        double[] aux = new double[N];
        int[] res = new int[N];
        int i, ax, j, vLon, k, z, w = 0;
        boolean found, repeated;

        System.out.print("Enter matrix filename: ");
        String nomEnt = scanner.next();
        System.out.print("Enter pattern filename: ");
        String nomEnt1 = scanner.next();
        System.out.print("Enter new filename: ");
        String nomSal = scanner.next();

        try {

            fEnt = new Scanner(new File(nomEnt));
            fEnt.useLocale(Locale.US);
            fEnt1 = new Scanner(new File(nomEnt1));
            fEnt1.useLocale(Locale.US);
            fSal = new PrintStream(new File(nomSal));

            i = 0;
            ax = 0;

            while (fEnt1.hasNext() && i < M) {
                pattern[i] = fEnt1.nextDouble();
                i++;
            }

            vLon = i;

            j = 0;
            i = 0;

            while (fEnt.hasNext() && i < N) {
                while (fEnt.hasNext() && j < N) {
                    m[i][j] = fEnt.nextDouble();
                    j++;
                }

                i++;

            }

            k = 0;

            for (i = 0; i < N; i++) {
                repeated = false;
                for (j = 0; j < N; j++) {
                    aux[j] = m[i][j];
                }

                z = 0;
                found = true;
                while (z <= N - vLon) {
                    j = 0;
                    while (j < vLon && found) {
                        if (aux[z + j] != pattern[j]) {
                            found = false;
                        }
                        j++;
                    }
                    if (found) {
                        repeated = true;
                    }
                    z++;
                }
                if (repeated) {
                    res[k] = i;
                    k++;
                }

                w = k;

            }
            if (w == 0) {
                System.out.println("The pattern wasn't found in the matrix");
            } else {

                for (i = 0; i < w; i++) {
                    fSal.print(String.valueOf(res[i]) + "\t");
                }

                fSal.println();

                System.out.println("The vector has been saved.");
            }

        } catch (Exception e) {
            System.out.println("Exception: " + e.toString());

        } finally {

            if (fEnt != null) {
                fEnt.close();
            }

            if (fSal != null) {
                fSal.close();
            }

        }

    }

}

例如,如果它读取矩阵

5 2 1 2 3 4
5 3 5 1 2 3
1 2 5 2 4 6
6 7 3 5 1 2
1 2 3 6 8 4
4 5 3 2 4 6

然后,如果模式为1 2 3,则应保存以下向量1 2 5

1 个答案:

答案 0 :(得分:1)

这是基本调试的问题。因此,TL; DR使用IDE的调试器。

长版:

如果您有IDE,请使用其调试功能。 Eclipse和IntelliJ都有很好的调试支持和大量关于如何操作的在线教程。

调试代码时发现的错误(不是所有内容):

  1. 您的矩阵只读入第一行。第2,第3等行都是0&#39; s。此外,您将N和M设置为7,但它们应为6。
  2. - 提示 - 逐步完成它并观察在你增加i之后发生的事情,在你下一次进入循环j时。行~58

    1. 你发现了&#39;你做错了什么?标志,导致程序在最初失败后退出检查。线~70
    2. - 提示 - 在这里仔细检查你的逻辑 - 我不认为&#39;发现&#39;表示您认为在代码中的含义