首先,我是Java的新手,并试图完成学校创建自动售货机的作业。我的程序将2个文件用作cli参数,一个用于产品,另一个用于金钱。
为了我的一生,我无法弄清楚代码为什么挂在第42行上
(while (moneyTemp.hasNextLine());)
我尝试使用断点在eclipse上进行调试,并注意到代码永远不会超过这一行。将print语句放入while循环内,我没有得到输出,所以我知道它没有循环。
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],其格式与第一个起作用的格式相同。
货币,100美元的钞票,100.0,中,纸,0 货币,50美元的钞票,50.0,中,纸,0 PaperCurrency,20美元的钞票,20.0,中,纸,0 PaperCurrency,10美元的钞票,10.0,中,纸,4 纸币,5美元的钞票,5.0,中,纸,8 纸货币,1美元的钞票,100.0,中,纸,16 硬币货币,50分,0.5,大,金属,10 硬币货币,四分之一,0.25,中,金属,20 硬币货币,硬币,0.1,小,金属,30 硬币货币,镍,0.05,小,金属,40 硬币货币,一分钱,0.01,小,金属,50
任何帮助将不胜感激。谢谢
从行中删除分号
while (moneyTemp.hasNextLine());
Semicolom使while循环不做任何事情就完成其主体,这意味着它while(){}在while条件为true时不执行任何操作,并且由于您的条件是hasNextLine()它一次又一次地检查同一行,从而导致无限循环。
while(){}
hasNextLine()