【问题标题】:Unable to correctly input scanned string into 2D array无法将扫描的字符串正确输入二维数组
【发布时间】:2021-09-05 00:49:16
【问题描述】:

我将阅读文件并编制销售人员的运行总数,以及他们对每个单独产品的总数和每个产品的总总数。我必须将所有这些存储在一个二维数组中(不允许使用列表)并以某种格式打印。

文本文件是这样记录的:

1,4,10.20
2,2,17.20
etc 
etc

第 1 列是 personID 第 2 列是产品编号 第 3 列是金额

我的代码尝试将每一行拆分为一个字符串,然后将每个值进一步拆分为一个索引,然后将其存储在一个二维数组中。我觉得很傻,但我遇到了转换错误。无论我做什么,我都无法使数组存储量以可接受的格式。由于某种原因,我无法将数组创建为双精度数组。当我尝试编译时它返回终止。我的教授说整数应该可以,但我根本无法准确求和。

package HW1;

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.util.Scanner;

public class salesList {

      public static void main(String[] args) throws FileNotFoundException{
          Scanner salesList;
          salesList = new Scanner(new File("C:\\Users\\mjwag\\OneDrive\\cs151/salesList.txt"));
          
         while  (salesList.hasNext())  {
             Scanner file = salesList;
             file.nextLine();
             String line = file.nextLine();
             String[] lineArray = line.split(",");
             int personID = Integer.parseInt(lineArray[0]);
             int product = Integer.parseInt(lineArray[1]);
             int amount = Integer.parseInt(lineArray[2]);
             int [][] sales = new int[4][6];
             sales[personID-1][product-1] += amount;
             
            }
         
      }
}

【问题讨论】:

  • 每次迭代都会重新创建销售数组。将其保留在循环之外以保留处理的每一行的“更改”。我强烈建议习惯使用调试器并逐行执行代码。如果您需要任何具体建议,请告诉我,欢迎来到编程世界:)
  • 你的意思是循环外的数组实例化吗?

标签: java parsing java.util.scanner


【解决方案1】:

在数组中存储整数和双精度的最简单方法是使用Number,它是IntegerDouble 的超类。例如:

Number[][] sales = new Number[4][6];
...
sales[0][0] = 1;
sales[0][1] = 4.5;

或者,正如您与教授讨论的那样,可以将双精度数转换为整数并丢失小数点后的数字。这可以按如下方式完成:

double val = 4.5;
int intVal = (int) val;

【讨论】:

  • 我将数组更改为 Number 数组并将其移出循环,但出现以下错误:运算符 += 未定义参数类型 Number,double。我将金额更改为双倍并更改为 parseDouble 但现在出现上述错误
  • 您可以使用Number.intValue()Number.doubleValue() 分别获得intdouble。由于您已经知道哪些值是整数,哪些是双精度值,因此无需检查。
  • 我想我仍然对我的代码上下文感到困惑。我创建了一个 Number 类型的数组,我只是想用以下行存储信息:sales[personID-1][product-1] += amount;上述错误是我不明白的。
  • 您必须选择sales[personID-1][product-1] = sales[personID-1][product-1].intValue() + amount;sales[personID-1][product-1] = sales[personID-1][product-1].doubleValue() + amount;,具体取决于存储的值是整数还是双精度值。
  • 所以这实质上是检索所述插槽中的最后一个双精度并将金额添加到其中?那么它应该进一步增加吗?现在我在尝试分配增量时收到以下错误。无法调用“java.lang.Number.doubleValue()”,因为“sales[...][...]”为 null 我猜这是因为在第一行我试图从 null 中提取一个 double是在循环之外发起的?也非常感谢您迄今为止的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-02
  • 1970-01-01
  • 2021-09-09
  • 1970-01-01
  • 2020-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多