Java代码在Scanner hasNextLine上挂起
首先,我是java的新手,并试图在学校完成一项关于创建自动售货机的任务。 我的程序将2个文件作为cli参数,一个用于产品,另一个用于金钱。
对于我的生活,我无法弄清楚为什么代码挂在第42行
(while (moneyTemp.hasNextLine());)
我尝试使用断点在eclipse上进行调试,并注意到代码永远不会超过这一行。 在while循环中放置一个print语句,我没有得到输出,所以我知道它不是循环。
java文档说hasNextLine可以阻止等待用户输入,但由于我的源是一个文件,我不知道为什么会发生这种情况。 请参阅以下相关代码。
import java.util.Scanner; import java.io.File; import java.io.FileNotFoundException; public class VendingMachine { static Scanner input = new Scanner (System.in); public static void main(String[] args) { try { Scanner productTempFile = new Scanner(new File(args[0])); Scanner moneyTemp = new Scanner(new File(args[1])); int numProducts = 0; //Number of products to be loaded to the machines int numMoney = 0; //Number of money objects to be loaded in the machine while (productTempFile.hasNextLine()) //This block will get the number of products { numProducts++; productTempFile.nextLine(); } productTempFile.close(); Product[] invArray = new Product[numProducts]; Scanner myFile = new Scanner(new File(args[0])); for(int i = 0; i < numProducts; i++) //This block populates the array of products { String inputLine = myFile.nextLine(); String[] lineArray = inputLine.split(","); invArray[i] = new Product(lineArray[0], Double.valueOf(lineArray[1]), lineArray[2], lineArray[3], Double.valueOf(lineArray[4]), Integer.valueOf(lineArray[5])); } myFile.close(); System.out.println("I'm here"); while (moneyTemp.hasNextLine()); //This block gets the number of different money items { numMoney++; moneyTemp.nextLine(); }
下面是我提供的第二个文件,即arg [1],其格式与第一个有效相同。
PaperCurrency,100 Dollar Bill,100.0,medium,paper,0 PaperCurrency,50 Dollar Bill,50.0,medium,paper,0 PaperCurrency,20 Dollar Bill,20.0,medium,paper,0 PaperCurrency,10 Dollar Bill,10.0,medium,paper,4 PaperCurrency,5美元比尔,5.0,中等,纸张,8 PaperCurrency,1 Dollar Bill,100.0,medium,paper,16 CoinCurrency,50 Cent Piece,0.5,大,金属,10 CoinCurrency,季度,0.25,介质,金属,20 CoinCurrency,迪梅,0.1%,小,金属,30 CoinCurrency,镍,0.05%,小,金属,40 CoinCurrency,竹,0.01,小,金属,50
任何帮助将非常感谢。 谢谢
从行中删除分号
while (moneyTemp.hasNextLine());
Semicolom使while循环完成它的身体而不做任何意味着它像while(){}
当while条件为true时什么也不做,因为你的条件是hasNextLine()
它会一次又一次地检查同一行导致无限循环。
通过添加分号( ;
),您隐式地使while
循环执行空块。 hasNextLine()
不会更改扫描程序所基于的InputStream
,因此,在while
循环体中没有任何内容,没有什么可以改变状态,循环将永远继续。
只需从while
循环中删除分号,你应该没问题:
while (moneyTemp.hasNextLine()) // no ; here! { numMoney++; moneyTemp.nextLine(); }