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

if-else-if分支逻辑异常导致DP计算出现负数结果求助

问题排查:选择tipe-45/tipe-54时DP计算结果为负数

我开发了一款程序,当选择区域(rb1/rb2/rb3)与户型类型(t1/t2/t3)后,系统会自动生成DP(首付款)。但选择tipe-45和tipe-54类型时,计算结果显示为负数,以下是相关代码片段:

if(rb1.isSelected() && t1.isSelected()){
        hargabangunan.setText("90000000");
        luas_tanah_asli.setText("60");}
    else if(rb1.isSelected() && t2.isSelected()){
        hargabangunan.setText("120000000");
        luas_tanah_asli.setText("90");}
    else if(rb1.isSelected() && t3.isSelected()){
        hargabangunan.setText("150000000");
        luas_tanah_asli.setText("110");}
    
    else if(rb2.isSelected() && t1.isSelected()){
        hargabangunan.setText("100000000");
        luas_tanah_asli.setText("70");}
    else if(rb2.isSelected() && t2.isSelected()){
        hargabangunan.setText("130000000");
        luas_tanah_asli.setText("110");}
    else if(rb2.isSelected() && t3.isSelected()){
        hargabangunan.setText("170000000");
        luas_tanah_asli.setText("120");}
   
    else if(rb3.isSelected() && t1.isSelected()){
        hargabangunan.setText("120000000");
        luas_tanah_asli.setText("80");}
    else if(rb3.isSelected() && t2.isSelected()){
        hargabangunan.setText("140000000");
        luas_tanah_asli.setText("120");}
    else if(rb3.isSelected() && t3.isSelected()){
        hargabangunan.setText("200000000");
        luas_tanah_asli.setText("140");}
    
    int htl = hargat*75/100;     
    tst.setText(Integer.toString(htl));
    
    int lta = Integer.parseInt(luas_tanah_asli.getText());
    int ltth = ltt - lta;
    tsa.setText(Integer.toString(ltth));
    
    int hga = Integer.parseInt(hargabangunan.getText());
    int hgaa = hga+lta*hargat+ltth*htl;
    harga.setText(Integer.toString(hgaa));
   
    String hharga;
    hharga = harga.getText();
    int tharga = Integer.parseInt(hharga);
    int dp = tharga*20/100;
    dpf.setText(Integer.toString(dp));

问题原因

  • 缺失tipe-45/tipe-54的处理分支:现有代码仅覆盖t1/t2/t3三种户型与区域的组合,当选择tipe-45或tipe-54时,所有if-else分支都不触发,hargabangunan和luas_tanah_asli保持初始值(可能为空、0或非法值),后续解析和计算会出现异常。
  • 整数溢出风险:Java的int类型最大值为2147483647,现有部分户型的房屋价格已接近2亿,加上土地价格后总金额很容易超出int上限,导致数值溢出变为负数,最终DP计算结果也为负。

修复方案

  1. 补充tipe-45/tipe-54的逻辑分支:添加对应的else if语句,为这两种户型设置合法的hargabangunan和luas_tanah_asli值,示例:
    else if(rb1.isSelected() && tipe45.isSelected()){
        hargabangunan.setText("XXXXX");
        luas_tanah_asli.setText("YY");
    }
    
  2. 添加默认分支兜底:在所有if-else末尾添加else分支,设置默认数值或提示用户选择有效户型,避免未赋值情况。
  3. 替换为long类型避免溢出:将所有金额相关的int变量改为long,防止数值超出范围,修改后的核心计算代码示例:
    long htl = (long)hargat * 75 / 100;     
    tst.setText(Long.toString(htl));
    
    int lta = Integer.parseInt(luas_tanah_asli.getText());
    long ltth = ltt - lta;
    tsa.setText(Long.toString(ltth));
    
    long hga = Long.parseLong(hargabangunan.getText());
    long hgaa = hga + (long)lta * hargat + ltth * htl;
    harga.setText(Long.toString(hgaa));
    
    long tharga = Long.parseLong(harga.getText());
    long dp = tharga * 20 / 100;
    dpf.setText(Long.toString(dp));
    
  4. 添加合法性校验:在解析文本为数值前,检查luas_tanah_asli和hargabangunan的文本是否为空或非数字,避免运行时异常。

内容的提问来源于stack exchange,提问作者HERI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 07:45:19