Check if input number is in valid binary format

I tried to create a simple program that checks if the user input number is a binary number and that number is in the correct binary format -> no leading zeros. This is below my code, but it doesn't work. I would appreciate it if someone could help.

    public class CheckNumberBinary {
    public static void main(String args[]) {
        int r = 0, c = 0, num, b;

        Scanner sl = new Scanner(System.in);
        num = sl.nextInt();
       int firstDigit = Integer.parseInt(Integer.toString(num).substring(0, 1));// i want to get the first digit from the input
        if (firstDigit>0||firstDigit==1 ){
            while (num > 0) {
                if ((num % 10 == 0) || (num % 10 == 1))
                    c++;
                r++;
                num = num / 10;
            }
            if (c == r) {
                System.out.println(true);
            } else
                System.out.println(false);
        } else System.out.printf("WARNING: The number starts with 0");
    }
}

      

+3


source to share


5 answers


There is a better solution, you can check if your input contains only 0 and 1, and the input is large - 0, then the number of validates, so you can use String instead, like:

String num;
Scanner sl = new Scanner(System.in);
num = sl.next();
if (num.matches("[01]+") && !num.startsWith("0")) {
    System.out.println("Correct number :" + num);
}else{
    System.out.println("Not Correct number!");
}

      


  • num.matches("[01]+")

    will check if your input contains only 0 and 1.

  • !num.startsWith("0")

    to answer this part without leading zeros




Test:

10010     -> Correct number :10010
00001     -> Not Correct number!
11101     -> Correct number :01101
98888     -> Not Correct number!

      

+2


source


Why not just use standard library methods?



static boolean isValidBinary(final int input) {
    final String binary = String.valueOf(input);

    return binary.replaceAll("[01]", "").isEmpty() && !binary.startsWith("0");
}

      

0


source


you shouldn't use sl.nextInt();

, it will translate '011' to 11, so when the user enters '011' the variable 'num' gets the value int 11. You should just use sl.next()

to get the user's input.

0


source


You can try something like this:

public static void main(String args[]) {
     boolean binary=true;  // boolean for final decision
     String input; 
     int counter=0; // to count how many leading zeros there are in the input
     int target = 5; // specify how many leading zeros allowed!!

     Scanner in = new Scanner(System.in);
     input = in.nextLine(); // take the entire line as a String

    //first loop through the whole input to check for any illegal entry (i.e. non digits)
    for(char digit : input.toCharArray()){
         if(!Character.isDigit(digit)){ // catch any non-digit !
            System.out.println("Illegal Input Found!"); // inform user and exit
            System.exit(0);
         }
         if(digit!='0' && digit!='1'){ // check if it not 1 and not 0
               binary = false;
         }
    }

    // now if there are no illegal inputs, check if it starts with leading zeros 
    if(input.charAt(0)=='0'){ // potential leading zeros, check the rest
       while(input.charAt(counter)=='0'){ // while there are followed zeros
            counter++;
            if(counter>target && binary){ // leading zeros only in case it a binary
                System.out.println("Illegal Leading Zeros!");
                System.exit(0);
            }
        }
     }


    // now if your program reach this point that means the input is valid and doesn't contain leading zeros in case it a binary
    if(binary){
       System.out.println("It is a binary number");
    }
    else{
         System.out.println("It is NOT a binary number");
    }
}

      

Test:

01010101  ->  It is a binary number
01010105  ->  It is NOT a binary number
0000001   ->  Illegal Leading Zeros!
0000005   ->  It is NOT a binary number
000000A   ->  Illegal Input Found!

      

0


source


I think you need to check the "if" state up to that point, because you don't want the number to start at 0, right? so ... just ask for it, I tried it and formulated everything ok:

public class CheckNumberBinary {
    public static void main(String args[]) {
        int r = 0, c = 0, num, b;

        Scanner sl = new Scanner(System.in);
        String input = sl.next();
        num = Integer.parseInt(input);
        String firstDigit = (input.length() > 0 ? input.substring(0, 1) : "" );
        if (firstDigit.equals("0")) {
            System.out.printf("WARNING: The number starts with 0");
        } else {

            while (num > 0) {
                if ((num % 10 == 0) || (num % 10 == 1))
                    c++;
                r++;
                num = num / 10;
            }
            if (c == r) {
                System.out.println(true);
            } else
                System.out.println(false);
        }
    }

}

      

The rest of your code is doing its mission! It tells you if a number is binary or not and now plus tells you if your code starts with unnecessary zeros

0


source







All Articles