0

我有一个要在 2 个类之间传递的值,但出现以下错误:

令牌“;”上的语法错误,从另一个类初始化调用值时预期

我有初始值的类

public class Game extends Activity implements OnClickListener{

    RandomMathQuestionGenerator question = new RandomMathQuestionGenerator();
    private static final String TAG= "Sudoku";

    public static final String KEY_DIFFICULTY = 
            "org.example.sudoku.difficulty";
    public static final int DIFFICULTY_NOVICE = 1;
    public static final int DIFFICULTY_EASY = 2;
    public static final int DIFFICULTY_MEDIUM = 3;
    public static final int DIFFICULTY_GURU = 4;

    public int value = 0;

    private GameView gameView;  

    public Game()
    {
       if (KEY_DIFFICULTY == String.valueOf(1))
        {
            value = 2; 
        }
        else if (KEY_DIFFICULTY == String.valueOf(2))
        {
            value = 3;        
        }
        else if (KEY_DIFFICULTY == String.valueOf(3))
        {
            value = 4;
        }
        else if (KEY_DIFFICULTY == String.valueOf(4))
        {
            value = 6;
        }
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate");    



    }
    @Override
    public void onClick(View v) 
    {           
          //code here       
    }
}

我称之为值的类

public class RandomMathQuestionGenerator {

Game num = new Game();
int number = 0;
number = num.Game(value);
//public int number = 0;
//number = num.Game(number); 


private static final int NUMBER_OF_QUESTIONS = 1;
    private static final int MIN_QUESTION_ELEMENTS = 2;
    private final int MAX_QUESTION_ELEMENTS = number;
    private static final int MIN_QUESTION_ELEMENT_VALUE = 1;
    private static final int MAX_QUESTION_ELEMENT_VALUE = 100;
    private final Random randomGenerator = new Random();    

    //rest of irrelevant code below
    }
4

3 回答 3

2

从长远来看,语法错误是无关紧要的。

在 Android 中,您必须使用 Intent 启动 Activity。(请参阅此开发人员指南文章。)当您要开始使用游戏时:

Intent intent = new Intent(this, Game.class);
startActivity(intent);

您还声明KEY_DIFFICULTYfinal(不可更改):

public static final String KEY_DIFFICULTY = "org.example.sudoku.difficulty";

因此,在以下任何一种情况下,您的 if-else 块都不会成立:

if (KEY_DIFFICULTY == String.valueOf(1))

并且要比较 Java 中的字符串,您必须使用equals()==会给出不准确的结果。(如何在 Java 中比较字符串?


如果您想将难度级别从一个 Activity 传递到另一个 Activity,请使用 Intent 的附加功能、public类变量或另一种方法,见:如何在 Android 应用程序中的 Activity 之间传递数据?


添加
您刚刚向您的问题添加了更多代码,并且您有循环逻辑。

- When you create RandomMathQuestionGenerator object, you will create a Game object
    - When you create Game object, you will create a RandomMathQuestionGenerator object
        - When you create RandomMathQuestionGenerator object, you will create a Game object
            - When you create Game object, you will create a RandomMathQuestionGenerator object
                - When you create RandomMathQuestionGenerator object, you will create a Game object
                    - When you create Game object, you will create a RandomMathQuestionGenerator object
                        - When you create RandomMathQuestionGenerator object, you will create a Game object
                            - When you create Game object, you will create a RandomMathQuestionGenerator object
                                - ...

这只会在您的应用抛出 StackOverflowException 时停止。

于 2013-03-04T21:15:07.720 回答
0
number = num.Game(value);

Game(int value)我在你的Game课上没有看到方法。你需要在你的类中创建这个方法:

public int Game(int value){
   //code
}

我也不确定你可以命名一个与你的类同名的方法。我假设它在签名中有一个返回值,这将是有效的,但无论如何使用与您的类相同的方法名称是不好的做法。

于 2013-03-04T21:14:42.670 回答
0

案例 - 在<init>

这是我修改后的建议代码RandomMathQuestionGenerator

public class RandomMathQuestionGenerator {
  private Game num;
  private int number;

  public RandomMathQuestionGenerator() {
    num = new Game();
    number = num.value;
    // Existing code here
  }
  // Existing code here
}

案例 - 在方法代码中

Game num = new Game();
int number = num.value;

出了什么问题:

  • public Game-public字段修饰符,不是变量修饰符,在方法代码中间无效。请注意,这final是一个有效的修饰符 - 这意味着重新分配变量是一个编译错误。
  • 使用占位符值创建数字,然后分配给它 -0永远不会使用
  • num 没有方法 Game,并且在这段代码中没有定义 value。value 是 Game 对象的一个​​属性,其中 num 是一个。我强烈建议重命名这个变量——也许gameInst会起作用。

概括

(进行中)

于 2013-03-04T21:14:49.713 回答