Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将多个值读入数组时出错_Java_Arrays_File_Loops - Fatal编程技术网

Java 将多个值读入数组时出错

Java 将多个值读入数组时出错,java,arrays,file,loops,Java,Arrays,File,Loops,因此,我必须设计一个类来读取股票符号、名称、前收盘价和当前价格。然后,我制作了这个驱动程序来实例化不同的数组,用它做不同的事情。我无法将数据作为文件读取。该文件包含字符串和数字,因此我决定将所有数据作为字符串读取,然后将需要的数据解析为双精度。我相信在读取文件时会发生错误。我得到这个错误: Exception in thread "main" java.lang.NumberFormatException: For input string: "AAPL" at sun.misc.Floatin

因此,我必须设计一个类来读取股票符号、名称、前收盘价和当前价格。然后,我制作了这个驱动程序来实例化不同的数组,用它做不同的事情。我无法将数据作为文件读取。该文件包含字符串和数字,因此我决定将所有数据作为字符串读取,然后将需要的数据解析为双精度。我相信在读取文件时会发生错误。我得到这个错误:

Exception in thread "main" java.lang.NumberFormatException: For input string: "AAPL"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.lang.Double.parseDouble(Double.java:538)
at StockDriver.setStockData(StockDriver.java:31)
at StockDriver.main(StockDriver.java:10)
任何帮助都将不胜感激。这是我的股票代码:

import java.text.DecimalFormat;
import java.io.*;
import java.util.Scanner;
import java.io.IOException;

public class StockDriver {
   public static void main(String [] args) throws IOException{
     Stock [] myStock = new Stock[10];

     setStockData(myStock); 
     displayStockData(myStock);
   } //end main

   public static void setStockData(Stock [] myStock) throws IOException {
      File infile = new File("stockData.txt");
      if(!infile.exists()){
        System.out.println("No file");
         System.exit(0);
      }
      Scanner scan = new Scanner(infile);
      String symbol, name, previousClosingPriceString, currentPriceString;
      double previousClosingPrice, currentPrice;

      int i = 0;
      while(scan.hasNext() && i < myStock.length){
         symbol = scan.nextLine();
         name = scan.nextLine();
         previousClosingPriceString = scan.nextLine();
         previousClosingPrice = Double.parseDouble(previousClosingPriceString);
         currentPriceString = scan.nextLine();
         currentPrice = Double.parseDouble(currentPriceString);
         myStock[i] = new Stock(symbol, name, previousClosingPrice, currentPrice);
         i++;
      } //end while
  } //end setStockData

  public static void displayStockData(Stock [] myStock) {
   DecimalFormat formatter = new DecimalFormat("#.00");
      for(int i = 0; i < myStock.length; i++){
         System.out.println(myStock[i]);
         System.out.println("---------------");
      }//end for
  } //end displayStockData

} //end class
以下是我正在阅读的文本:

GPRO
GoPro, Inc.
89.93
89.8773
SBUX
Starbucks
75.26
75.76
JCP
JC Penney
8.18
7.72
AMZN
Amazon
323.71
319.94
AE
Adams Resources and Energy
44.71
44.69
CEP
Constellation Energy Partners
3.38
3.35
KO
Coca-Cola
43.66
44.44
MCD
McDonald's
92.81
93.53
TSLA
Tesla Motors
259.28
AAPL
Apple Inc
100.80
102.30

Tesla Motors
缺少一条价格线:

TSLA
Tesla Motors
259.28
AAPL
因此,您尝试将
AAPL
转换为
double


如果这是正常情况,则在读取价格之前,应使用
hasNextDouble()
方法。

再次读取异常。。(提示:它说你正在读的那一行不能被解析为数字)你没有读到你认为你在读的那一行;显而易见的调试步骤是在解析字符串之前转储字符串的值,以确保它们符合您的期望。谢谢您的帮助。我们为什么要这样做?如果这对你有帮助,请接受答案:)
TSLA
Tesla Motors
259.28
AAPL