You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

我的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:12:52