2017-01-09 10 views
-3

Мне нужно сделать метод, который получает два массива (одинаковая длина), а их значения представляют координаты оси x и y матрицы 2d. Мне нужно проверить дубликаты записей одной и той же точки (x и y одинаковы).Проверка одинаковых значений в двух массивах

Идея программы: случайная матрица генерируется с монетами, представленными 1 и 0. Пользователь вводит размер квадратной матрицы. Затем он вводит количество очков, которые он попытается угадать в матрице, которые содержат значение 1.

Я должен проверить дублирующие записи одной и той же оси x и y (одинаковые точки), чтобы пользователь не мог получить очки для того, чтобы «найти» одну и ту же монету два или более раз. В настоящее время у меня есть все координаты в двух отдельных массивах. Если есть лучший способ для меня сделать это, это будет здорово :) PLS help

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"); 
    } 
}  
+0

Это задание? где ваш код? –

+0

Покажите свой код, который уже реализован, а затем спросите, что может быть неправильно, это выглядит как домашнее задание, которое вы хотите разрешить. –

+3

Добро пожаловать в переполнение стека! Пожалуйста, примите [тур] (http://stackoverflow.com/tour), осмотритесь и прочитайте [справочный центр] (http://stackoverflow.com/help), в частности [Как я могу спросить хороший вопрос?] (http://stackoverflow.com/help/how-to-ask) и [Какие темы можно задать здесь?] (http://stackoverflow.com/help/on-topic). Из этой второй ссылки: «Вопросы, требующие помощи в домашних заданиях, должны содержать резюме работы, которую вы сделали до сих пор, для решения проблемы, и описание проблемы, которую вы решаете». –

ответ

1

Вместо сохранения координат в двух отдельных массивах, вы используете класс Point, который содержит как x, так и y. Если вы не хотите, чтобы написать свой собственный, вы можете использовать:

import java.awt.Point; 

Тогда вы просто использовать Set<Point> держать все свои уникальные точки.

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

Дубликаты можно легко обнаружить ... только убедитесь, что класс реализует точка equals и hashCode методы или это не будет работать.

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

Объектно-ориентированный дизайн - это Java-способ.

+0

Фон для этого хорошего предложения: [Анти-шаблон: параллельные коллекции] (https://codeblog.jonskeet.uk/2014/06/03/anti-pattern-parallel-collections/). –