小编典典

Java代码挂在Scanner hasNextLine

java

首先,我是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

任何帮助将不胜感激。谢谢


阅读 237

收藏
2020-11-26

共1个答案

小编典典

从行中删除分号

 while (moneyTemp.hasNextLine());

Semicolom使while循环不做任何事情就完成其主体,这意味着它while(){}在while条件为true时不执行任何操作,并且由于您的条件是hasNextLine()它一次又一次地检查同一行,从而导致无限循环。

2020-11-26