Как напечатать последовательность int блоками по 5 в Java

#java

#java

Вопрос:

Я застрял в упражнении на Java и был бы очень признателен за некоторые рекомендации.

Я должен ввести два числа (первое между 100 и 150, а второе между 10 и 50) и распечатать промежуточные числа в новой строке через каждые пять чисел.

Например, если я ввожу 130 и 49, мне нужно распечатать:

129 128 127 126 125

124 123 122 121 120

119 …

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

Вот мой код:

 import java.util.Scanner;

public static void main(String[] args) {

Scanner keyboard = new Scanner(System.in);
System.out.println("Input number”);

int num=keyboard.nextInt();

while(num<100 || num>150) {
        System.out.println(“Input number between 100 and 150");
        num=keyboard.nextInt();
    }

    System.out.println(“Input number 2”);
    int num2=keyboard.nextInt();

while (num2<10 || num2>50){
        System.out.println(“Input number between 10 and 50");
        num2=keyboard.nextInt();
    }

int i = num;

for (i=num;i>=num2;i--) {
       System.out.print(i " ");
    }
   }
}
  

Комментарии:

1. Кажется, вы забыли включить вопрос в свой вопрос.

2. И вы забыли написать заголовок, который фактически описывает вашу основную проблему.

3. как насчет того, чтобы, например, использовать переменную counter, увеличивая ее каждый раз, когда вы печатаете число, и печатать новую строку каждый раз, когда она достигает 5, 10, 15 и т.д.? Или просто сбросить ее на 0, когда она достигнет 5?

4. Ну, вопросительного знака нет, но имо все еще совершенно ясно, в чем вопрос…

Ответ №1:

Попробуйте использовать mod, например.

 if(countnum % 5 == 0){
    do something
}
  

Комментарии:

1. Это немного вводит в заблуждение. Требуется значение по модулю, но оно основано не на печатаемом числе, а на том, сколько чисел было напечатано.

Ответ №2:

так же, как ответ pietergdp, но вместо этого используйте свою переменную итерации

 int rem = (num   1) % 5;

for ( i = num; i >= num2 ; i--) {
      System.out.print(i " ");
      if(i % 5 == rem){
         System.out.print( "n" ); // this inserts the line break
      }
}
  

Позвольте мне объяснить.
Мы не знаем, с какого номера начнется цикл for. Таким образом, при использовании mod 5 разрыв строки вставляется не после пятого числа, а когда остаток от числа равен 0. Которая может быть с первым номером, если цикл начинается со 100.

Итак, обходной путь заключается в добавлении 1 к вашему исходному числу (которое было бы пятым числом предыдущей строки, если бы оно было), затем вы вычисляете его остаток. Тогда каждый раз, когда число имеет тот же остаток, который вы рассчитали, это будет пятое число в этой строке. В результате чего вставляется разрыв строки

Комментарии:

1. Спасибо. Я действительно ценю ваше объяснение. Я боролся с этим упражнением пару дней и не мог разобраться, но, наконец, я могу это понять.

Ответ №3:

Сначала вы должны сделать:

 do{
System.out.println(“Input number between 100 and 150");
num=keyboard.nextInt();
}
while(!(num>100 amp;amp; num<150));
  

вместо:

 while(num<100 || num>150) {
        System.out.println(“Input number between 100 and 150");
        num=keyboard.nextInt();
    }
  

аналогично для второй проверки:

Комментарии:

1. Большое спасибо за ваше предложение, @ScottS

2. Нет проблем. 🙂 В любое время.

Ответ №4:

Один из подходов заключается в использовании mod, но это не простая операция mod.

 int offset = num % 5; // calculate the offset of the first number
for (i = num; i >= num2; i--) {
    if (i % 5 == offset amp;amp; i!=num) { 
    // every five lines, but not at the beginning, print a new line
        System.out.println("");
    }
    System.out.print(i   " ");
}
  

Вы также могли бы использовать вторую переменную counter, чтобы вам не приходилось иметь дело со смещением:

 for (int i = num, j = 0; i >= num2; i--, j  ) {
    if (j % 5 == 0 amp;amp; j > 0) System.out.println("");
    System.out.print(i   " ");
}
  

Комментарии:

1. Большое спасибо. Использование второй переменной выглядит для меня еще чище.

Ответ №5:

Для того, чтобы распечатать ваши числа в формате, который вы указали выше, с числами в группах по 5, вам нужно добавить следующее в ваш цикл for.

 int outputCount = 0;
    for (i=num;i>=num2;i--) {
        System.out.print(i " ");
        if(outputCount%5==4)
        {
            System.out.print("n");
        }
        outputCount  ;
    }
  

Это должно заставить ее печатать правильно. Это работает с использованием оператора mod. Каждый раз, когда вы находитесь на 5-м номере в выходных данных в строке, остаток от индексного номера, деленный на 5, будет равен 4.

Комментарии:

1. Большое спасибо. Это имеет смысл, я попробую

2. @Neypu: это работает только тогда, когда num%5==0 , т.е. делится на 5. Для 150 ir работает, но для 149 — нет.

3. @user140547 Теперь это должно обрабатывать каждый случай. Он просматривает выходные данные, а не число.

4. @Neypu Если вы попробуете это снова, теперь это должно сработать для всех случаев.

5. Еще раз спасибо @davloi. Теперь каждый случай работает просто отлично