Java中如何将if/else if内的整数变量传递到外部使用?
解决你的幂运算程序变量作用域与字符串比较问题
嘿,我看到你的问题了,核心问题是变量作用域导致y和z无法在外部访问,另外还有几个小坑也得一起修正,不然程序运行起来也会出问题。咱们一步步来解决:
1. 变量作用域问题:把y和z的声明移到if块外面
你现在是在每个if/else if的代码块里定义int y = ...,这样变量的作用域只限于当前的代码块,块外面根本看不到它。解决办法很简单:在if判断之前就声明y和z,然后在块里给它们赋值。
2. 字符串比较别用==,要用equals()
Java里==比较的是字符串对象的内存引用,不是内容!比如用户输入的字符串和你定义的x1、x2虽然内容一样,但可能是不同的对象,用==会返回false。必须换成x.equals(x1)这种方式来比较内容。
3. 不要重复创建Scanner对象
你的代码里每次输入都new一个Scanner,这不仅没必要,还可能导致输入混乱。整个main方法里只需要创建一个Scanner实例就行,复用它来读取所有输入。
修改后的完整代码
import java.util.Scanner; public class PowerCalculator { public static void main(String[] args) { // 只创建一个Scanner,复用所有输入 Scanner scanner = new Scanner(System.in); System.out.println("Enter 1 for Alphabetical Input, 2 for numerical input:"); int solution = scanner.nextInt(); scanner.nextLine(); // 读取换行符,避免后续nextLine()读取空内容 if (solution == 1) { for (int i = 1; i <= 100; i++) { // 先声明y和z,初始值设为-1,用来判断输入是否有效 int y = -1; int z = -1; System.out.print("Enter your base: "); String x = scanner.nextLine().toLowerCase(); // 转小写,兼容大小写输入 // 用switch替代冗长的if/else if,代码更整洁 switch (x) { case "zero": y = 0; break; case "one": y = 1; break; case "two": y = 2; break; case "three": y = 3; break; case "four": y = 4; break; case "five": y = 5; break; case "six": y = 6; break; case "seven": y = 7; break; case "eight": y = 8; break; case "nine": y = 9; break; case "ten": y = 10; break; default: System.out.println("I can't read that!"); continue; // 跳过当前循环,重新输入 } System.out.print("Enter your exponent: "); String a = scanner.nextLine().toLowerCase(); switch (a) { case "zero": z = 0; break; case "one": z = 1; break; case "two": z = 2; break; case "three": z = 3; break; case "four": z = 4; break; case "five": z = 5; break; case "six": z = 6; break; case "seven": z = 7; break; case "eight": z = 8; break; case "nine": z = 9; break; case "ten": z = 10; break; default: System.out.println("I can't read that!"); continue; // 跳过当前循环,重新输入 } // 现在y和z已经在外部声明,能正常访问了 int base = y, exponents = z; double result = Math.pow(base, exponents); System.out.println("Answer = " + result); } } else if (solution == 2) { for (int i = 1; i <= 100; i++) { System.out.print("Enter your base: "); int x = scanner.nextInt(); System.out.print("Enter your exponent: "); int y = scanner.nextInt(); int base = x, exponent = y; double result = Math.pow(base, exponent); System.out.println("Answer = " + result); } } else { System.out.println("Could not read input"); } scanner.close(); // 用完关闭Scanner } }
额外优化点说明
- 用
switch语句替代冗长的if/else if,代码更整洁易读 - 把输入字符串转成小写,这样用户输入"One"或者"ONE"也能被识别
- 加入
continue语句,当输入无效时直接跳过当前循环,让用户重新输入 - 添加
scanner.nextLine()处理nextInt()后的换行符,避免后续读取空字符串的问题
内容的提问来源于stack exchange,提问作者Mitteleuropa
相关产品推荐
相关产品推荐

