2017-03-13 5 views
1

이 문제를 해결하는 데 문제가 있습니다. 문제의 이름을 인쇄 할 콘솔을 얻을 수 없습니다. 이것은 roshambo 게임을 만드는 프로그램입니다.콘솔에 올바른 이름을 표시하는 방법은 무엇입니까? Java

여기 내 코드입니다. 이 같은

public enum Roshambo { 

    rock { 
     public String toString() { 
      return "rock"; 
     } 
    }, 
    paper { 
     public String toString() { 
      return "paper"; 
     } 
    }, 
    scissors { 
     public String toString() { 
      return "scissors"; 
     } 
    } 
} 

public abstract class Player { 

    String name; 
    Roshambo value; 

    abstract Roshambo generateRoshambo(); 

    void setName(String name) { 
     this.name = name; 
    } 

    void setRoshambo(Roshambo value) { 
     this.value = value; 
    } 

    String getName() { 
     return name; 
    } 

    Roshambo getRoshambo() { 
     return value; 
    } 
} 

class Bart extends Player { 
    public Roshambo generateRoshambo() { 
     super.name = "Bart"; 
     return Roshambo.rock; 
    } 
} 


public class Lisa extends Player { 
    public Roshambo generateRoshambo() { 
     super.name = "Lisa"; 
     Random r = new Random(); 
     int ch = r.nextInt(3); 
     if (ch == 0) return Roshambo.rock; 
     else if (ch == 1) return Roshambo.paper; 
     else return Roshambo.scissors; 
    } 
} 

public class Player1 extends Player { 

    char value; 

    Player1(char value) { 
     this.value = value; 
    } 

    public Roshambo generateRoshambo() { 
     if (value == 'r') 
      return Roshambo.rock; 
     else if (value == 's') 
      return Roshambo.scissors; 
     else 
      return Roshambo.paper; 
    } 
} 

import java.util.Scanner; 

public class RoshamboApp { 
    public static void main(String args[]) { 

     char choice = 'y'; 
     char player; 

     Scanner s = new Scanner(System.in); 
     System.out.println("Welcome to the game of Roshambo"); 

     Bart b = new Bart(); 
     Lisa l = new Lisa(); 
     Player p = null; 

     String name; 
     System.out.println("Enter your name : "); 
     name = s.next(); 

     System.out.println("Would you like to play Bart or Lisa?(B/L):"); 
     player = s.next().charAt(0); 

     if (player == 'b') 
      p = b; 

     else if (player == 'l') 
      p = l; 

     while (choice != 'n') { 
      System.out.println("Rock, paper or scissors?(R/P/S)"); 
      char ch = s.next().charAt(0); 
      Player1 p1 = new Player1(ch); 
      System.out.println(name + ":" + p1.generateRoshambo()); 
      System.out.println(player + ":" + p.generateRoshambo()); 

      if (p1.generateRoshambo() == p.generateRoshambo()) 
       System.out.println("Draw!"); 

      else if (p1.generateRoshambo() == Roshambo.paper && p.generateRoshambo() == Roshambo.rock) 
       System.out.println(p1.getName() + "Wins"); 

      else if (p1.generateRoshambo() == Roshambo.paper && p.generateRoshambo() == Roshambo.scissors) 
       System.out.println(p.getName() + "Wins!"); 

      else if (p1.generateRoshambo() == Roshambo.scissors && p.generateRoshambo() == Roshambo.rock) 
       System.out.println(p.getName() + "Wins"); 

      System.out.println("Play again?(y/n):"); 
      choice = s.next().charAt(0); 
     } 
    } 
} 

콘솔 인쇄 아웃 : Roshambo의 게임에

에 오신 것을 환영합니다 이름 입력 : 는 바트 나 리사 (B/L)을 재생 하시겠습니까 션 : B 종이 B : 플레이 다시 nullWins 바위 (Y/N) : (R/P/S) 종이 숀 락, 종이 또는 가위? 내가

b : rock이 Bart : rock과 null로 승격되면 sean이 승리합니다. 예를 들어

public enum Roshambo { 
ROCK("rock"), ... other constants ; 

private final String stringRepresentation; 
private Roshambo(String stringRepresentation) { 
    this.stringRepresentation = stringRepresentation; 
} 

@Override 
public String toString() { return stringRepresentation; } 

: 모든

답변

1

첫째, 지나치게 복잡한 주변 코드, 여기에 같은있다.

메인에서 실제 문제에 관해서는 Player1 클래스가 필요한 것보다 10 배 복잡합니다. 사용자에게 "무엇을하고 싶니?"라고 물으십시오. 입력에 따라 Roshambo를 선택하십시오. 즉

:이 사람이 어떻게 든

  • 이 비슷하게 UserPlayer 또는 무언가로 재생기 클래스를 변경하려면 Roshambo 값을 계산을 나타 내기 위해 ComputerPlayer

    1. 변경하여 플레이어의 클래스를 추천 할 것입니다.

    짧은 이야기 : 귀하의 주요 문제는 너무 복잡한 일을하는 것입니다. 따라서 해결하려는 문제에 집중할 수 없습니다. 다른 예시;

    char playerSelection = ... coming from user 
    if (playerSelection == 'b') { 
        player = new Bart(); 
    } else { 
        player = new Lisa(); 
    } 
    

    같은 단일 문자로 명명 된 변수는 아무 것도 말하지 않습니다. 그들은 단지 당신이하려는 것을 혼란스럽게합니다.

    player = s.next().charAt(0); 
    ... 
    
    System.out.println(name + ":" + p1.generateRoshambo()); 
    System.out.println(player + ":" + p.generateRoshambo()); 
    

    당신이 선수의 이름을 인쇄해야합니다 : 그들은 재생할 플레이어의 바로 문자

  • 0

    귀하의 문제는 당신이 인쇄되어 플레이어,

    System.out.println(p.getName() + ":" + p.generateRoshambo()); 
    

    참고

    이 코드는 지나치게 복잡하기 때문에 동일한 작업을 더 적은 코드 행에서 훨씬 명확하게 수행 할 수 있습니다. 리팩토링을 살펴보십시오.

    관련 문제