【问题标题】:How can I assign a value of a 2d array to a 1d array?如何将二维数组的值分配给一维数组?
【发布时间】:2021-07-22 01:54:42
【问题描述】:

我制作了 2 个一维数组,并且想要对一个二维数组的值进行排序,以便它们可以在一维数组之间进行划分。

就上下文而言,我正在制作一个程序,该程序利用用户输入创建一个二维数组来组织受薪员工和小时工。

用户输入他们想要存储在员工数据库中的员工人数。然后他们输入 ID 号(employeeList),最后输入每个员工是受薪还是按小时(1 或 2),然后将这些数据存储到二维数组中。

例如,这里是一个示例employeeDatabase。

EmployeeID Salaried (1) or Hourly (2)
123456 1
654321 2

我希望它输出: 员工 123456 是受薪员工。 员工 654321 是一名小时工。

我想将employeeDatabase 中的值分成数组salariedEmployees 和hourlyEmployees,但我不断收到“ArrayIndexOutOfBoundsException: 0”数组。导致问题的代码的 sn-p 如下。谢谢!

      int salariedEmployeesSize = 0;
      int hourlyEmployeesSize = 0;
      
      int[] salariedEmployees = new int[salariedEmployeesSize];
      int[] hourlyEmployees = new int[hourlyEmployeesSize];
      
      for (int i = 0; i < employeeList.length - 1; i++) {
         if (employeeDatabase[i][1] == 1) {
            salariedEmployeesSize += 1;
            salariedEmployees[i] = employeeDatabase[i][0];
            
         } else if (employeeDatabase[i][1] == 2) {
            hourlyEmployeesSize += 1;
            hourlyEmployees[i] = employeeDatabase[i][0];
           
         }
      }


      for (int i = 0; i < salariedEmployees.length - 1; i++) {
         System.out.println("Employee " + salariedEmployees[i] + " is a salaried employee.");
      }     
      
      for (int i = 0; i < hourlyEmployees.length - 1; i++) {
         System.out.println("Employee " + hourlyEmployees[i] + " is an hourly employee.");
      }

【问题讨论】:

  • 您是否假设您的数组增加了它的大小,因为您更改了hourlyEmployeesSize 的值?不是,hourlyEmployees 仍然是一个大小为 0 的数组。
  • 如果您想动态添加元素,那么您应该使用 ArrayList 而不是 Array,或者您应该在添加元素之前正确定义数组的大小。
  • 更重要的是,您总是创建大小为零的输出数组。选择阵列来解决这个问题是一个糟糕的选择。考虑用Map 代替二维表,用List 代替一维表。你会惊讶于你想要完成的事情变得多么容易。
  • 如果可能的话,我想利用二维和一维数组来解决这个问题。我希望 hourlyEmployeesSize 和 salariedEmployeesSize 增加:有什么阻止吗?
  • @jcpark,解决方案会更简洁,并且根据 java 使用 java api 包的最佳实践,例如java.util,你有理由不使用这个包吗?你用的是哪个java版本?

标签: java arrays for-loop


【解决方案1】:

每次添加元素时都必须调整数组的大小。 在java中,这是由:

  1. 创建具有新大小的新数组。
  2. 将元素移动到新数组中。
  3. 用新数组覆盖引用旧数组的变量值。

旧数组将不再被引用,将被 jvm 的垃圾收集器销毁。

注意:您的问题可能会被标记为重复,我鼓励您搜索答案:)。

您可以搜索的参考资料:

【讨论】:

    猜你喜欢
    • 2017-01-13
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    • 2018-09-03
    相关资源
    最近更新 更多