您需要做的就是確保組合(a,b),(c,d)等是唯一的,這樣您的便士也是唯一的。一個非常簡單的方式來獲得獨特的對一個5x5的一分錢陣列(這是我認爲你正在努力實現的)是:
public static boolean checkIfComboExists(ArrayList<int[]> map,int[] combo){
for(int i = 0; i < map.size(); i++){
int[] elem = map.get(i);
if(elem[0] == combo[0] && elem[1] == combo[1]){
return true;
}
}
return false;
}
public static void main(String[] args){
int[][] Parray = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}};
Random gen = new Random();
ArrayList<int[]> map = new ArrayList<int[]>();
while (map.size() < 5){
int x = gen.nextInt(5);
int y = gen.nextInt(5);
int[] combo = {x,y};
if(!checkIfComboExists(map,combo)){
map.add(combo);
}
}
int newpenny1 = Parray[map.get(0)[0]][map.get(0)[1]];
int newpenny2 = Parray[map.get(1)[0]][map.get(1)[1]];
int newpenny3 = Parray[map.get(2)[0]][map.get(2)[1]];
int newpenny4 = Parray[map.get(3)[0]][map.get(3)[1]];
int newpenny5 = Parray[map.get(4)[0]][map.get(4)[1]];
System.out.println(newpenny1);
System.out.println(newpenny2);
System.out.println(newpenny3);
System.out.println(newpenny4);
System.out.println(newpenny5);
}
如何不重複代碼行?你需要使用循環。我也會把單元格座標放到某種數組中(2列,5行,每行是一對)。在每個循環獲得每對隨機值後,檢查已存在於陣列中的那些循環,如果它已經存在,則重新滾動。 – tnw
好吧,當將5個不同的值放入10個變量中時,您無法避免重複某些操作。只要'(c,d)'不重複'(a,b)'等,'b'和'c'是否可以重複'a'? –
另外,即使是從Parray的另一個單元中取出,'penny2'是否有可能重複'penny1'?如果是這樣,這是允許的嗎?換句話說,2D數組可能包含複製品? –