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

数组数据清洗方法输出异常:未打印预期结果的问题排查

问题解决:销售数据修正逻辑错误

需求说明

  • 在SalesAnalyzer.java中:实现cleanData()方法,遍历sales数组,使用Math.abs()获取每个元素的绝对值,返回包含修正后销售值的新数组。
  • 在MyConsole.java中:声明并初始化correctedSales数组存储cleanData()的返回值,打印该数组内容。

现有代码

MyConsole.java

public class MyConsole {
  public static void main(String[] args) {

    double[] sales = {-4.05, 5.06, 3.99, -3.99, -1.99, 2.05, 10.50, -7.85, 6.73, -8.45};
    SalesAnalyzer mySales = new SalesAnalyzer(sales);

    // TO DO #2: Call the cleanData() method.
double [] correctedSale = mySales.cleanData();
  System.out.println("\n\n \n");
//System.out.println(correctedSale);
    for(double c: correctedSale){  // that list top 30 low pop from getLowPopCountrie
     System.out.println(c);// supposed to cycle through array and print out new elements
      }
    // TO DO #3: Print the values stored in the new array
  }
}

SalesAnalyzer.java

/*
 * Analyzes sales data for a business
 */
public class SalesAnalyzer {

  private double[] sales;  // The list of sales

  /*
   * Constructor to create a SalesAnalyzer
   * with the specified array of sales
   */
  public SalesAnalyzer(double[] sales) {
    this.sales = sales;
  }

  /*
   * Returns a new array containing corrected sales values
   */
  public double[] cleanData() {
    double[] cleanList= new double[sales.length];
    // TO DO #1: Return a new array containing the corrected sales values.
 //for(double values : sales){
   // double result = Math.abs(values);
   //}
 int track = 0; // tracking 
 for(int index = 0; index< sales.length; index ++){ // cyling through array, starting @ first index
  // if(sales[index] < 15){ // current element less than 15
     if (track < sales.length){ // making sure both lists are the same length
       sales[track] = cleanList[index]; //aligning w new lisy
       cleanList[index] = Math.abs(index);
       track ++; // track out of 30
     } //brack 4 if 2
  // }// brack for if []
    //return cleanList;
  }
    return cleanList;
 }  
  
}

问题详情

  • 原数组:{-4.05, 5.06, 3.99, -3.99, -1.99, 2.05, 10.50, -7.85, 6.73, -8.45}
  • 实际控制台输出:{0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0}
  • 预期输出:{4.05, 5.06, 3.99, 3.99, 1.99, 2.05, 10.50, 7.85, 6.73, 8.45}

错误根源

SalesAnalyzer类的cleanData()方法存在多处无效逻辑:

  1. 核心错误:对循环索引index取绝对值,而非目标数组元素sales[index],导致输出的是索引数值而非销售数据的绝对值。
  2. 冗余操作:sales[track] = cleanList[index]属于无效赋值,此时cleanList[index]尚未初始化,还会破坏原数组的数据。
  3. 多余变量:track变量和track < sales.length判断完全没必要,循环本身已经通过index遍历了整个数组,长度天然匹配。

修正后的代码

修正后的SalesAnalyzer.java

/*
 * Analyzes sales data for a business
 */
public class SalesAnalyzer {

  private double[] sales;  // The list of sales

  /*
   * Constructor to create a SalesAnalyzer
   * with the specified array of sales
   */
  public SalesAnalyzer(double[] sales) {
    this.sales = sales;
  }

  /*
   * Returns a new array containing corrected sales values
   */
  public double[] cleanData() {
    double[] cleanList = new double[sales.length];
    // 遍历原数组,对每个元素取绝对值存入新数组
    for(int index = 0; index < sales.length; index++){
      cleanList[index] = Math.abs(sales[index]);
    }
    return cleanList;
  }  
}

也可以用增强for循环简化代码:

public double[] cleanData() {
    double[] cleanList = new double[sales.length];
    int index = 0;
    for(double value : sales){
      cleanList[index++] = Math.abs(value);
    }
    return cleanList;
}

验证结果

修正后运行MyConsole.java,控制台会输出预期的销售数据绝对值:

4.05
5.06
3.99
3.99
1.99
2.05
10.5
7.85
6.73
8.45

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:45:32