Java - 无法摆脱while循环?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (59)

我正在尝试编写一个java程序,用户输入表示二进制数字(0s和1s)的字符串。程序应验证输入是否为二进制数,如果不是这种情况,程序将打印一条消息,表明该数字不是有效的二进制数。如果用户输入是可接受的,程序应计算该单词中有多少1并输出计数。

这是我到目前为止所做的,但当我输入一个像“1234”这样的字符串并进入第三个while循环时,它只是不断重新打印消息“你的号码只能包含1和0。请永远只包含1和0的二进制值:“,即使我输入有效的字符串,如”0010“。这几天我一直在绞尽脑汁,所以任何帮助都非常感激。

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


    System.out.println("Welcome to the binary scanner!");
    System.out.print("Please enter a string in binary fashion: ");

    while (!scan.hasNextInt()) {
       System.out.println("That's not a binary number...\nPlease enter a binary number");
       String temp = scan.nextLine();
    }

    input = scan.nextLine();
    input = input.trim();


    while (!input.contains("1")){
        System.out.println("Your number does not contain any ones.\nPlease enter a binary number that contains ones.");
        input = scan.nextLine();            
    }



    while (input.contains("2") || input.contains("3") || input.contains("4") || input.contains("5") || input.contains("6") || input.contains("7") || input.contains("8") || input.contains("9")){
        System.out.println ("Your number can only contain ones and zeros.\nPlease ever a binary value containing only ones and zeros: ");
        input = scan.nextLine();
    }


    while (input.contains("1")){ 
        boolean notOne = false;
        int oneCount = 0;

        for (int x = 0; x < input.length(); x++){
            char c = input.charAt(x);
            if (c == '1' || c == '0'){
                if (c == '1'){
                    oneCount++;
                    notOne = true;
                    }
            }
            else {
                notOne = false;
            }


            }System.out.println("The binary string contains " + oneCount + (oneCount == 1 ? " one." : " ones."));
            break;
    }

}

}

提问于
用户回答回答于

在此输入图像描述您的代码工作正常。我编译并运行它。当我给出“1234”时,它说“那不是二进制数...请输入二进制数”。但是当我给一个数字作为整数时,它会说“你的数字只能包含1和0。请永远是一个只包含1和0的二进制值:”。

当我给一个整数作为二进制时,它告诉我们有多少个。while循环中没有错误。

输出样本

用户回答回答于

欢迎来到Stackoverflow。我无法重现你的问题(我先输入1234作为输入,然后我将输入作为0010输入,并且工作正常)。但是我对你的代码进行了一些修改,因为你的最后一个while循环是没用的。请尝试使用“调试器”来识别您的问题或发布一些屏幕截图来证明您的问题。

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

    System.out.println("Welcome to the binary scanner!");
    System.out.print("Please enter a string in binary fashion: ");

    while (!scan.hasNextInt())
    {
        System.out.println("That's not a binary number...\nPlease enter a binary number");
        String temp = scan.nextLine();
    }

    String input = scan.nextLine();
    input = input.trim();


    while (!input.contains("1"))
    {
        System.out.println("Your number does not contain any ones.\nPlease enter a binary number that contains ones.");
        input = scan.nextLine();
    }


    while (input.contains("2") || input.contains("3") || input.contains("4") || input.contains("5") || input.contains("6") || input.contains("7") || input.contains("8") || input.contains("9"))
    {
        System.out.println("Your number can only contain ones and zeros.\nPlease ever a binary value containing only ones and zeros: ");
        input = scan.nextLine();
    }


    int oneCount = 0;

    for (int x = 0; x < input.length(); x++)
    {
        char c = input.charAt(x);
        if (c == '1')
        {
            oneCount++;
        }
    }
    System.out.println("The binary string contains " + oneCount + (oneCount == 1 ? " one." : " ones."));

}

扫码关注云+社区

领取腾讯云代金券