4.23 Обратный отсчет времени до совпадения цифр в Java - PullRequest
1 голос
/ 07 февраля 2020

Итак, у меня есть эта лаборатория, и я продолжал получать 9 из 10 правильных. Я закончил тем, что изменил свой исходный код на эту очень дурацкую версию, чтобы учесть дополнительный момент. Вопрос в следующем:

Напишите программу, которая принимает целое число в диапазоне 20-98 в качестве входных данных. Результатом является обратный отсчет, начинающийся с целого числа и заканчивающийся, когда обе выходные цифры идентичны.

мой код:

import java.util.Scanner;
public class LabProgram {
   public static void main(String[] args) {
      Scanner scnr = new Scanner(System.in);
      int userDigit;
      int newDigit;

      userDigit = scnr.nextInt();

      newDigit = userDigit - 1;

      if ((userDigit > 19) && (userDigit < 99)) {
         System.out.print(userDigit + " ");

      }
      else {
         System.out.println("Input must be 20-98");
      }


      while ((userDigit > 19) && (userDigit < 99) && (newDigit % 11 != 0)) {
         if (userDigit % 11 == 0) {
            System.out.println();
            break;
         }
         System.out.print(newDigit + " ");
         --newDigit;

         if (newDigit % 11 == 0) {
            System.out.println(newDigit + " ");
            break;
         }
      }


   }
}

Может кто-нибудь, пожалуйста, скажите мне, если я обдумал это и если есть был более простой способ отформатировать для l oop, не имея все "если". Я новичок в этом и беру уроки уже 4 недели. Любые предложения будут ценны. Я знаю, что, возможно, был какой-то способ использовать другой метод, но в инструкциях было указано "while" l oop.

1 Ответ

0 голосов
/ 07 февраля 2020

Надеюсь, это поможет:

public static void main(String[] args) {
    Scanner scnr = new Scanner(System.in);
    int userDigit = scnr.nextInt();
    scnr.close();

    if ((userDigit <= 19) || (userDigit >= 99))
        System.out.println("Input must be 20-98");

    do {
        System.out.println(userDigit + " ");
        if (userDigit % 11 == 0)
            break;

        --userDigit;

    } while ((userDigit > 19));
}

Поскольку исходное значение userDigit больше не нужно использовать, дополнительную переменную newDigit можно пропустить.

Кроме того, если требуется while-l oop, то рассмотрение do-while может помочь распечатать начальный ввод с первого места, что может помочь пропустить последующую избыточную проверку.

После этого вы можете просто работать с исходным userDigit (проверьте, можно ли разделить текущее значение на 11; 'yes' : выпрыгнуть из while-l oop, 'нет' : уменьшить его и повторять эти шаги)

...