我的Java长度转换程序计算结果不正确,求技术排查
Java长度转换程序计算错误问题排查
我编写了一段Java长度转换程序,代码如下:
import java.util.Scanner; public class ConvertingLengths { public static void main(String[] args) { int meters; char response; Scanner keyboard = new Scanner(System.in); System.out.print("How many meters?"); meters = keyboard.nextInt(); System.out.println("To convert it to centimeters, press c, to convert it to millimeters, press m."); response = keyboard.findWithinHorizon(".", 0).charAt(0); if (response == 'c') { System.out.println("The answer is " + response * 100 + " centimeters.");; } if (re...运行该程序后无法得到正确的计算结果,请问问题出在哪里?
核心问题是你用错了计算变量,同时还有几个小的输入处理和逻辑分支问题,我来逐一拆解:
1. 最关键的计算错误
你在输出结果时写了 response * 100,但 response 是用户输入的字符('c' 或 'm'),而不是你之前读取的长度值 meters!
在Java中,字符本质是Unicode编码值,'c' 的编码是99,所以程序会计算 99 * 100 = 9900,这显然不是你想要的米转厘米的结果。你应该用存储输入长度的 meters 变量来计算:
- 转厘米:
meters * 100 - 转毫米:
meters * 1000
2. 输入读取的潜在问题
keyboard.findWithinHorizon(".", 0) 这种读取字符的方式很容易读取到 nextInt() 之后残留的换行符,导致程序读取到意外的空字符或者无效输入。建议在 meters = keyboard.nextInt(); 之后添加一行 keyboard.nextLine(); 来消费掉换行符,再用 keyboard.nextLine().charAt(0) 读取用户输入的字符,这样更可靠。
3. 逻辑分支不完整
你的代码里第二个 if 语句没写完(if (re...),应该改成 else if 来区分不同的转换逻辑,同时最好增加无效输入的处理分支,让程序更健壮。
修正后的完整代码
import java.util.Scanner; public class ConvertingLengths { public static void main(String[] args) { int meters; char response; Scanner keyboard = new Scanner(System.in); System.out.print("How many meters? "); meters = keyboard.nextInt(); // 消费nextInt之后的换行符,避免读取到空字符 keyboard.nextLine(); System.out.println("To convert it to centimeters, press c, to convert it to millimeters, press m."); response = keyboard.nextLine().charAt(0); // 兼容大小写输入,同时处理无效情况 if (response == 'c' || response == 'C') { System.out.println("The answer is " + meters * 100 + " centimeters."); } else if (response == 'm' || response == 'M') { System.out.println("The answer is " + meters * 1000 + " millimeters."); } else { System.out.println("Invalid input! Please press c or m."); } // 关闭Scanner资源 keyboard.close(); } }
内容的提问来源于stack exchange,提问作者user8895101
相关产品推荐
相关产品推荐

