그래서 "Six of Hearts"와 같은 문자열을 가져 와서 번호 (6)와 소송 (하트)의 값을 기준으로 정수 배열로 변환하는 카드 프로젝트를 만들어야합니다. 나는 "6"이라는 문자열과 6을 출력하는 자바를 얻는 방법에 관해서 벽을 치고있다. 힌트는?자바에서 문자열을 int로 변환하는 방법은 무엇입니까?
편집 : 클럽 = 0; 스페이드 = 3; 하트 = 2; 다이아몬드 = 1;
그래서 "Six of Hearts"와 같은 문자열을 가져 와서 번호 (6)와 소송 (하트)의 값을 기준으로 정수 배열로 변환하는 카드 프로젝트를 만들어야합니다. 나는 "6"이라는 문자열과 6을 출력하는 자바를 얻는 방법에 관해서 벽을 치고있다. 힌트는?자바에서 문자열을 int로 변환하는 방법은 무엇입니까?
편집 : 클럽 = 0; 스페이드 = 3; 하트 = 2; 다이아몬드 = 1;
이 일반적으로 당신이 열거를 사용하는 것이 뭔가 :
enum Suit{
CLUBS ("clubs", 0),
DIAMONDS("diamonds", 1),
HEARTS ("hearts", 2),
SPADES ("spades", 3);
private final String name;
private final int value;
private static final HashMap<String, Suit> suitByName;
static {
suitByName = new HashMap<String, Suit>();
for (Suit s: Suit.values()){
suitByName.put(s.name, s);
}
}
Suit(String name, int value){
this.name = name;
this.value = value;
}
public int getValue(){
return this.value;
}
public static Suit fromString(String card){
return suitByName.get(card.toLowerCase());
}
}
코드 생략 카드 값. 같은 접근법을 따른다.
지도를 사용할 수 있습니다. 또한이를 수행하기 위해 사례 또는 기타 진술을 사용할 수 있습니다.
HashMap<String, Integer> numbers = new HashMap<String, Integer>();
numbers.put("ace", 1);
numbers.put("two", 2);
numbers.put("three", 3);
numbers.put("four", 4);
numbers.put("five", 5);
numbers.put("six", 6);
numbers.put("seven", 7);
numbers.put("eight", 8);
numbers.put("nine", 9);
//etc...
HashMap<String, Integer> suits = new HashMap<String, Integer>();
suits.put("clubs", 0);
suits.put("spades", 3);
suits.put("hearts", 2);
suits.put("diamonds", 1);
numbers.get("zero");//use this to access the number
suits.get("spades");//use this to access the suit
대소 문자 구분은 ... 그래서 당신은 값에 액세스하기 위해 통과 어떤 키와 일치하는지 확인 여기에 중요합니다
OP가'String.toLowerCase'를 사용해야 함을 언급 할 수 있습니다. –
가이 작업을 수행 할 수있는 여러 가지 방법이 있지만, 제 생각에 가장 간단한 방법은 것 문자열 키가 숫자, 즉 "six"에 대한 단어 인 곳의 맵을 가지며 리턴 된 값은 정수 값입니다.
그래서 코드를 당신이 자리를 필요할 때마다 다음, 당신이 numMap.get("two")
가장 인기있는 스페이드 오브 더 스페셜? –
@ElliottFrisch 절대적으로, 당신은 그것을 사용한 적이 없습니까? – CBredlow
@C 브레드 나는 항상 사용합니다. 이제이 * 포커 *의 규칙을 다시 말해 보시겠습니까? –
을이
HashMap<String, Integer> numMap = new HashMap<String, Integer>();
numMap.put("two", 2);//repeat for all numbers
과 같을 것이다 당신은 조금 그것을 혼합 할 수 있습니다.
이제 Number를 실제 숫자로 변환하면됩니다. 이는 Switch
또는 Map
에 의해 달성 될 수 있습니다.
Shape를 모양을 나타내는 실제 숫자로 변환하는 경우에도 마찬가지입니다.
Integer.parseInt(String)
을 사용할 수 있다고 생각합니다. 배열 내 요소의 인덱스를 찾는 기반으로
아니요. Integer.parseInt ("Six")'는 작동하지 않습니다. –
또 다른 방법 :
String str = "Six of Hearts"; //input string
String[] numbers = new String[]{"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "jack", "queen", "king", "ace"};
String[] suits = new String[]{"clubs", "diamonds", "hearts", "spades"};
String[] name = str.split(" ");
if (name.length != 3) throw new Exception("Improperly formatted card name");
int value = Arrays.asList(numbers).indexOf(name[0]);
int suit = Arrays.asList(suits).indexOf(name[2]);
열거는 먼저 CardValue 등의 열거를 생성
See Documentation. .. 이런 종류의 시나리오에 매우 유용합니다. ACE TWO..
enum CardValue {
ACE(1),TWO(2),THREE(3),FOUR(4),
FIVE(5),SIX(6),SEVEN(7),EIGHT(8),
NINE(10),TEN(10),JACK(10),QUEEN(10),KING(10);
private int cardValue;
private CardValue (int cardValue){
this.cardValue = cardValue;
}
public String toString(){
return String.valueOf(cardValue);
}
}
둘째 CardSuit 등의 열거를 만듭니다.HEARTS CLUBS..
enum CardSuit {
DIAMONDS(1),HEARTS(2),SPADES(3),CLUBS(4);
private int cardSuit;
private CardSuit(int cardSuit){
this.cardSuit = cardSuit;
}
public String toString(){
return String.valueOf(cardSuit);
}
}
그런 다음 시도해보십시오.
public static void main(String[] args){
String inputedCard = "Six of Hearts";
//Converts inputed card to uppercase then split it.
//so the expected value is aInputedCard[0] = SIX & aInputedCard[1] = HEARTS
String [] aInputedCard = inputedCard.toUpperCase().split(" OF ");
//So you just need to Verify if the input is in correct format to avoid exceptions
System.out.println("["+CardValue.valueOf(aInputedCard[0])+"]["+CardSuit.valueOf(aInputedCard[1])+"]");
}
switch 문을 사용하십시오. – BlackHatSamurai
어려움이 있습니다. 이 단순한 원인으로 소문자 값의'Map'을 생성하십시오. 그런 다음'Map.get'을 사용하면됩니다. –
"* 숫자 *"에이스 또는 킹의 가치는 무엇입니까? –