Как разделить целые числа с помощью массивов? - PullRequest
0 голосов
/ 09 ноября 2019

Я новичок в программировании, поэтому у меня могут возникнуть проблемы с некоторыми ключевыми терминами. Я пытаюсь написать программу, в которой пользователь вводит минимальное и максимальное число, и он генерирует случайное число. После этого я хочу узнать, сколько четных и нечетных чисел содержится в случайном сгенерированном числе. Мне удалось успешно завершить первую часть, но у меня возникают проблемы с определением количества четных и нечетных чисел в случайном сгенерированном числе.

ВЫБОР ОБРАЗЦА: Пример: Случайное сгенерированное число:478 099 # четных цифр: 2 # нечетных цифр: 3

Я попытался создать локальные переменные, которые не работали, я хочу использовать оператор переключения регистра, но у меня возникли проблемы. На данный момент я использовал цикл for, но я хочу использовать регистр переключателя.

    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;
        }

    }

Я не могу посмотреть на целое число отдельно.

 **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);

}
}
}

Я получил его вобнаружение четных и нечетных чисел теперь мне интересно узнать, есть ли способ сделать это без наличия двух переменных (нечетных, четных).

1 Ответ

1 голос
/ 09 ноября 2019

Вы не делите значение l на 10. Именно поэтому оно входит в бесконечный цикл.

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
        }
    }
}

Кроме того, если вы проверяете на четность, вы должны сделать ...%2 == 0. Найдите ошибки, исправленные в приведенном выше коде.

РЕДАКТИРОВАТЬ: вы также можете рассчитать нечетные числа в том же цикле, например:

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

РЕДАКТИРОВАТЬ3: код должен был войти внутрьметод, а не заменить метод. Я не вижу здесь ни одного варианта использования для случая коммутатора, но его можно приспособить так:

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;
    }
}

Надеюсь, это поможет. Удачи.

...