Java 我如何修复我的NoTouchElementException?
我尝试了许多不同的方法来修复错误。我知道这与hasNext有关,我只是不确定错误在哪里。请帮忙。另外,如果有人能告诉我如何从getLargestQuantityItem方法将变量largestQuantity的值输入到main方法中,我将不胜感激。干杯 以下是一个.txt文件的输入文件:Java 我如何修复我的NoTouchElementException?,java,exception-handling,Java,Exception Handling,我尝试了许多不同的方法来修复错误。我知道这与hasNext有关,我只是不确定错误在哪里。请帮忙。另外,如果有人能告诉我如何从getLargestQuantityItem方法将变量largestQuantity的值输入到main方法中,我将不胜感激。干杯 以下是一个.txt文件的输入文件: The Shawshank Redemption 100 19.95 DVD The Dark Knight 50 19.95 DVD Casablanca 137 9.95 DVD The Girl With
The Shawshank Redemption
100
19.95
DVD
The Dark Knight
50
19.95
DVD
Casablanca
137
9.95
DVD
The Girl With The Dragon Tattoo
150
14.95
Book
Vertigo
55
9.95
DVD
A Game of Thrones
100
8.95
Book
这是我的密码:
import java.util.*;
import java.io.*;
public class Project01 {
public static void main(String[] args) {
ArrayList<String> Titles = new ArrayList<String>();
ArrayList<String> Types = new ArrayList<String>();
ArrayList<Double> Prices = new ArrayList<Double>();
ArrayList<Integer> Quantities = new ArrayList<Integer>();
int count = 0;
Scanner in = new Scanner(System.in);
String database = getFile(in);
try {
File file = new File(database);
Scanner inputFile = new Scanner(file);
System.out.println();
System.out.println("Product Summary Report");
System.out.println("------------------------------------------------------------");
while (inputFile.hasNext()) {
getTitle(Titles, inputFile.nextLine());
getQuantity(Quantities, inputFile.nextInt());
getPrice(Prices, inputFile.nextDouble());
getType(Types, inputFile.next());
System.out.println("Title: " + Titles.get(count));
System.out.println(" Product Type: " + Types.get(count));
System.out.println(" Price: " + Prices.get(count));
System.out.println(" Quantity: " + Quantities.get(count));
System.out.println();
count++;
inputFile.next();
}
System.out.println("-----------------------------------------------------------------");
System.out.println("Total products in database: " + count);
System.out.println("Largest quantity item: " + largestQuantity);
System.out.println("Highest total dollar item: ");
System.out.println("Smallest quantity item: ");
System.out.println("Lowest total dollar item: ");
System.out.println("-----------------------------------------------------------------");
inputFile.close();
} catch (IOException e) {
System.out.println("There was a problem reading from " + database);
}
in.close();
}
private static String getFile(Scanner inScanner) {
System.out.print("Enter database filename: ");
String fileName = inScanner.nextLine();
return fileName;
}
private static void getTitle(ArrayList<String> Titles, String title) {
Titles.add(title);
}
private static void getType(ArrayList<String> Types, String type) {
Types.add(type);
}
private static void getPrice(ArrayList<Double> Prices, double price) {
Prices.add(price);
}
private static void getQuantity(ArrayList<Integer> Quantities, int quantity) {
Quantities.add(quantity);
}
private static void getLargestQuantityItem(ArrayList<Integer> Quantities){
Integer largestQuantity = Collections.max(Quantities);
}
}
参考post和您的txt文件
在nextInt()
,nextDouble()
方法之后添加inputFile.nextLine()
getQuantity(Quantities, inputFile.nextInt());
inputFile.nextLine();
getPrice(Prices, inputFile.nextDouble());
inputFile.nextLine();
更改以下代码
getType(Types, inputFile.nextLine());
并删除inputFile.next()代码>在while循环结束时
第二种方法是在next()周围添加if块代码>方法调用
if (inputFile.hasNext()) {
inputFile.next();
}
问题是next()代码>在while循环结束时读取下一个元素。但是在Book
之后的文件末尾,没有什么可读的,所以它在该行抛出异常
更新:
largestQuantity
是一个局部变量,无法在方法之外访问它。您应该从getLargestQuantityItem
方法返回它。因此,请更改方法的返回类型,然后返回最大值
private static Integer getLargestQuantityItem(ArrayList<Integer> Quantities){
return Collections.max(Quantities);
}
主要方法
List<Double> totalPriceList = generateTotalPriceList(Prices, Quantities);
List totalPriceList=生成totalPriceList(价格、数量);
现在,您可以按照我们对Quantity
所做的步骤进行操作。您是否尝试调试代码并提供堆栈跟踪。请检查hasNext()
一次,但是在循环中,您会得到多个项目——其中任何一个都可能失败——堆栈跟踪应该准确地告诉您,在catch块中,adde.printStackTrace()
然后再次执行并查看堆栈跟踪。传入的文件是什么?更改返回类型并将整数返回到main方法(从那里调用),因此在处理双列表时,必须使用(double)list.get(i)作为索引?这是给我带来麻烦的事情之一。如果你不把(double)
放进去,那么它也不会给出任何编译错误。您可以使用或不使用(双精度)检查输出。
System.out.println("Lowest total dollar item: ");
Integer largestQuantityMainVariable = getLargestQuantityItem(Quantities);
System.out.println("Largest quantity : " + largestQuantityMainVariable);
int index;
for (int i = 0; i < Quantities.size(); i++) {
if (Quantities.get(i) != null && Quantities.get(i).equals(largestQuantityMainVariable)) {
index = i;
break;
}
}
System.out.println("Largest quantity item : " + Titles.get(index));
private static List<Double> generateTotalPriceList(List<Double> prices, List<Integer> quantities) {
List<Double> totalPriceList = null;
if (prices != null && prices.size() > 0
&& quantities != null && quantities.size() > 0) {
if (prices.size() == quantities.size()) {
totalPriceList = new ArrayList<Double>();
double totalValue;
for (int i = 0; i < prices.size(); i++) {
totalValue = prices.get(i) * (double) quantities.get(i);
totalPriceList.add(totalValue);
}
}
}
return totalPriceList;
}
List<Double> totalPriceList = generateTotalPriceList(Prices, Quantities);