1

我只是在编写一个小程序,它接收来自用户的输入,然后将其打印回给他们。但是,当我运行程序时,它会要求输入两次(它会打印初始语句,然后一旦您键入并按 Enter 键,什么也不会发生,但如果您再次执行它,它会工作并打印。)顶部值显然没有重量或意思是,因为它没有显示出来,但第二个值确实打印得很好。

package kek;
import java.util.Scanner;

public class Kek {

    public static void main (String[] args){
        Scanner input = new Scanner(System.in);

        System.out.println("What is kek? (Top, bottom, etc.)");
        String s1 = input.next();
        if (input.hasNext("kek")) {
            System.out.println("No.");
            System.exit(0);
        } else {
            System.out.println(s1 + "kek");
            input.close();
        }
    }
}

这是控制台:

What is kek? (Top, bottom, etc.)
top
top
topkek

What is kek? (Top, bottom, etc.)
kek
kek
No.

我正在使用日食开普勒。

4

6 回答 6

1

不确定,但这是你的意思吗?

public static void main(String[] args) {
    System.out.println("What is kek? (Top, bottom, etc.)");

    Scanner input = new Scanner(System.in);
    String string = input.nextLine();

    if(string.equals("kek")){
        System.out.println("No.");
        System.exit(0);
    }else{
        System.out.println(string + "kek");
        input.close();        
    }    
}

如果不是,那么您需要更具体地说明您要实现的目标。从你现在写的内容来看,你真正想要的是什么

于 2013-09-19T13:52:06.647 回答
1

您使用next()and要求输入两次hasNext()。只需执行以下操作:

package kek;

import java.util.Scanner;

public class Kek {
    public static void main (String[] args){

        Scanner input = new Scanner(System.in);
        System.out.println("What is kek? (Top, bottom, etc.)");
        String s1 = input.next();
        //just compare strings using the .equals() method instead
        //of using the hasNext() which will ask for another input
        if ("kek".equals(s1)) {
            System.out.println("No.");
            System.exit(0);
        }
        else{
            System.out.println(s1 + "kek");
            input.close();
        }
    }
}
于 2013-09-19T13:59:58.737 回答
0

input.next();在代码中删除并使用。input.next();获取输入并获取has.next()其他输入

于 2013-09-19T13:49:03.750 回答
0

您首先将一个值读入s1,然后告诉Scanner寻找另一行,其中包含该值"kek"。也许你的意思是说类似的东西if(input.equals("kek"))

于 2013-09-19T13:49:35.470 回答
0

@朱利安。这就像晚了 5 年,但我修复了你的代码。

import java.util.Scanner;

public class Methods2 {


    static Scanner userInput = new Scanner(System.in);


    static String answer;
    static int yes1no2;
    static int loopStage = 1;

    public static void main(String[] args)
    {
        System.out.println("Welcome to the bank.\nWould you like to open an account?");
        answer = userInput.nextLine();
        while (loopStage == 1)
        {
            if (yesOrNo() == 1)
            {
                loopStage = 2;
                System.out.println("Great.");
            }
            else if (yesOrNo() == 2)
            {
                loopStage = 2;
                System.out.println("Ok, please come again.");
            }
        }
    }
    public static int yesOrNo()

    {

            if (answer.equalsIgnoreCase("yes")) {

                yes1no2 = 1;
                System.out.println(yes1no2);
            }

            else if (answer.equalsIgnoreCase("no")) {

                System.out.println(yes1no2);
                yes1no2 = 2;
            } else {
                yes1no2 = 3;
                System.out.println("Please say 'Yes' or 'No'.");
                answer = userInput.nextLine();
            }
            return yes1no2;

    }
}

所以.. answer = userInput.nextLine(); 再次成为真正的交易。看看我怎么说: System.out.println(yes1no2); 在您向系统询问 yes1no2 的部分中?这样做将显示通过扫描仪时您的输入实际发生的情况。

你会发现,如果你在你的代码上这样做,它会显示:是的打印.. 1

没有打印.. 0 (然后它会要求你再次拒绝的新值)没有打印.. 2

把:answer = userInput.nextLine(); 上述方式将使输入值在再次检查之前不会离开缓冲区。那么这里发生了什么?- 程序询问用户一个值 - 检查 if 语句是否为真?处理语句内的代码:移到下一行并且..(这是吸引人的部分)它将把值放在扫描仪缓冲区中,因为它用于检查是否是 == 真(扫描仪值回落到 0)[ps don '不要尝试将 No 值更改为 0,因为 Scanner 值!= 0,Scanner 值 == 根本不存在] 然后由于 Scanner = 0 和 0 不是括号内的值,它会再次询问您。你再次输入 No 然后它将注册 No = 2 我还必须修复 else 语句(yes1no2),因为它无休止地循环:基本上只是要求将新输入放入缓冲区中就可以了。

将扫描仪缓冲区放在括号外,它将检查整个括号以查看是否有任何东西连接到它,然后再删除该值。自己试试

我很抱歉格式不好,就像我的第一篇文章一样,我真的想查一下,因为我从昨天开始只做扫描仪,所以如果我在这里错了,请纠正我,我很高兴了解更多信息

于 2021-09-16T11:58:02.777 回答
0

我遇到了完全相同的问题,尽管当我输入“否”或“否”时它只需要输入两次......我不确定为什么只有“否”区域受到影响。

import java.util.Scanner;

public class Methods2 {

static Scanner userInput = new Scanner(System.in);

static String answer;
static int yes1no2;
static int loopStage = 1;

public static void main(String[] args)
{
    System.out.println("Welcome to the bank.\nWould you like to open an account?");
    while (loopStage == 1)
    {
        if (yesOrNo() == 1)
        {
            loopStage = 2;
            System.out.println("Great.");
        }
            else if (yesOrNo() == 2)
        {
            System.out.println("Ok, please come again.");
        }
    }
}
public static int yesOrNo()
{
    answer = userInput.nextLine();
    if (answer.equalsIgnoreCase("yes"))
    {
        yes1no2 = 1;
    }
    else if (answer.equalsIgnoreCase("no"))
    {
        yes1no2 = 2;
    }
    else
    {
        yes1no2 = 3;
        System.out.println("Please say 'Yes' or 'No'.");
    }
    return yes1no2;
}

}

于 2016-11-25T04:19:55.343 回答