How to check for a Duck number in java

Duck Number ?

If a number contains one or more zeroes but does not start with a zero, it is called a Duck Number. Examples of Duck numbers are 2405, 452094, 102 etc. Examples of numbers which are not Duck numbers are 1423, 5736, 0198 etc.

There are different methods to check for a duck number in java. This post will detail out a couple of those methods.

Method 1 : Using methods of String class

Read the number to be tested as a String. Check if the String has a 0 using its contains method and check if the string begins with a 0 using startsWith method of String class. Now apply appropriate logical operators to ensure that the string has one or more 0s and it does not begin with a 0.

import java.util.Scanner;
 
public class DuckNumberTester {
 
	public static void main(String[] args) {
		Scanner reader = new Scanner(System.in);
		System.out.println("Enter a number");
		// read the number as string
		String number = reader.nextLine();
		// close reader
		reader.close();
		//check whether number has 0 and it does not begins with 0
		if (number.contains("0") && !number.startsWith("0")) {
			System.out.println("Number is a Duck number");
		} else {
			System.out.println("Number is not a Duck number");
		}
	}
}

Output

Enter a number
3456
Number is not a Duck number

Enter a number
506
Number is a Duck number

Method 2 : Iterating the number and checking every digit

Iterate over the number read as String and compare each digit with 0 using charAt method of java.lang.String class. If the digit is a zero, increment a counter variable. When iterating over the number and comparing the digit with 0, a check is performed whether the digit is the first digit. If the digit is a 0 and is the first digit, a flag is set and the loop is terminated, since if the first digit is 0, the number cannot be a Duck number and there is no need of going forward.
At the end of loop, the condition that the number does not start with a 0 and has at least 1 zero is checked to determine whether the number is a Duck number or not.

import java.util.Scanner;
 
public class DuckNumberTester {
 
	public static void main(String[] args) {
		Scanner reader = new Scanner(System.in);
		System.out.println("Enter a number");
		// read the number as string
		String number = reader.nextLine();
		// close reader
		reader.close();
		int zeroCount = 0;
		boolean startsWithZero = false;
		// iterate over the number
		for (int digitIndex = 0; digitIndex < number.length(); digitIndex++) { 
                      // get digit at current index 
                      char digit = number.charAt(digitIndex); 
                      // check if the digit is a 0 
                      if (digit == '0') { 
                          // check if this is the first digit
                          if (digitIndex == 0) { 
                              // set a flag and terminate the loop 
                              startsWithZero = true; 
                              break;
                          } 
                          // increment number of zeroes 
                          zeroCount++;
                      } 
                } 
                // check if the number does not start with a zero and contains at least 1 zero
                if (!startsWithZero && zeroCount > 0) {
			System.out.println("Number is a Duck number");
		} else {
			System.out.println("Number is not a Duck number");
		}
	}
}

Output

Enter a number
4508
Number is a Duck number

Enter a number
567
Number is not a Duck number

Mark Your Impression

Close Menu