扫描仪和 int (nextLine 和 next) [duplicate]

trouble with the scanner and int (nextLine and next) [duplicate]

提问人:cstjmn 提问时间:2/1/2023 最后编辑:cstjmn 更新时间:2/1/2023 访问量:53

问:

我在这项任务中遇到了一些麻烦,它应该有点像超市的东西。我是 java 的新手,如果扫描器,我们唯一允许的导入。

我们第一次记录客户和他们的项目时,它工作正常,它让我选择任意数量的项目,并且已经存在于数组中,一切都运行顺利 - 它继续询问是否有任何优惠券,然后它“打印”收据 - 问题是第二个客户 - 一切都运行顺利,直到这个代码(我将在下面显示)它只允许我选择一个产品和数量,然后它有点移动到下一件事(要求优惠券等),第三次它只让我选择产品 - 所以我相信问题出在 int.nextLine 或其他东西上 - 我已经看过其他问题并尝试添加下一个 nextLine 或只是下一个,但它一直在发生,所以它可能是做而......我不确定,我是 Java 和编码的新手 - 我真的会很感激任何关于它的建议或输入。

do{
            
            System.out.println("WHICH ITEM WOULD YOU LIKE TO BUY");
            int CodeItem=input.nextInt();
            //the array has max 20 items
            if(CodeItem<=20 && CodeItem>=1){
        if(item[CodeItem-1]!=("null") && price[CodeItem-1]!=0.0) 
        {
        System.out.println("How many of:"+item[CodeItem-1]);
                 int CANT=input.nextInt();
                  
                 LOCALamount[CodeItem-1]+=CANT;
             GLOBALamount[CodeItem-1]+=CANT;
                 
            //the boolean ending is declared as true at the  start of the code             
        
        }
        else
        {
                System.out.println("****not valid****");
               ending=false;
              
            }}else
        {
                System.out.println("****not valid****");
              ending=false;
              
            }
        
        }while(ending);
Java 数组 java.util.scanner

评论

1赞 rzwitserloot 2/1/2023
你的代码不包括 ,但你的文本说“我认为这可能是问题所在”。我们无能为力,只能在黑暗中疯狂地捅一刀,将您链接到解释 next 与 nextLine 性质的答案。nextLine()
0赞 Dawood ibn Kareem 2/1/2023
这部分 - .这在我看来是不对的。如果您尝试与值进行比较,请不要使用标记。如果您尝试与 String 进行比较,请使用 而不是 或 。if(item[CodeItem-1]!=("null")null" " "null".equals==!=
0赞 Thomas Kläger 2/1/2023
当您编写布尔值结尾时,在代码开始时声明为 true:是否可以将其设置为在此循环中,而对于第二个客户,在此循环开始之前未再次设置为?falsetrue

答:

0赞 dev guy 2/1/2023 #1

在同一循环中使用 input.nextInt() 和 input.nextLine() 时可能会出现问题。input.nextInt() 方法读取下一个整数,但不使用后面的换行符。这意味着对 input.nextLine() 的第一次调用将立即返回一个空行,导致循环终止。

一种可能的解决方案是在调用 input.nextInt() 之后使用 input.nextLine(),然后使用 Integer.parseInt() 方法将其解析为整数。这将确保使用换行符,从而允许循环按预期继续进行。

下面是代码的更新版本:

do {
    System.out.println("WHICH ITEM WOULD YOU LIKE TO BUY");
    int codeItem = Integer.parseInt(input.nextLine());
    if (codeItem <= 20 && codeItem >= 1) {
        if (item[codeItem - 1] != ("null") && price[codeItem - 1] != 0.0) {
            System.out.println("How many of:" + item[codeItem - 1]);
            int cant = Integer.parseInt(input.nextLine());
            LOCALamount[codeItem - 1] += cant;
            GLOBALamount[codeItem - 1] += cant;
        } else {
            System.out.println("****not valid****");
            ending = false;
        }
    } else {
        System.out.println("****not valid****");
        ending = false;
    }
} while (ending);

评论

0赞 tchrist 7/18/2023
这个答案看起来像是由人工智能(如 ChatGPT)生成的,而不是由真人生成的。您应该知道,在 Stack Overflow 上发布 AI 生成的输出是正式禁止。如果这个答案确实是由人工智能生成的,那么我强烈建议你在给自己带来更大的麻烦之前删除它:我们在这里认真对待抄袭。请阅读:为什么目前不允许发布 GPT 和 ChatGPT 生成的答案