2014-12-01 4 views
0

그래서 "Six of Hearts"와 같은 문자열을 가져 와서 번호 (6)와 소송 (하트)의 값을 기준으로 정수 배열로 변환하는 카드 프로젝트를 만들어야합니다. 나는 "6"이라는 문자열과 6을 출력하는 자바를 얻는 방법에 관해서 벽을 치고있다. 힌트는?자바에서 문자열을 int로 변환하는 방법은 무엇입니까?

편집 : 클럽 = 0; 스페이드 = 3; 하트 = 2; 다이아몬드 = 1;

+0

switch 문을 사용하십시오. – BlackHatSamurai

+2

어려움이 있습니다. 이 단순한 원인으로 소문자 값의'Map '을 생성하십시오. 그런 다음'Map.get'을 사용하면됩니다. –

+1

"* 숫자 *"에이스 또는 킹의 가치는 무엇입니까? –

답변

2

이 일반적으로 당신이 열거를 사용하는 것이 뭔가 :

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()); 
} 
} 

코드 생략 카드 값. 같은 접근법을 따른다.

3

지도를 사용할 수 있습니다. 또한이를 수행하기 위해 사례 또는 기타 진술을 사용할 수 있습니다.

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 

대소 문자 구분은 ... 그래서 당신은 값에 액세스하기 위해 통과 어떤 키와 일치하는지 확인 여기에 중요합니다

+3

OP가'String.toLowerCase'를 사용해야 함을 언급 할 수 있습니다. –

1

가이 작업을 수행 할 수있는 여러 가지 방법이 있지만, 제 생각에 가장 간단한 방법은 것 문자열 키가 숫자, 즉 "six"에 대한 단어 인 곳의 맵을 가지며 리턴 된 값은 정수 값입니다.

그래서 코드를 당신이 자리를 필요할 때마다 다음, 당신이 numMap.get("two")

+1

가장 인기있는 스페이드 오브 더 스페셜? –

+0

@ElliottFrisch 절대적으로, 당신은 그것을 사용한 적이 없습니까? – CBredlow

+0

@C 브레드 나는 항상 사용합니다. 이제이 * 포커 *의 규칙을 다시 말해 보시겠습니까? –

0

을이

HashMap<String, Integer> numMap = new HashMap<String, Integer>(); 
numMap.put("two", 2);//repeat for all numbers 

과 같을 것이다 당신은 조금 그것을 혼합 할 수 있습니다.

  1. 입력 문자열을 문자열 배열로 나눕니다. 결과에서
  2. 인덱스 셀 0의 배열에는 숫자가 포함됩니다. C. 결과에서
  3. 인덱스 셀 2의 배열에는 도형이 포함됩니다.

이제 Number를 실제 숫자로 변환하면됩니다. 이는 Switch 또는 Map에 의해 달성 될 수 있습니다.

Shape를 모양을 나타내는 실제 숫자로 변환하는 경우에도 마찬가지입니다.

-2

Integer.parseInt(String)을 사용할 수 있다고 생각합니다. 배열 내 요소의 인덱스를 찾는 기반으로

+3

아니요. Integer.parseInt ("Six")'는 작동하지 않습니다. –

0

또 다른 방법 :

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]); 
0

열거는 먼저 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])+"]"); 

    } 
관련 문제