无法将扫描的字符串正确输入到 2D 数组中

Unable to correctly input scanned string into 2D array

提问人:matthew wagner 提问时间:9/5/2021 更新时间:9/5/2021 访问量:46

问:

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

文本文件记录如下:

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

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

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

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 解析 java.util.scanner

评论

0赞 Aarjav 9/5/2021
在每次迭代时都会重新创建 Sales 数组。将其保留在循环之外,以保留处理的每行的“更改”。我强烈建议习惯于使用调试器并逐行单步执行代码。如果您想要任何具体的建议,请告诉我,欢迎来到编程:)的世界
0赞 matthew wagner 9/5/2021
你的意思是循环外数组的实例化吗?

答:

0赞 Pieter12345 9/5/2021 #1

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

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

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

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

评论

0赞 matthew wagner 9/5/2021
我将数组更改为 Number 数组并将其移到循环之外,但出现以下错误:对于参数类型 Number, double 未定义运算符 +=。我将金额更改为双倍并更改为parseDouble,但现在我收到上述错误
0赞 Pieter12345 9/5/2021
你可以使用 和 分别获取 和 。由于您已经知道哪些值是整数,哪些值是双精度值,因此无需检查。Number.intValue()Number.doubleValue()intdouble
0赞 matthew wagner 9/5/2021
我想我仍然对我的代码上下文感到困惑。我创建了一个 Number 类型的数组,我只是尝试使用以下行存储信息:sales[personID-1][product-1] += amount;上述错误是我不明白的。
0赞 Pieter12345 9/5/2021
您必须执行其中一项操作,或者取决于存储的值是整数还是双精度。sales[personID-1][product-1] = sales[personID-1][product-1].intValue() + amount;sales[personID-1][product-1] = sales[personID-1][product-1].doubleValue() + amount;
0赞 matthew wagner 9/5/2021
因此,这基本上检索了所述插槽中的最后一个双倍并将金额添加到其中?所以它应该进一步增加吗?现在,我在尝试分配增量时收到以下错误。无法调用“java.lang.Number.doubleValue()”,因为“sales[...][...]"是 null 我猜这是因为在第一行我试图从循环外部启动的 null 中拉出一个双精度?也非常感谢您到目前为止的帮助!