【问题标题】:Repeat an integer n times重复一个整数 n 次
【发布时间】:2016-04-19 12:38:19
【问题描述】:

我正在尝试用整数制作金字塔。 即数字 3:

3
33
333

所以根据我找到的答案,我做了这个:

int n = 8;
String n2 = Integer.toString(n);

for (int i=0; i<n; i++) {
    System.out.println(StringUtils.repeat(n2, i));
}

但它不起作用,而且不是最理想的。有没有一种简单的方法可以在同一行中重复一个整数 n 次?

编辑:让自己成为一种方法.. 也不太高兴,但似乎我不能只使用 System.out.println(int x, int n times) 之类的东西

int n = 8;

for (int i=0; i<=n; i++) {
    for (int j=0; j<i; j++) {
        System.out.print(n + " ");
    }
    System.out.println("");
}

【问题讨论】:

  • 它不工作 - 你是什么意思?为什么它次优
  • 你不能像这个没有循环的金字塔那样构建动态递归结构
  • 我的意思是将我的 int 转换为字符串不是最理想的吗? AIn没有直接的方法来处理整数?
  • 无论如何,int 都会被转换为 String 用于显示目的。当您不知道自己是初学者时,应避免使用诸如“次优”之类的词。您可能并不真正了解什么是最佳的,什么不是。
  • 是的;我希望找到类似 System.out.println(x, y) 的东西,其中 x 是要显示的整数,y 是要显示的次数。

标签: java for-loop iteration


【解决方案1】:

如下所示。

public class Test{

    public static String repeat(String str, int times) {
        return new String(new char[times]).replace("\0", str);
    }

    public static void main(String[] args) {
        for (int i = 1; i < 5; i++) {
            System.out.println(repeat("3", i));
        }
    }
}

输出

3
33
333
3333

【讨论】:

  • @Andremoniy 必须至少有一个循环
  • 是的,我的问题并不清楚。一个循环我很好。但我想重复我的整数 i 次。但是,如果不将我的 int 转换为字符串,我不知道该怎么做
  • @ankur-singhal 实际上没有
【解决方案2】:

好的,您可以使用Java-8流在没有显式循环的情况下做到这一点:

IntStream.range(1,n).forEach(i -> System.out.println(StringUtils.repeat(n2, i));

甚至没有apache-commons:

 IntStream.range(0,n).forEach(i -> System.out.println(String.join("", Collections.nCopies(i+1, n2))));

但无论如何,所有这些方法在内部都使用循环。

【讨论】:

  • 你也用过`foreach, i hope this is same as for循环`
  • @ankur-singhal 我说:“没有明确的”。很明显String.repeat 内部也使用了循环
  • @saka1029 根据问题n2 始终是n 的字符串表示形式:n2 = Integer.toString(n)
  • @saka1029 但你说得对,我应该将间隔增加到[0,n],谢谢
【解决方案3】:

您可以尝试使用StringBuilder

您仍然需要循环,但在性能方面可能会稍好一些。

int n = 8;
String n2 = Integer.toString(n);
StringBuilder builder = new StringBuilder(n);
for(int i = 0; i < n; i++) {
    builder.append(n2);
    System.out.println(builder.toString());
}

这是你想要的,但不是你想的那样。无需重复创建重复的整数字符串,我们只需构建一个字符串,省去了重复它的工作。

要实际回答您的问题,您可以使用此代码,但我会推荐第一种方法:

char[] str = new char[n];
Arrays.fill(str, (char)(number + '0'));
new String(str);

这只有在你的整数是 0

【讨论】:

    【解决方案4】:

    为了保持整数,您可以每次存储最后一个值,并添加下一部分:

    i = 0 --> 你得到 3

    i = 1 --> 你得到 33 (i0 + 30)

    i = 2 --> 你得到 333 (i1 + 300)

    int lastValue = 0;
    
    for (int i=0; i<=n; i++) {
    
      int currentValue  = lastValue + (n * Math.pow(10, i));
      System.out.println(currentValue);
      lastValue = currentValue ;
    }
    

    这显然只适用于一位整数。

    【讨论】:

      【解决方案5】:

      我的意思是将我的 int 转换为字符串不是最理想的吗?不是 有直接处理整数的方法吗? ——

      如果您不想将 int 转换为字符串。

      这可能会对你有所帮助。

          int n = 3;
          for (int i=1; i<=n; i++) {
          System.out.println(new String(new char[i]).replace("\0", n+""));
          }
      

      【讨论】:

      • 是的,谢谢,这是最好的答案。我以前发现过这种方法,但我想可能有另一种方法,但似乎没有。无论如何谢谢:-)
      • 很高兴看到这对你有帮助:)
      猜你喜欢
      • 2019-07-22
      • 1970-01-01
      • 2021-11-30
      • 2011-11-13
      • 1970-01-01
      • 2017-08-21
      • 2013-08-31
      • 2022-08-02
      • 2021-08-28
      相关资源
      最近更新 更多