Java 代码不会编译,没有可见错误
该代码模拟使用FIFO和LIFO销售股票。我现在只是想让FIFO工作,我们使用的是策略模式。我和我的朋友相信我们的代码是正确的,因为在你运行代码之前没有错误。下面我将所有的类都标记为1-5,而Output标记为Output 第一类Java 代码不会编译,没有可见错误,java,Java,该代码模拟使用FIFO和LIFO销售股票。我现在只是想让FIFO工作,我们使用的是策略模式。我和我的朋友相信我们的代码是正确的,因为在你运行代码之前没有错误。下面我将所有的类都标记为1-5,而Output标记为Output 第一类 package cop4814; import java.io.File; import java.io.FileNotFoundException; import java.util.*; public class Portfolio { private Sel
package cop4814;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;
public class Portfolio {
private SellStrategy strategy;
List<Transaction> buyList = new ArrayList<>();
List<Transaction> sellList = new ArrayList<>();
public boolean readDataFile(String path) {
try {
Scanner in = new Scanner(new File(path));
while (in.hasNextLine()) {
String[] fields = in.nextLine().split(",");
if (fields[0].equals("B")) {
buyList.add(new Transaction(fields));
} else if (fields[0].equals("S")) {
sellList.add(new Transaction(fields));
}
}
} catch (FileNotFoundException ex) {
System.out.println("Error: " + ex.toString());
return false;
}
return true;
}
public void processTransactions() {
for (Transaction t : sellList) {
System.out.println(strategy.sell(t,buyList));
}
}
public void setSellStrategy(SellStrategy howToSell) {
strategy = howToSell;
}
第五课我的测试课
import cop4814.*;
public class PortfolioTester {
private static final String inputFilePath = "transactions.txt";
void start() {
Portfolio p = new Portfolio();
if( p.readDataFile( inputFilePath )) {
p.setSellStrategy( new Sell_LIFO() );
p.processTransactions(); // also prints the report
p.setSellStrategy( new Sell_FIFO() );
p.processTransactions(); // prints a second report
}
else {
System.out.println("Unable to open input file: " + inputFilePath );
}
}
public static void main(String[] args) {
new PortfolioTester().start();
}
}
输出
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.elementData(ArrayList.java:418)
at java.util.ArrayList.get(ArrayList.java:431)
at cop4814.Sell_FIFO.sell(Sell_FIFO.java:18)
at cop4814.Portfolio.processTransactions(Portfolio.java:43)
at PortfolioTester.start(PortfolioTester.java:13)
at PortfolioTester.main(PortfolioTester.java:21)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)
您正在接收,这意味着您试图访问具有非法索引的数组
错误可能来自以下行:
Transaction found = buyList.get(buyList.indexOf(stockToSell));
您应该首先检查列表中是否存在该项:
if (buyList.contains(stockToSell)) {
// do work
}
如果您能够运行代码并获得异常,则代码将不会编译。另请看ArrayIndexOutOfBoundsException是一个运行时错误。这意味着您的代码编译成功。是时候学习如何使用IDE的调试器了。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.elementData(ArrayList.java:418)
at java.util.ArrayList.get(ArrayList.java:431)
at cop4814.Sell_FIFO.sell(Sell_FIFO.java:18)
at cop4814.Portfolio.processTransactions(Portfolio.java:43)
at PortfolioTester.start(PortfolioTester.java:13)
at PortfolioTester.main(PortfolioTester.java:21)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)
Transaction found = buyList.get(buyList.indexOf(stockToSell));
if (buyList.contains(stockToSell)) {
// do work
}