如何解决Java中‘cannot be resolved to a variable’变量未解析问题
解决
passwordInput cannot be resolved to a variable错误 嘿,我来帮你搞定这个问题!你遇到的这个错误是变量作用域的问题,咱们一步步拆解来看:
你在if(usernameInput.equals(username))的代码块里定义了int passwordInput = scan.nextInt();,这个变量的作用范围仅限这个if的大括号内部。但你在if-else结构外面写了System.out.println(passwordInput);,这时候程序根本找不到这个变量——因为它的作用域没覆盖到这里,所以就抛出了这个错误。
给你两种解决思路,选适合你的就行:
方案一:提前定义变量,扩大作用域
把passwordInput的定义移到if块外面,让它的作用域覆盖到后面的输出语句:
import java.util.Scanner; public class Password { public static void main(String[] args) { String username = "JohnPaul"; int password = 11062223; int passwordInput = 0; // 提前在if外部定义变量 System.out.println("PLEASE INSERT YOUR CARD TO LOGIN"); System.out.println("Username : "); Scanner scan = new Scanner (System.in); String usernameInput = scan.nextLine(); if(usernameInput.equals(username)) { System.out.println("Password : "); passwordInput = scan.nextInt(); // 这里只做赋值操作 scan.nextLine(); System.out.println(passwordInput); } else { System.out.println("User not found."); } // 现在这里可以正常访问passwordInput了 System.out.println(passwordInput); } }
方案二:调整输出语句的位置
如果你不需要在if块外面使用passwordInput,直接把那个输出语句移到if内部就行:
import java.util.Scanner; public class Password { public static void main(String[] args) { String username = "JohnPaul"; int password = 11062223; System.out.println("PLEASE INSERT YOUR CARD TO LOGIN"); System.out.println("Username : "); Scanner scan = new Scanner (System.in); String usernameInput = scan.nextLine(); if(usernameInput.equals(username)) { System.out.println("Password : "); int passwordInput = scan.nextInt(); scan.nextLine(); System.out.println(passwordInput); // 把输出移到这里 } else { System.out.println("User not found."); } // 删除原来外面的输出语句 } }
顺便给你提个小知识点:Java里变量的作用域由它所在的{}决定,定义在某个代码块里的变量,只能在这个块和它的子块里被访问,超出范围就无法识别啦。
内容的提问来源于stack exchange,提问作者newbie
相关产品推荐
相关产品推荐

