当前位置: 首页 > 面试题库 >

Java代码挂在Scanner hasNextLine

燕青青
2023-03-14
问题内容

首先,我是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()它一次又一次地检查同一行,从而导致无限循环。



 类似资料:
  • 首先,我是java新手,正在尝试完成学校关于创建自动售货机的作业。我的程序接收两个文件作为cli参数,一个是产品,另一个是钱。 下面是我提供的ie Arg[1]的第二个文件,它的格式与第一个相同,工作。 任何帮助都将不胜感激。谢谢

  • 我试图建立一个替代密码。对于我的密钥,我使用一个随机的256字节数组,它是256个可能字节值的排列。 这是通过以下方式设置的: 然后,我用以下方法对消息进行编码/解码: 在这个过程中,有些东西出了问题,我解码的任何东西都会作为一个 我不确定自己哪里出错了,也不确定这是否是最高效的做事方式,我必须保持相同的函数签名和通用方法,但实现细节由我决定。 感谢任何和所有的帮助。

  • 问题内容: 我有一个包含以下内容的字符串: 我可以在Java中执行此字符串中的代码吗? 问题答案: 从Java 6开始,您 可以 使用SDK中的标准API 编译并运行定义为字符串或文件的Java 编译单元 (编译单元基本上是.java文件中的所有内容-包,导入,类/接口/枚举),看看这个例子。但是,您 不能 像问题中那样运行任意Java代码段。 如果可能的话,最好嵌入一种不同的脚本语言,该脚本语言

  • 问题内容: codepad.org允许您在线运行C,C ++,D等代码,但不能运行Java …我可以使用Java的网站吗? 问题答案: 还有http://ideone.com/(支持多种语言)

  • 我非常喜欢Gremlin,但我认为有时候很难将控制台的代码转换为Java代码,例如: 在控制台工作正常,但在Java不行。有人能帮我这个代码,或者给我一个好的未来地址吗?

  • 问题内容: 基本上,我想做两件事: 我想知道是否可以使用Java代码运行Java代码。 如果可能的话,如何在屏幕上显示输出?(无论是常规输出还是错误或异常) 我知道这是可能的,因为我的一位前辈已经做到了,但是我不知道他是如何做到的。也许他使用了Java的内置类之一。 注意:用户将代码写入一些文本文件中,然后将文件内容存储在某个变量中,然后也许运行该代码。 问题答案: 是的,有可能。 步骤1:编译代