[英]how to compare elements of array with another array in java
邏輯是設定游戲
boolean isset = false;
三個卡陣列,每個陣列具有4個不同的屬性
String[] arraycard1 = {"1","open","red","diamond"};
String[] arraycard2 ={"1","solid","green","diamond"};
String[] arraycard3 ={"1","open","purple","oval"};
一組是三張牌的任意組合,其中,每張三張牌的每個屬性都相同,或者所有三張牌的屬性不同
我需要檢查是否設置了這套3張卡。
for (int i=0 ; i<arraycard1.length ; i++){
檢查屬性是否全部相同或全部不同
if ((arraycard1[i].equalsIgnoreCase(arraycard2[i]) && arraycard1[i].equalsIgnoreCase(arraycard3[i]) && arraycard2[i].equalsIgnoreCase(arraycard3[i]))||(arraycard1[i]!=arraycard2[i] && arraycard1[i]!=arraycard3[i] && arraycard2[i]!=arraycard3[i])){
isset = true;
}
}
為什么不使用類並覆蓋equals方法?
import java.awt.Color;
public class Card{
int number;
String state;
Color color;
String suit;
public Card(int number, String state, Color color, String suit) {
super();
this.number = number;
this.state = state;
this.color = color;
this.suit = suit;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public Color getColor() {
return color;
}
public void setColor(Color color) {
this.color = color;
}
public String getSuit() {
return suit;
}
public void setSuit(String suit) {
this.suit = suit;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((color == null) ? 0 : color.hashCode());
result = prime * result + number;
result = prime * result + ((state == null) ? 0 : state.hashCode());
result = prime * result + ((suit == null) ? 0 : suit.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Card other = (Card) obj;
if (color == null) {
if (other.color != null)
return false;
} else if (!color.equals(other.color))
return false;
if (number != other.number)
return false;
if (state == null) {
if (other.state != null)
return false;
} else if (!state.equals(other.state))
return false;
if (suit == null) {
if (other.suit != null)
return false;
} else if (!suit.equals(other.suit))
return false;
return true;
}
}
如果使用的是Eclipse IDE,則所有這些都是自動生成的,只需聲明4個字段即可。
從菜單:
然后,您可以創建Card對象:
Card card1 = new Card(1, "open", Color.RED, "diamond");
Card card2 = new Card(1, "solid", Color.GREEN, "diamond");
boolean sameCard = card1.equals(card2); //false
您還可以創建CardUtils
類,該類可以檢查一些基本組合:
public class CardUtils{
public static boolean isPair(Card a, Card b){
return a.getNumber() == b.getNumber() && //Same number, different suit
!a.getSuit().equals(b.getSuit());
}
public static boolean isFlush(Card.. cards){
String suit = carsds[0].getSuit();
for(Card c: cards){
if(!c.getSuit().equals(suit))
return false;
return true;
}
public static boolean isPoker(Card..cards){
if(cards.lenght!=5) return false;
for(int i = 0; i < 2; i++){
int count = 0;
for(Card c1: cards)
if(isPair(cards[i], c1)) count++;
if(count==3) return true; //There are other 3 cards with same number but different suit in hand -> Poker!
}
return false;
}
}
並使用它
Card card1 = new Card(1, "open", Color.RED, "diamond");
Card card2 = new Card(1, "solid", Color.GREEN, "spears");
Card card3 = new Card(2, "solid", Color.RED, "diamond");
CardUtils.isPair(card1, card2); //True
CardUtils.isPair(card1, card3); //False
CardUtils.isFlush(card1, card2, card3); //False
CardUtils.isFlush(card1, card3); //True
最后但並非最不重要的一點是,您可以使用Enums處理西裝:
public enum Suit{
DIAMONDS,
HEARTS,
SPADES,
CLUBS
}
Card card1 = new Card(1, "open", Color.RED, Suit.DIAMONDS);
您可以使用ArrayaList進行更快的比較。將字符串數組分配給Array列表並使用.equals()? 方法
這是一個例子:
String[] array1 = {"1", "2", "3"};
String[] array2 = {"1", "2", "3"};
String[] array3 = {"1", "2", "3"};
List<List<String>> lst1 = new ArrayList<>();
lst1.add(Arrays.asList(array1));
List<List<String>> lst2 = new ArrayList<>();
lst2.add(Arrays.asList(array2));
List<List<String>> lst3 = new ArrayList<>();
lst3.add(Arrays.asList(array3));
System.out.println(lst1.equals(lst2) && lst1.equals(lst3)); //prints true
您可以嘗試這樣的事情。
public static void main(String[] arraycard1,String[] arraycard2,String[] arraycard3) {
String[] arraycard1 = {"1","open","red","diamond"};
String[] arraycard2 ={"1","solid","green","diamond"};
String[] arraycard3 ={"1","open","purple","oval"};
System.out.println("Is array 1 equal to array 2?? "
+Arrays.equals(arraycard1, arraycard2));
System.out.println("Is array 1 equal to array 3?? "
+Arrays.equals(arraycard1, arraycard3));
System.out.println("Is array 2 equal to array 3?? "
+Arrays.equals(arraycard2, arraycard3));
}
結果
Is array 1 equal to array 2?? false
Is array 1 equal to array 3?? false
Is array 2 equal to array 3?? false
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.