2017-01-09 49 views
-3

我需要製作一個方法,它獲取兩個數組(相同長度),它們的值表示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"); 
    } 
}  
+0

這是一項任務嗎?你的代碼在哪裏? –

+0

顯示已經實現的代碼,然後詢問可能出錯的地方,這看起來像是想要解決的作業。 –

+3

歡迎來到Stack Overflow!請參考[遊覽](http://stackoverflow.com/tour),環顧四周,閱讀[幫助中心](http://stackoverflow.com/help),特別是[我該如何問一個好問題?](http://stackoverflow.com/help/how-to-ask)和[我可以問什麼問題?](http://stackoverflow.com/help/on-topic)。從第二個環節來看:「提出作業幫助的問題必須包括您迄今爲止解決問題所做的工作的總結,並描述您解決問題的難度。」 –

回答

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的方式。

+0

背景這個好建議:[反模式:平行集合](https://codeblog.jonskeet.uk/2014/06/03/anti-pattern-parallel-collections/)。 –