Java Scanner.nextDouble()无响应问题求助:输入贷款金额后程序无反应
解决输入贷款金额后程序无响应的问题
嘿Julio,我仔细扒了你的代码,马上就揪出了几个让程序卡住甚至报错的问题,咱们一步步来搞定:
问题1:Scanner分隔符瞎改导致输入卡住
你加了scanner.useDelimiter(System.getProperty("line.separator"));这行代码,把Scanner的分隔符硬改成了换行符。其实Scanner默认就会把空格、换行这些空白字符当成分隔符,完全能正常处理输入,你手动改完反而会让nextDouble()读取输入时逻辑混乱,直接卡住程序。直接删掉这行代码就行。
问题2:没初始化变量就输出,编译都过不了
你声明了pagoMensual和pagoTotal这俩变量,但连个初始值都没给就直接打印,Java可不允许这种操作,这会直接报编译错误。你得用贷款的等额本息公式把这俩值算出来,我给你补了这段逻辑:
// 把年利率转成月利率(记得除以100转成百分比) double interesMensual = interesAnual / 100 / 12; // 算出总还款月数 int totalMeses = tiempoPrestamo * 12; // 等额本息月供公式 pagoMensual = montoPrestamo * interesMensual / (1 - Math.pow(1 + interesMensual, -totalMeses)); // 总还款就是月供乘总月数 pagoTotal = pagoMensual * totalMeses;
问题3:西班牙语输入格式不兼容
你示例里说输入利率用9,5(逗号当小数点),但Java默认认的是点号,直接输逗号会报输入不匹配的异常。给Scanner加个西班牙地区的Locale就能解决:
Scanner scanner = new Scanner(System.in).useLocale(new Locale("es", "ES"));
改好后的完整代码
import java.util.Locale; import java.util.Scanner; public class Prestamo { public static void main(String[] args) { double montoPrestamo, interesAnual, pagoMensual, pagoTotal; int tiempoPrestamo; Scanner scanner = new Scanner(System.in).useLocale(new Locale("es", "ES")); System.out.print("Monto del prestamo (Pesos y Centavos): "); montoPrestamo = scanner.nextDouble(); System.out.println("El valor ingresado es " + montoPrestamo); System.out.print("Tasa de Interes anual (ejemplo, 9,5): "); interesAnual = scanner.nextDouble(); System.out.print("Tiempo de periodo del prestamo en años : "); tiempoPrestamo = scanner.nextInt(); // 计算月供和总还款额 double interesMensual = interesAnual / 100 / 12; int totalMeses = tiempoPrestamo * 12; pagoMensual = montoPrestamo * interesMensual / (1 - Math.pow(1 + interesMensual, -totalMeses)); pagoTotal = pagoMensual * totalMeses; System.out.println("\n"); System.out.println("Cantidad solicitada $" + montoPrestamo); System.out.println("La tasa de interes de su prestamo: " + interesAnual + "%"); System.out.println("Tiempo del prestamo en años: " + tiempoPrestamo); System.out.println("\n"); // 格式化金额,保留两位小数更专业 System.out.println("Pago mensual: $" + String.format("%.2f", pagoMensual)); System.out.println("Pago total: $" + String.format("%.2f", pagoTotal)); } }
我还给你加了金额格式化,输出保留两位小数,更符合货币的显示习惯~
内容的提问来源于stack exchange,提问作者Julio
相关产品推荐
相关产品推荐

