user3122474
user3122474

Reputation: 11

Some trouble in loop

Hi there,
I'm a newbie in java and I have a problem with this code. I'm thinking if it is a problem in loop or something..

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

        int z = 0;
        String input;
        int[] ABArray = new int[2];

        while (z == 0) {
            System.out.println("Input X to terminate.");
            System.out.print("Input: ");
            input = scn.nextLine().toLowerCase();

            for (int i = 0; i < input.length(); i++) {
                char AB = input.charAt(i);

                ABArray[AB - 'a']++;
            }

            if (ABArray[0] == 0 || ABArray[1] == 0) {
                System.out.println("Not Equal");
                System.out.println("");

            } else if (ABArray[0] == ABArray[1]) {
                System.out.println("Equal");
                System.out.println("");
            } else if (ABArray[0] != ABArray[1]) {
                System.out.println("Not Equal");
                if (ABArray[0] > ABArray[1]) {
                    System.out.println("The number of A is greater than B.");
                } else if (ABArray[0] < ABArray[1]) {
                    System.out.println("The number of B is greater than A.");
                }
                System.out.println("");
            }
        }
    } catch (ArrayIndexOutOfBoundsException X) { }  //Terminates the program

}

The problem is this
I/O

Input:                      
ABABAB

Output:                              
Equal

Input:                          
AABBB

Output:                            
Not Equal
The number of B is greater than A.

Input:                                 
AABB    //It is equal.

Output:                       
Not Equal  //It says not.
The number of B is greater than A.

As you see, the problem is when I input equal A and B at the first, it says equal, when I input not equal A and B but at the third when I input equal A and B it says not equal.

Problem solved. Thanks for the help.

Upvotes: 1

Views: 69

Answers (3)

Sujith PS
Sujith PS

Reputation: 4864

You can use this code:

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

        int z=0;
        String input;
        int[] ABArray = null;

        while(z==0)
        {
            ABArray = new int[2];
            System.out.println("Input X to terminate.");
            System.out.print("Input: ");
            input=scn.nextLine().toLowerCase();

            for ( int i = 0; i < input.length(); i++ ) 
            {
                char AB=input.charAt(i);

                ABArray[AB-'a']++;

            }

            if(ABArray[0]==0||ABArray[1]==0)
            {
                System.out.println("Not Equal");
                System.out.println("");

            }
            else if(ABArray[0]==ABArray[1])
            {
                System.out.println("Equal");
                System.out.println("");
            }
            else if(ABArray[0]!=ABArray[1])
            {
                System.out.println("Not Equal");
                if(ABArray[0]>ABArray[1])
                {
                    System.out.println("The number of A is greater than B.");
                }
                else if(ABArray[0]<ABArray[1])
                {
                    System.out.println("The number of B is greater than A.");
                }
                System.out.println("");
            }
        }
    }
    catch(ArrayIndexOutOfBoundsException X) //Terminates the program
    {
      X.printStackTrace();
    }

}

Upvotes: 0

Martin Dinov
Martin Dinov

Reputation: 8825

How about you simply read in the input into a string, then loop through it, counting the number of occurrences of each character you are interested in (here 'a' and 'b'), checking whether their counts are equal? So this works for example:

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

            while (true) {
                System.out.println("Input X to terminate.");
                System.out.print("Input: ");
                input = scanner.nextLine().toLowerCase();
                if (input.equals("X")) {
                    break;
                } else {
                    int countA = 0;
                    int countB = 0;
                    for (int i = 0; i < input.length(); i++) {
                        if (input.charAt(i) == 'a') {
                            countA++;
                        } else if (input.charAt(i) == 'b') {
                            countB++;
                        }
                    }
                    if (countA == countB) {
                        System.out.println("Equal!");
                    } else {
                        System.out.println("Not equal!");
                    }
                }
            }
        } catch (ArrayIndexOutOfBoundsException e) // Terminates the program
        {

        }

    }

Upvotes: 0

aga
aga

Reputation: 29454

You have to set all the values in ABArray to zero every time you start to work inside the while loop. Right now on the third time you start the while loop (with AABB input) you still keep the values which were left from the previous run of the loop - 5 in the 0-indexed element of an array and 6 in the 1-indexed element of an array, thus the program gives you the wrong output.

Upvotes: 1

Related Questions