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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 08:53:05