检查两个数组

时间:2017-01-09 17:23:04

标签: java matrix random coordinates

我需要创建一个方法,它获得两个数组(相同的长度),它们的值代表2d矩阵的x轴和y轴坐标。我需要检查同一点的重复条目(x和y是相同的)。

该程序的想法是:生成随机矩阵,其中硬币用1和0表示。用户输入方阵的大小。然后他输入他将尝试在包含值1的矩阵中猜测的点数。

我必须检查相同x和y轴(相同点)的重复条目,以便用户无法获得两次或更多次“找到”相同硬币的点数。我目前将所有坐标分别设置为两个数组..如果有更好的方法让我做这个检查会很棒:)请帮助

import java.util.Random; import java.util.Scanner;

public class myClass {
    public static void main(String[] args) {
        Scanner vhod = new Scanner(System.in);

        System.out.print("Enter dimension: ");
        int dimenzija = vhod.nextInt(), vrednost=0;

        char[][] polje = generirajMatriko(dimenzija);
        izrisMatrike(polje);

        //finding the sum of all coins values
        for(int i=0; i<dimenzija; i++)
            for(int j=0; j<dimenzija; j++)
                if(polje[i][j]=='z')
                    vrednost += 2;
                else if(polje[i][j]=='s')
                    vrednost += 1;


        System.out.print("\nTočke: " + vrednost);

        System.out.print("\nVnesi število točk, ki jih boš iskal: ");
        int st_tock = vhod.nextInt(), x, y, vrednost_najdenih=0;

        int[] xsi = new int[st_tock];
        int[] yni = new int[st_tock];

        for(int i=0; i<st_tock; i++) {
            System.out.print("\nVnesi stolpec " + (i+1) + ". točke: ");
            x = vhod.nextInt();
            xsi[i] = x;
            if(x>dimenzija) {
                System.out.print("\nZaključili ste z igro in izgubili vse kovance!");
                vrednost_najdenih = 0;
                break;
            }
            System.out.print("Vnesi vrstico " + (i+1) + ". točke: ");
            y = vhod.nextInt();
            yni[i] = y;
            if(y>dimenzija) {
                System.out.print("\nZaključili ste z igro in izgubili vse kovance!");
                vrednost_najdenih = 0;
                break;
            }
            else {
                if(polje[y-1][x-1]=='z')
                    vrednost_najdenih += 2;
                else if(polje[y-1][x-1]=='s')
                    vrednost_najdenih += 1;
            }
        }       //ČE STA TA X IN TA Y ŽE BILA V KOMBINACIJI VNEŠENA IN GA NE ŠTEJE... POGOJ PRED PRIŠTEVANJEM?..MORA SHRANJEVATI ELEMENTE V NPR     2     POLJA..X-SI IN Y-NI
        System.out.print("\nVrednost najdenih kovancev: " + vrednost_najdenih);
    }

    static char[][] generirajMatriko(int dimenzija) {
        char[] kovanci = {'z', 's', 'o'};
        char[][] polje = new char[dimenzija][dimenzija];

        //deklaracija randoma
        Random rand = new Random();

        for(int i=0; i<dimenzija; i++)
            for(int j=0; j<dimenzija; j++)
                polje[i][j] = kovanci[rand.nextInt(kovanci.length)];

        //vračanje te matrike glavnemu programu
        return polje;
    }

    static void izrisMatrike(char[][] polje) {
        //izpis matrike
        System.out.print("Generirana matrika: \n");
        for(int i=0; i<polje.length; i++) {
            for(int j=0; j<polje.length; j++) {
                System.out.print("" + polje[i][j]);
                if(j!=((polje.length)-1)) //brez izpisa presledka na koncu vrstice
                    System.out.print(" ");
            }
            if(i!=((polje.length)-1)) //brez izpisa nove vrstice ob koncu izpisa matrike          //RAZMISLI, KER TO DRUGJE NIMAŠ-.-
                System.out.print("\n");
        }
        System.out.print("\n");
    }
}    

1 个答案:

答案 0 :(得分:1)

不是将坐标存储在两个单独的数组中,而是使用包含x和y的类Point。如果您不想自己编写,可以使用:

import java.awt.Point;

然后,您只需使用Set<Point>即可保留所有独特点。

    Set<Point> xsiyni = new HashSet<>();

可以轻松检测到重复项...只需确保Point类实现equalshashCode方法,否则无法正常工作。

    Point p = new Point(x,y);
    if(!xsiyni.add(p)) {
        System.out.println("duplicate");
    }

面向对象设计是Java方式。