【问题标题】:Nested loop to produce specific output嵌套循环以产生特定的输出
【发布时间】:2019-03-28 16:24:44
【问题描述】:

我刚刚开始学习 java 并试图产生以下输出:

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

我目前的尝试如下:

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

在 Python 方面有一些经验,我正在努力理解使用 Java 的嵌套循环的语法。我收到以下输出:

$£$$$£$$$

【问题讨论】:

  • @Socowi 我的错误(点击错误)。固定的。谢谢。
  • 我很难想象如何使用嵌套循环来做到这一点。只需一个循环即可轻松完成。
  • 您不需要嵌套循环,您需要检查当前循环索引是否为偶数(i % 2 == 0),如果是:打印井号 * i,否则打印美元符号* 一世。

标签: java loops for-loop nested-loops


【解决方案1】:

在下面更新了您的代码。

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 = '$';
    }
}

试试这个,我已经更新了你的代码。有什么不明白的欢迎追问。

输出:

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

Try Here

【讨论】:

  • 为什么不使用temp = temp == '$'? '£':'$';
【解决方案2】:

您应该将其视为“人类将如何做”,然后尝试在代码中使用相同的方法。

那么人类是怎么做的:

  • 写 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中这段代码没有太大区别)

【讨论】:

  • 谢谢!非常感谢。
【解决方案3】:

当您想轻松更改字符和/或它们出现的次数时,您可以这样做:

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

输出:

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

【讨论】:

  • 谢谢!也很容易理解
【解决方案4】:

您可以将要打印的字符放在一个数组中,当您循环遍历它时,您可以使用索引和余数运算符在字符之间切换。 然后你只需要有一个嵌套循环,将打印的字符重复当前索引的次数。

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

【讨论】:

    【解决方案5】:

    你可以使用一个循环,只是如果你知道在 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();
    }
    

    输出

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-18
      • 1970-01-01
      • 2018-03-13
      • 1970-01-01
      • 1970-01-01
      • 2015-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多