【问题标题】:Skipping the console the first time in Java?第一次在 Java 中跳过控制台?
【发布时间】:2016-04-29 01:22:19
【问题描述】:

以下是我在 Java 中遇到问题的一段代码;它似乎已将一个问题换成了另一个问题。由于空格错误,当它是一个句子时,我在检索用户输入时遇到问题;我通过添加“nextLine”而不是“next”来解决这个问题。

但是现在,它没有给用户回答第一个问题的机会,而是跳过控制台框并简单地输出“错误”,然后继续第二个问题,此时用户的第一个控制台框出现了。

我仔细检查了:使用“next”,显示第一个问题的控制台,但使用“nextLine”,它跳过该控制台框(不给用户输入任何内容的机会),吐出“错误”,然后转到问题二,用户终于可以输入一些东西了。

为什么要这样做?

if(nwb.equalsIgnoreCase("numbers")){
    System.out.println("You must type in the rules verbatim "+
        "(word for word, including punctuation), "+
        "as shown on the Student Hand-Out. "+
        "Capitalization does not matter.");
    int count = 1;
    for(int i = 0; i<=(rules.length-1); i++){
        System.out.print("Rule #"+count);
        String response = console.nextLine().replaceAll(" ","");
        if(response.replaceAll(" ", "").equalsIgnoreCase(rules[i].replaceAll(" ", ""))){
            System.out.println("CORRECT");
        }else{
            System.out.println("WRONG\nThe correct wording is: "+rules[i]);
        }
        count++;
    }
}

【问题讨论】:

  • 高亮显示代码并按 ctrl+k。
  • 啊!这就是它的完成方式。谢谢,对此感到抱歉。
  • rules 是代码前面的字符串数组的名称。

标签: java console skip


【解决方案1】:

阅读您的代码有点乏味,请使用 { } 代码块格式化程序,使其更易于阅读。

尝试使用trim() 函数删除输入前后的空格。

这可能是因为您已经在循环中初始化了响应字符串,请尝试将其移出并查看其作用。希望这会有所帮助。

【讨论】:

  • 这些建议更适合作为 cmets,而不是答案。我建议您删除您的答案,因为您可能会投反对票(虽然不是我)
  • 我正在添加我的答案,我的错,我不小心提前提交了。
  • 空格是问题吗?仅当我将“next”替换为“nextLine”时才会出现该错误。我不确定如何使用 trim()(我对 Java 很陌生),但我可以查一下。
  • @Ray25Lee 不,但这将减少未来可能出现的其他问题。尝试在循环之外声明您的输入和扫描器。
【解决方案2】:
String response = console.nextLine();
    response = response.trim(); //remove spaces
    if(response.equalsIgnoreCase(rules[i].trim())){
        System.out.println("CORRECT");
    }else{
        System.out.println("WRONG\nThe correct wording is: "+rules[i]);
    }

有几件事情要解决。您正在替换空格。在您的 if 循环中,您再次删除了空格。并使用 trim() 函数删除空格。用这个例子检查

【讨论】:

  • 我认为这里会有一些重复的空格编码,但问题不在于空格;我已经解决了。问题是代码不允许用户在进入第二个问题之前回答第一个问题。我将其修复为您的示例,它仍在这样做。
【解决方案3】:

对于它可能关心的人,我在其他地方做了一些搜索,几个小时后,我发现了 solved it 的东西;

基本上,我所做的是:

if(nwb.equalsIgnoreCase("numbers")){
                    System.out.println("You must type in the rules verbatim (word for word, including puncutation), as shown on the Student Hand-Out. Capitalization does not matter.");
                    int count = 1;
                    for(int i = 0; i<=(rules.length-1); i++){
                        System.out.print("Rule #"+count);                            
                        String derpTest = console.nextLine();
                        String response = console.nextLine().replaceAll(" ","");
                        if(response.equalsIgnoreCase(rules[i].replaceAll(" ",""))){
                            System.out.println("CORRECT");
                        }else{
                            System.out.println("WRONG\nThe correct wording is: "+rules[i]);
                        }
                        count++;
                    }
}

据我所知,String derpTest 已用完,因此一切都继续进行 String 响应。我不知道为什么会这样;我不太明白链接在说什么,所以,如果有人愿意解释它,那就太棒了。感谢所有试图弄清楚这一点的人,这是一个奇怪的问题。

【讨论】:

  • 更正;您需要将 derpTest 字符串放在循环的外部,或者当您继续回答问题二、三等时,它会再次变得奇怪。出于某种原因,将其放在循环之外,一切正常。还是不明白,但是,哎。随便。
猜你喜欢
  • 2011-08-08
  • 2021-12-26
  • 1970-01-01
  • 2013-10-03
  • 2012-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多