简体   繁体   中英

Java array filling

In this code I generate 100 tiles with different values (lust, anger...) and print them in 10 groups of 10 elements.

The issue is that I would like to print each tile value it in a 10x10 grid instead.

How can I fill up the example grid (attached) with the desired tile values?

Format how I want the grid to look like:

0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
//For loop to generate 100 tiles
for(int i = 0; i <= 100; i++){

   //Generate a number between 0 - 100 (based on percentages) to find which tile to place
   double percentChanceRandom1 = r.nextDouble(100);
   double percentChanceRandom2 = r.nextDouble(100);
   double percentChanceRandom3 = r.nextDouble(100);
   double percentChanceRandom4 = r.nextDouble(100);
   double percentChanceRandom5 = r.nextDouble(100);

   //System.out.println(percentChanceRandom);

   //Determine the tile square value
   if(percentChanceRandom1 <= percentChanceLust){
       tile = "Lust";
   }
   else if(percentChanceRandom2 <= percentChanceAnger){
       tile = "Anger";
   }
   else if(percentChanceRandom3  <= percentChanceIdol){
       tile = "Idolatry";
   }
   else if(percentChanceRandom4 <= percentChanceVanity){
       tile = "Vanity";
   }
   else if(percentChanceRandom5 <= percentChanceSpeech){
       tile = "Speech";
   }
   else {
       tile = "Physical";
   }

   if(i%10 == 0){
     System.out.println(tile);
     System.out.println("\n");
   }
   //Print out which tile was chosen
   else{
     System.out.println(tile);
   }
}//End For

It looks like you can just use a nested loop.

for(int i = 0; i < 10; i++){
    for(int j = 0; j < 10; j++){
        /* write code to add a single value */
    }
}

You can use two loops and only generate integers to get random values.

List<String> values = Arrays.asList("Lust", "Anger", "Idolatry", "Vanity", "Speech", "Physical");
Random rand = new Random()
for(int i = 0; i < 10; i++){
    for(int j = 0; j < 10; j++){
        
        System.out.print(values.get(rand.nextInt(values.size())));
    }
    System.out.print("\n");
}

As Ariel mentioned you can use a nested for loop to store the values of tile in a 2D array.

Since we have 100 values total and we want to group them by 10s, we should have a 2D array that is 10 by 10 that stores String s:

String[][] emotions = new String[10][10];

To iterate through emotions and fill it up, we can use a nested for loop with one counter to iterate through the "width" and the other through the "height":

for(int i = 0; i < 10; j++){
   for(int j = 0; j < 10; j++){
       //defining tile
       emotions[i][j] = tile;
   }
}

This will allow for us to fill up emotions as our loops go from an ij pair of 0-0 to an ij pair of 9-9.

Now, we can also print out our array to output these values by using a for-each loop:

for(String[] i: emotions){
   for(String j: i){
      System.out.print(j + " ");
   }
   System.out.println();
}

What this code does is: "For every sub-array i , in our 2D array emotions , and for every String j in our sub-array i , we can print out j . After we print out all the Strings j in i , we can print out a newline and move on to our next sub-array i in emotions .

Overall, the code should look something like this:

String[][] emotions = new String[10][10];
//For loop to generate 100 tiles
for(int i = 0; i < 10; j++){
    for(int j = 0; j < 10; j++){
        double percentChanceRandom1 = r.nextDouble(100);
        double percentChanceRandom2 = r.nextDouble(100);
        double percentChanceRandom3 = r.nextDouble(100);
        double percentChanceRandom4 = r.nextDouble(100);
        double percentChanceRandom5 = r.nextDouble(100);
    
        //System.out.println(percentChanceRandom);
    
        //Determine the tile square value
        if(percentChanceRandom1 <= percentChanceLust){
            tile = "Lust";
        }
        else if(percentChanceRandom2 <= percentChanceAnger){
            tile = "Anger";
        }
        else if(percentChanceRandom3  <= percentChanceIdol){
            tile = "Idolatry";
        }
        else if(percentChanceRandom4 <= percentChanceVanity){
            tile = "Vanity";
        }
        else if(percentChanceRandom5 <= percentChanceSpeech){
            tile = "Speech";
        }
        else {
            tile = "Physical";
        }
    
        emotions[i][j] = tile;
    }
}//End For

for(String[] i: emotions){
    for(String j: i){
    System.out.print(j + " ");
    }
    System.out.println();
}

I hope this helped: Let me know if you need any further clarification or details :)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM