Java计算器开发问题:辅助方法无法返回转换后的分数值
问题分析与修复方案
你的代码存在几个关键问题,导致带分数/整数转真分数/假分数的逻辑没有生效:
1. 未接收转换方法的返回值
你调用了convterMethod(num1)和convterMethod(num2),但没有把方法返回的转换结果重新赋值给num1和num2,所以输出的始终是原始输入值。
正确写法应为:
num1 = convterMethod(num1); num2 = convterMethod(num2);
2. 带分数转换时的变量赋值错误
在处理带分数的分支中,错误地将整数部分的值赋值给了分子变量:
int numNumerator = Integer.parseInt(strWholeNumber);
应该解析带分数里的分子部分:
int numNumerator = Integer.parseInt(strNumerator);
3. 可选优化:方法名拼写修正
convterMethod拼写有误,建议改为converterMethod,避免后续维护时产生混淆(不影响功能,但代码更规范)。
修复后的完整代码
import java.util.Scanner; public class fracCalc { public static void main(String[] args) { Scanner console = new Scanner(System.in); String userInput; boolean stop = false; while (!stop) { System.out.println("Enter:"); userInput = console.nextLine().toLowerCase(); if (userInput.equals("quit")) { stop = true; System.out.println("Thanks for using, Bye!"); } else { System.out.print(userInput + " = "); Scanner userInputCutter = new Scanner(userInput); String num1 = userInputCutter.next(); String operator = userInputCutter.next(); String num2 = userInputCutter.next(); // 接收转换后的结果并更新变量 num1 = converterMethod(num1); num2 = converterMethod(num2); System.out.println(num1 + " " + operator + " " + num2); } } } public static String converterMethod(String token) { if (token.contains("_")) { int underScore = token.indexOf("_"); int slash = token.indexOf("/"); String strWholeNumber = token.substring(0, underScore); String strNumerator = token.substring(underScore + 1, slash); String strDenominator = token.substring(slash + 1); int numWholeNumber = Integer.parseInt(strWholeNumber); int numNumerator = Integer.parseInt(strNumerator); // 修复赋值错误 int numDenominator = Integer.parseInt(strDenominator); // 计算假分数的分子 int newNumerator = numWholeNumber * numDenominator + numNumerator; return newNumerator + "/" + numDenominator; } else if (token.contains("/")) { return token; } // 整数转成分母为1的分数 return token + "/1"; } }
测试示例:
输入3_1/2 + 5,输出会是7/2 + 5/1,符合转换要求。
内容的提问来源于stack exchange,提问作者Plebasoarus
相关产品推荐
相关产品推荐

