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判定它未被使用。 - 其他会导致运行失败的隐性问题:
- 代码第一行包名拼写错误,将
package写为ckage,会直接导致编译失败 onCreate()中连续调用了两次setContentView(),第一次绑定控件、设置点击事件后,第二次调用会直接替换当前加载的视图,之前绑定的控件和设置的监听全部失效,运行时会触发空指针异常- 代码混用了
findViewById和ViewBinding两种视图加载方案,Android Studio自动生成的Navigation、Fab相关模板代码和猜数字功能无关,冗余代码会干扰逻辑执行。
- 代码第一行包名拼写错误,将
修复方案
- 修正第一行的包名拼写,将
ckage改为package - 统一变量命名,将
checkGuess()中int Guess = Integer.parseInt(guessText);的变量名改为全小写guess,和后续判断逻辑中的变量名保持一致 - 修正btnGuess的绑定逻辑,去掉
onCreate()中Button btnGuess = findViewById(R.id.btnGuess);前面的Button类型声明,改为btnGuess = findViewById(R.id.btnGuess);,确保赋值给类成员变量 - 删除冗余的模板代码:删掉
onCreate()中ViewBinding inflate、第二次setContentView、Navigation控制器、Fab点击事件相关的所有代码,只保留猜数字功能需要的控件绑定、新游戏初始化、按钮点击监听逻辑即可。如果需要使用Toolbar等控件,可后续自行添加,新手阶段先保证核心功能跑通。 - 可选优化:在判断逻辑中增加输入范围校验,提示文本的数字和文字之间加空格,提升显示效果。
修复后可直接运行的核心代码
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
相关产品推荐
相关产品推荐

