2016-05-03 43 views
-1

最後のコード行は、エラーp1を解決できません。私はこれが範囲にないことによると信じていますが、私はこの問題を解決する方法がわかりません。ありがとうございました。java変数を解決できません

switch (Player1) 
{ 
    case "Human": 
    { 
     HumanPlayer p1 = new HumanPlayer(sc, theGame); 
     break; 
    } 
    case "Simple": 
    { 
     SimpleComputerPlayer p1 = new SimpleComputerPlayer(); 
     break; 
    } 
    case "Random": 
    { 
     RandomComputerPlayer p1 = new RandomComputerPlayer(); 
     break; 
    } 
    case "Expert": 
    { 
     ExpertPlayer p1 = new ExpertPlayer(); 
     break; 
    } 
}                
p1.setMySymbol(SquareStatus.CROSS); 
+0

'p1'は' case'ブロックの外側では不明です。 'switch'の前に宣言してください。 – Berger

+0

はブロックスコープ外にある変数とは別に、p1を可変オブジェクトとして定義する良い方法です。おそらく、プレーヤータイプはすべての「Player」タイプのすべての子孫ですが、それぞれが潜在的に異なるメソッドを持つようにこれを維持することは苦痛になります。 – Jonathon

答えて

0

ケース内にHumanPlayerを定義しました。スイッチの外側に定義してください

1

Player p1をスイッチの外に宣言してください。

Player p1; 
switch (Player1) {...} 
if(p1 != null) p1.setMySymbol(SquareStatus.CROSS); 
+0

これが完了すると、「プレーヤーはタイプに解決できません」というエラーが表示されます。何かアドバイス? – Matt

+0

@Mattはい、存在しません。あなたのスーパークラスはそのように名付けられたと思いました。使用しているスーパークラス名に変更してください。 'ExpertPlayer'、' HumPlayer'などが継承するクラスです。 –

+0

私は今、そこに行っていると思うけど、今は重複する変数について不平を言っている。 – Matt

0

あなたは{}を使用すると、追加のスコープレベルを作成している関数内で使用し、スコープで定義された任意のローカル変数がスコープの外見えません。

これらの行で何かをしようとしておよそ

public static Object getPlayer() 
    { 
     String Player1 = "Human"; 


     switch (Player1) { 
      case "Human": { 
       return new HumanPlayer(); 

      } 
      case "Simple": { 
       return new SimpleComputerPlayer(); 

      } 
      case "Random": { 
       return new RandomComputerPlayer(); 

      } 
      case "Expert": { 
       return new ExpertPlayer(); 

      } 

     } 
     return null; 
    } 

多分

worker.getPlayer().setMySymbol(SquareStatus.CROSS); 

はどこか

obj instance of HumanPlayer 

をしなければならないかもしれないもの

0

関連する問題