Java 为什么我的while循环在应该是随机的情况下重复相同的语句?

Java 为什么我的while循环在应该是随机的情况下重复相同的语句?,java,string,while-loop,Java,String,While Loop,然后只重复一条语句,例如: 约翰逊掷杆击球 约翰逊掷杆击球 约翰逊掷杆击球 约翰逊掷杆击球 约翰逊掷杆击球 如何使其随机,每次都不同。您只运行字符串赋值一次。所以它永远都是一样的。把你的作业: List<String> n = new ArrayList<String>(); n.add("Allen"); n.add("beer"); n.add("Johnson"); n.add("bar"); n.add("girl"); List<

然后只重复一条语句,例如:

约翰逊掷杆击球

约翰逊掷杆击球

约翰逊掷杆击球

约翰逊掷杆击球

约翰逊掷杆击球


如何使其随机,每次都不同。

您只运行字符串赋值一次。所以它永远都是一样的。把你的作业:

     List<String> n = new ArrayList<String>();
 n.add("Allen");
 n.add("beer");
 n.add("Johnson");
 n.add("bar");
 n.add("girl");
   List<String> v = new ArrayList<String>();
 v.add("shot");
 v.add("drank");
 v.add("ate");
 v.add("hit");
 v.add("tossed");
     int noun = (int)(Math.random() * n.size());
     int verb = (int)(Math.random() * v.size());
     int noun2 = (int)(Math.random() * n.size());
     int verb2 = (int)(Math.random() * v.size());
     int noun3 = (int)(Math.random() * n.size());
     String a = new String(n.get(noun) + " " + v.get(verb) + " " + n.get(noun2) + " " +  "and" + " " + v.get(verb2) + " " + n.get(noun3));

  int x = 0;
  while (x < 5) {
       System.out.println(a);
   x++;
 }
在循环内部,如果希望多次重新生成它,如下所示:

String a = new String(n.get(noun) + " " + v.get(verb) + " " + n.get(noun2) + " " +  "and" + " " + v.get(verb2) + " " + n.get(noun3));

您需要重新生成一个随机字符串,而不是使用一个字符串。只需将随机逻辑放入while循环。您可以尝试:

int x = 0;
while (x < 5) {
   int noun = (int)(Math.random() * n.size());
   int verb = (int)(Math.random() * v.size());
   int noun2 = (int)(Math.random() * n.size());
   int verb2 = (int)(Math.random() * v.size());
   int noun3 = (int)(Math.random() * n.size());
   String a = new String(n.get(noun) + " " + v.get(verb) + " " + n.get(noun2)   + " " +  "and" + " " + v.get(verb2) + " " + n.get(noun3));
   System.out.println(a);
   x++;
 }

您需要在每次运行while循环时重新随机化随机变量。即使使用Math.random来声明变量,它也不会在每次使用时都更改。一旦你声明了一个变量,它不会改变,除非你通过给它一个新的值来改变它。因此,您需要这样做:

List<String> n = new ArrayList<String>();
    n.add("Allen");
    n.add("beer");
    n.add("Johnson");
    n.add("bar");
    n.add("girl");
    List<String> v = new ArrayList<String>();
    v.add("shot");
    v.add("drank");
    v.add("ate");
    v.add("hit");
    v.add("tossed");

    int x = 0;
    while (x < 5) {
        int noun = (int)(Math.random() * n.size());
        int verb = (int)(Math.random() * v.size());
        int noun2 = (int)(Math.random() * n.size());
        int verb2 = (int)(Math.random() * v.size());
        int noun3 = (int)(Math.random() * n.size());
        String a = n.get(noun) + " " + v.get(verb) + " " + n.get(noun2) + " " + "and" + " " + v.get(verb2) + " " + n.get(noun3);

        System.out.println(a);
        x++;
    }

这样,您就可以在每次迭代while循环时更改名词、动词等的值。

在进入while循环之前设置随机变量。因此,在while循环的每次迭代中,都使用相同的值。为了在每次迭代中得到不同的结果,您还需要在while循环中包含随机数生成

int x = 0;
while (x < 5) {
     int noun = (int)(Math.random() * n.size());
     int verb = (int)(Math.random() * v.size());
     int noun2 = (int)(Math.random() * n.size());
     int verb2 = (int)(Math.random() * v.size());
     int noun3 = (int)(Math.random() * n.size());
     String a = new String(n.get(noun) + " " + v.get(verb) + " " + n.get(noun2)   + " " +  "and" + " " + v.get(verb2) + " " + n.get(noun3));

     System.out.println(a);
     x++;
}

}

您想具体随机化什么?如果随机化发生在循环之外,则值永远不会改变。您的解决方案仍然存在OP当前的缺陷,因为您没有在循环内每次生成一个随机数。@OusmaneMahyDiaw,完全跳过了该部分。将更新,谢谢
int x = 0;
while (x < 5) {
   int noun = (int)(Math.random() * n.size());
   int verb = (int)(Math.random() * v.size());
   int noun2 = (int)(Math.random() * n.size());
   int verb2 = (int)(Math.random() * v.size());
   int noun3 = (int)(Math.random() * n.size());
   String a = new String(n.get(noun) + " " + v.get(verb) + " " + n.get(noun2)   + " " +  "and" + " " + v.get(verb2) + " " + n.get(noun3));

   System.out.println(a);
   x++;