2012-12-02 2 views
2

byte color으로 전환하면 색상을 유지해야합니다 (예 : 빨간색 또는 녹색). show() 방법의 결과 분류하고이 색상을 설명하기 위해 스위치를 사용해야합니다 (같은 다른 변종 : 빨강 - 파랑, 녹색 - 빨강 등) *은 좋은 방법에문자열 및 문자열을 바이트

public class Candy { 

    //fields 
    int quantity; 
    byte color; 
    double price; 

    //constructor 
    Candy(int quantity, byte color, double price) 
    { 
     this.quantity = quantity; 
     this.color = color; 
     this.price = price; 
    } 

    //this method have to show class fields 
     public void show(String colors) 
    { 
     switch(color) 
     { 
     case 1: colors = "red"; 
     case 2: colors = "green"; 
     case 3: colors = "blue"; 
    } 

      //tried to convert 
    //String red = "Red"; 
    //byte[] red1 = red.getBytes(); 
    //String green = "Green"; 
    //byte[] green1 = green.getBytes(); 



    public static void main(String[] args) 
    { 
    //program 
    } 
} 

가 나는 건가요 열거 사용할 수 없습니다? 문자열을 바이트로 유지하는 방법? 감사합니다

+0

당신이 한 바이트에서 이러한 세 가지 색상의 모든 가능한 조합을 인코딩 뜻 이것은 당신의 show() 방법? – bellum

+0

귀하의 질문은 무엇입니까? –

+0

@bellum 해당 바이트 (색상)의 모든 단일 비트는 하나의 색상을 저장해야합니다. – Fastkowy

답변

1

byte에 당신의 방법에 다음

private static Map<Byte, String> map = new HashMap<Byte, String>() {{ 
    put(1, "red"); 
    put(2, "green"); 
    etc 
}}; 

:

더 나은 선택은지도를 사용하여 문자열을 보는 것입니다. 제 결정에서 첫 번째 위치 (바이트의 이진 표현)가 "파란색"색, 두 번째 - "녹색"및 "3 번째 -"빨간색 "이라고 명시했습니다. 즉, 우리가 001 인 경우 파란색을 나타냅니다. 101 - 빨간색 - 파란색 색상 등. 방법의

public void show() 
{ 
    switch (color & 4){ 
     case 4: 
      System.out.print("red "); 
     default: 
      switch (color & 2){ 
       case 2: 
        System.out.print("green "); 
       default: 
        switch (color & 1){ 
         case 1: 
          System.out.print("blue"); 
        } 
      } 
    } 
    System.out.println(); 
} 

콜링 :

new Candy(1, (byte)7, 10d).show(); //prints "red green blue" 
+0

switch 문을 사용해야합니다./StringBuilder를 사용하지 않고이 작업을 수행 할 수있는 방법이 있습니까? 어쨌든 감사합니다 ! – Fastkowy

+0

답변이 업데이트되었습니다. 에픽 숙제 :) – bellum

+0

그것은 당신 propably 히 알고 있습니다 ... 교사 ㅎ;) 고마워! – Fastkowy

3

당신은 아주 작은 할 많은에 대한 코드를 만드는 모든 경우에 break을 필요로하기 때문에 스위치가 좋은 선택이 아니다 : 많은 라인을 가지고,

switch (color) { 
    case 1: colors = "red"; break; 
    ... etc 

을 또한이 있음을 의미 더 많은 버그 범위. 하지만 데이터를 저장하기 위해 기본적으로 코드를 사용하고 있습니다. 당신이 8 개 가능한 조합을 저장할 수 있습니다 단순히

return map.get(color); 
관련 문제