Вложенный цикл для получения определенного вывода - PullRequest
0 голосов
/ 24 октября 2018

Я только начал изучать Java и пытаюсь произвести следующий вывод:

$££$$$££££$$$$$

Моя текущая попытка выглядит следующим образом:

for (i = 1; i < 3; i++) {
    System.out.print("$£");
    for (j = 1; j < i + 2; ++j) {
        System.out.print("$");

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

$£$$$£$$$

Ответы [ 5 ]

0 голосов
/ 24 октября 2018

Вы можете использовать один цикл, просто если вы знаете, что есть много способов повторить строку в Java, поэтому, если вы используете Java 8, вы можете использовать:

Java 8

int i = 1;
for (i = 1; i < 4; i+=2) {
    System.out.print(String.join("", Collections.nCopies(i, "$")));
    System.out.print(String.join("", Collections.nCopies(i + 1, "£")));
}
System.out.print(String.join("", Collections.nCopies(i, "$")));

Java 11

Если вы используете Java 11, вы можете использовать String::repeat:

int i = 1;
for (i = 1; i < 4; i+=2) {
    System.out.print("$".repeat(i));
    System.out.print("£".repeat(i + 1));
}
System.out.print("$".repeat(i));

Простой код Java

Или вы можете создать свой собственный метод повтора, используя цикл, ваш код может быть:

public static void main(String[] args) {
    int i = 1;
    for (i = 1; i < 4; i+=2) {
        System.out.print(repeatString("$", i));
        System.out.print(repeatString("£", i));
    }
    System.out.print(repeatString("$", i));
}

public static String repeatString(String s, int nbr) {
    StringBuilder result = new StringBuilder("");
    for (int i = 0; i < nbr; i++) {
        result.append(s);
    }
    return result.toString();
}

Ouputs

$££$$$££££$$$$$
0 голосов
/ 24 октября 2018

Вы можете поместить символы, которые вы хотите напечатать, в массив, и когда вы зацикливаете его, вы можете использовать индекс в сочетании с оператором остатка для переключения между символами.Тогда вам просто нужно иметь вложенный цикл, который повторяет напечатанный символ, сколько раз текущий индекс равен.

final String[] characters = {"£", "$"};
for (int i = 1; i <= 5; i++)
    for (int j = 0; j < i; j++)
        System.out.print(characters[i % characters.length]);

В Java 11 вы могли бы даже отказаться от вложенного цикла и заменить его на String#repeat(int) для повторения строки:

final String[] characters = {"£", "$"};
for (int i = 1; i <= 5; i++)
    System.out.print(characters[i % characters.length].repeat(i));
0 голосов
/ 24 октября 2018

Вы должны думать об этом как о «как это сделает человек», а затем пытаться использовать тот же подход в коде.

Итак, что человек делает:

  • Запись 1x$
  • Запись 2x £
  • Запись 3x $
  • Запись 4x £

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

теперь давайте сделаем это в коде

let howMuchTimes = 5;
const charA = '$';
const charB = '£';
let actualChar = charA;
let output = '';

for (let i=0; i < howMuchTimes; i++){    
  for (let j=0; j < i+1; j++) {
    output += actualChar;
  }
    
  if (actualChar === charA) {
    actualChar = charB;
  } else {
    actualChar = charA;
  }
}

console.log(output);

(он в javascript, так что вы можете выполнить его прямо здесь, но в этом коде нет большой разницы в Java)

0 голосов
/ 24 октября 2018

Вы можете сделать что-то подобное, если хотите легко изменить символы и / или количество раз их появления:

    char odd = '$';
    char even = '£';
    int amount = 6;

    for (int i = 1; i <= amount; i++) {
        for (int j = 0; j < i; j++) {
            System.out.print(i % 2 == 0 ? even : odd);
        }
    }

Вывод:

$££$$$££££$$$$$££££££
0 голосов
/ 24 октября 2018

Обновлен Ваш код ниже.

char temp = '$';
for (int i = 1; i < 6; i++) {
    for (int j = 0; j < i; ++j) {
        System.out.print(temp);
    }
    if (temp == '$') {
        temp = '£';
    }
    else {
        temp = '$';
    }
}

Попробуйте, я обновил ваш код.Не стесняйтесь спрашивать, если что-то не понятно.

Вывод:

$ ££ $$$ ££££ $$$$$

Попробуйте здесь

...