【问题标题】:Randomly generated number of X's随机生成的 X 数
【发布时间】:2017-07-31 02:12:40
【问题描述】:

我需要一个程序来随机生成一个数字,然后将那个数量的x放在自己的行上,直到它输出一行16个x,然后它就会停止。到目前为止,我的程序生成了一个数字,但从未停止输出。我确定这是我的错误,但不确定需要更改什么。这是我此刻的代码。

import java.util.Random;

public static void main(String[] args)
{
    toBinary();
    randomX();
}

public static void randomX()
{
    Random num = new Random();
    int ran = num.nextInt(16+1);
    int xs = ran;

    while(xs <= 16)
    {
        System.out.print("x");
    }
}

【问题讨论】:

  • 请阅读my solution 来解决您的问题。顺便说一句,它更广泛,可以生成任何长度的任何字符序列,并且非常易于使用。

标签: java loops random range


【解决方案1】:

要解决这个问题,请考虑您可能需要的循环。
您需要打印 x 一定次数,这是一个循环。我还引入了一个变量来跟踪此打印。
您需要一直打印到 16 岁。这是另一个循环。

public static void randomX(){
  Random num = new Random();
  int xs = 0;
  //This loop keeps going until you reach 16
  while(xs <= 16){
    xs = num.nextInt(16+1);
    int x = 0;
    //This loop keeps going until you've printed enough x's
    while (x < xs)
    {
      System.out.print("x");
      x++;
    }

    System.out.println("")
  }
}

【讨论】:

  • 虽然这段代码 sn-p 可以解决问题,including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
  • @DimaSan 添加了一些解释。并添加了我忘记的换行符。
  • @Jean-Bernard Pellerin 好的,所以我将代码重新格式化为这样,甚至复制了它以查看它是否可以工作,但是编译后代码没有输出。
  • @DPabst 那是因为它被初始化为17,所以它永远不会进入外循环。
  • @pjs 啊!不错的收获。我改变了我的逻辑并忘记了返回那个。
【解决方案2】:

您可以使用辅助计数器来管理循环并增加它以退出循环。

int i = 0;
while (i<xs){
    System.out.print("x");
    i++;
}

您可以在此处查看有关 java 循环的更多信息:

Tutorial about java while

【讨论】:

    【解决方案3】:

    您的版本存在许多小问题。这是一组建议的修订。

    // create your random object outside the method, otherwise
    // you're instantiating a new one each time.  In the long run
    // this can cause awkward behaviors due to initialization.
    public static Random num = new Random();
    
    public static void randomX(){
       int ran;
       do {
          ran = 1 + num.nextInt(16); // move the +1 outside unless you actually want 0's
          int counter = 0;
          while(counter++ < ran) {
            System.out.print("x");
          }
          System.out.println();  // add a newline after printing the x's in a row
       } while(ran < 16);
    }
    

    最大的问题是您需要 两个 循环,一个用于生成新数字的外部循环和一个用于打印当前 x 数量的内部循环。

    第二个问题是您的循环正在检查数字 = 16。您的所有值都是

    在 cmets 中找到的其他建议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      • 2019-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多