You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio Java开发猜数字App运行报错求助

报错原因
  • cannot resolve symbol guess:Java对大小写敏感,你在checkGuess()方法中定义解析后的数字变量时写的是int Guess(首字母大写),后续判断逻辑中使用的是全小写的guess,变量名不匹配,编译器无法识别。
  • 类成员private Button btnGuess置灰提示未使用:你在onCreate()方法中执行控件绑定时,写的是Button btnGuess = findViewById(R.id.btnGuess),这行代码会声明一个同名的局部变量,findViewById拿到的控件实例只赋值给了这个局部变量,类层面声明的成员变量btnGuess自始至终没有被赋值,因此IDE判定它未被使用。
  • 其他会导致运行失败的隐性问题:
    1. 代码第一行包名拼写错误,将package写为ckage,会直接导致编译失败
    2. onCreate()中连续调用了两次setContentView(),第一次绑定控件、设置点击事件后,第二次调用会直接替换当前加载的视图,之前绑定的控件和设置的监听全部失效,运行时会触发空指针异常
    3. 代码混用了findViewById和ViewBinding两种视图加载方案,Android Studio自动生成的Navigation、Fab相关模板代码和猜数字功能无关,冗余代码会干扰逻辑执行。
修复方案
  1. 修正第一行的包名拼写,将ckage改为package
  2. 统一变量命名,将checkGuess()中int Guess = Integer.parseInt(guessText);的变量名改为全小写guess,和后续判断逻辑中的变量名保持一致
  3. 修正btnGuess的绑定逻辑,去掉onCreate()中Button btnGuess = findViewById(R.id.btnGuess);前面的Button类型声明,改为btnGuess = findViewById(R.id.btnGuess);,确保赋值给类成员变量
  4. 删除冗余的模板代码:删掉onCreate()中ViewBinding inflate、第二次setContentView、Navigation控制器、Fab点击事件相关的所有代码,只保留猜数字功能需要的控件绑定、新游戏初始化、按钮点击监听逻辑即可。如果需要使用Toolbar等控件,可后续自行添加,新手阶段先保证核心功能跑通。
  5. 可选优化:在判断逻辑中增加输入范围校验,提示文本的数字和文字之间加空格,提升显示效果。
修复后可直接运行的核心代码
package com.example.billyhodgesguessinggame;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private EditText txtGuess;
    private Button btnGuess;
    private TextView lblOutput;
    private int theNumber;

    public void checkGuess() {
        String guessText = txtGuess.getText().toString();
        String message = "";
        try {
            int guess = Integer.parseInt(guessText);
            if (guess < 1 || guess > 100) {
                message = "请输入1-100区间内的整数";
            } else if (guess < theNumber) {
                message = guess + " 偏小,请再试一次";
            } else if (guess > theNumber) {
                message = guess + " 偏大,请再试一次";
            } else {
                message = guess + " 回答正确!游戏将重新开始";
                newGame();
            }
        } catch (NumberFormatException e) {
            message = "输入无效,请输入1-100之间的整数";
        } finally {
            lblOutput.setText(message);
            txtGuess.requestFocus();
            txtGuess.selectAll();
        }
    }

    public void newGame() {
        theNumber = (int)(Math.random() * 100 + 1);
        txtGuess.setText("");
        lblOutput.setText("请输入1-100之间的数字开始猜测");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        txtGuess = findViewById(R.id.txtGuess);
        btnGuess = findViewById(R.id.btnGuess);
        lblOutput = findViewById(R.id.lblOutput);
        newGame();

        btnGuess.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                checkGuess();
            }
        });
    }
}

注意:如果布局文件中还保留着Android Studio自动生成的Toolbar、NavHostFragment、FloatingActionButton控件,需要同步从布局XML中删掉这些控件,否则编译时会找不到对应绑定id报错。新手练习建议新建项目时选择「Empty Activity」模板,不会生成多余的Navigation相关代码,更适合入门练习。

内容的提问来源于stack exchange,提问作者Billy Hodge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 18:54:28