TheGamer27
TheGamer27

Reputation: 25

How to separate integers using arrays?

I am a noob at programming so I might have trouble with some key terms. I'm trying to write a program where a user types in a minimum number and a maximum number and it generates a random number. After that I want to know how many even numbers and odd numbers are in the random generated number. I was able to successfully complete the first part but I am having trouble detecting how many even and odd numbers are in the random generated number.

SAMPLE OUTPUT: Ex: Random generated number is: 478,099 # of even digits: 2 # of odd digits: 3

I tried creating local variables that did not work, I want to use a switch case statement but I am having trouble. For now I used a for loop but I want to use a switch case.

    public static void main(String[] args) 
     {
    DecimalFormat fmt = new DecimalFormat("###,###,###,###,###"); 
    Scanner scanner = new Scanner(System.in);
    int max = -1;
    int min = 0;
    int [] diffvalue = new int [1];
    System.out.println("Enter in a maximum value: ");
    max = scanner.nextInt();
    System.out.println("Enter in a minimum value: ");
    min = scanner.nextInt();
    if (min > max)
    {
    System.out.println("Your minimum value is greater then your 
          maximum value.");
    }
    for (int i = 0; i < diffvalue.length; i++)
    {
        diffvalue[i] = (int)(Math.random()*(max-min)+min);
    }
    System.out.println("Random Value: ");
    for(int i = 0; i < diffvalue.length; i++)
    {
        System.out.println(fmt.format(diffvalue[i]));
     }
}
  int l = diffvalue[i];
   while (l > 0)
  {
  switch ((l % 10) % 2) 
    {
    case 1:
        odd++;
        break;
    default:
        even++;
 } 
  l /= 10;
        }

    }

I can't look at the whole number separately.

 **EDIT 1**
    import java.util.Scanner;
    import java.text.DecimalFormat;
    public class MyClass 
    {
    public static void main(String args[]) 
    {
    DecimalFormat fmt = new DecimalFormat("###,###,###,###,###"); 
    Scanner scanner = new Scanner(System.in);
    int max = -1;
    int min = 0;
    int [] diffvalue = new int [1];
    System.out.println("Enter in a maximum value: ");
    max = scanner.nextInt();
    System.out.println("Enter in a minimum value: ");
    min = scanner.nextInt();
      int even = 0; int odd = 0;
    if (min > max)
    {
        System.out.println("Your minimum value is greater then your 
       maximum value.");
    }
    for (int i = 0; i < diffvalue.length; i++)
    {
        diffvalue[i] = (int)(Math.random()*(max-min)+min);
    }
    System.out.println("Random Value: ");
    for(int i = 0; i < diffvalue.length; i++)
    {
    System.out.println(fmt.format(diffvalue[i]));
    }
    for(int i = 0; i < diffvalue.length; i++)
   {
    int l = diffvalue[i];
    while (l > 0)
    {
        switch ((l % 10) % 2) 
        {
            case 1:
                odd++;
                break;
            default:
                even++;
        } 
       l /= 10;
   }
   System.out.println("Even:" + even);
   System.out.println("Odd: " + odd);

}
}
}

I have gotten it to detect the even numbers and the odd numbers now I am curious to know if there is a way to do it without having the the two variables (odd, even).

Upvotes: 0

Views: 53

Answers (1)

Harshal Parekh
Harshal Parekh

Reputation: 6017

You are not dividing the value l by 10. Which is why it is going into a infinite loop.

public static void even(int[] diffvalue)
{
    int even = 0;
    for(int i = 0; i < diffvalue.length; i++)
    {
        int l = diffvalue[i];
        while (l > 0)
        {
            if((l % 10)%2==0) // this line is changed
            {
                even++;
            }
            l = l/10; // this line is changed
        }
    }
}

Also, if you are checking for even, you have to do ...%2 == 0. Find your errors fixed in the code above.

EDIT: you can also calculate the odd numbers in the same loop, like this:

if((l % 10)%2==0) // this line is changed
{
    even++;
}
else 
{
    odd++;
}

EDIT3: The code was supposed to go inside the method, not replace the method. I do not see any use case for a switch case here, but it can be accommodated like this:

public static void even(int[] diffvalue)
{
    int even = 0;
    for(int i = 0; i < diffvalue.length; i++)
    {
        int l = diffvalue[i];
        while (l > 0)
        {
            switch ((l % 10) % 2) 
            {
                case 1:
                    odd++;
                    break;
                default:
                    even++;
            } 
        l /= 10;
    }
}

Hope this helps. Good luck.

Upvotes: 1

Related Questions