Java已声明字符串ign提示cannot find symbol无法访问如何解决?
报错原因
该报错由Java局部变量作用域规则导致:
ign变量是在if (start.equals("Yes") || start.equals("yes"))的内部代码块中声明的,Java中局部变量的作用域仅覆盖它被声明时所在的大括号包裹范围,出了这个代码块后ign会被销毁,外部无法访问- 若用户选择不设置IGN(输入No),
ign变量根本不会被声明,自然无法在循环外调用
此外原代码还存在隐性语法问题:else后多写了分号,会导致无论输入是否合法,都会执行后续的"Invalid response"打印逻辑。
修复步骤
- 在
while循环外部、main方法范围内提前声明ign变量,设置默认初始值,保证全方法范围内都能访问该变量 - 把if代码块内的
ign声明语句改为赋值语句,不需要再加String类型声明 - 移除
else后的多余分号,将无效输入提示逻辑放到else代码块内 - 补充缺失的
Scanner类导包语句
修正后的完整代码如下:
import java.util.Scanner; public class ignCalcu { public static void main (String[] args){ Scanner input = new Scanner(System.in); // 提前声明ign变量,作用域覆盖整个main方法 String ign = ""; System.out.println("Welcome to CalcuLegends!"); while (true) { System.out.println("Before you use the Calcore, would you like to set an IGN first?"); System.out.println("Yes or No?"); String start = input.nextLine(); if (start.equals("Yes") || start.equals("yes")){ System.out.println("What is your favorite color?"); String color = input.nextLine(); System.out.println("What word describes you the best?"); String word = input.nextLine(); System.out.println("Think of an animal other than dog or cat."); String animal = input.nextLine(); input.close(); // 直接赋值,无需重复声明类型 ign = " "+color+"_"+word+"_"+animal; System.out.println("Your IGN is" + ign ); break; } else if (start.equals("No") || start.equals("no")){ break; } else { System.out.println("Invalid response. Please try again."); } } System.out.println("hi "+ ign + "!"); } }
内容的提问来源于stack exchange,提问作者Sean Emmanuel Tolentino
相关产品推荐
相关产品推荐

