【问题标题】:Random Char in 2D arrays二维数组中的随机字符
【发布时间】:2015-10-24 00:49:42
【问题描述】:

嗨,我是 java 编码的新手,我正在尝试创建随机数(我已经完成了),我正在尝试将此随机数作为坐标分配到二维数组中并在坐标处打印“A”。任何帮助表示赞赏。

package training;

import java.util.Random;

public class Training {

    public static void main(String[] args) {

        char[][] values = new char[10][10];
        int foodX[] = new int[15];
        for (int i = 1; i < foodX.length + 1; i++) {
            int minFood = 0;
            int maxFood = 10;
            int randNum1 = minFood + (int) (Math.random() * (maxFood - minFood) + 1);
            int minFoodY = 0;
            int maxFoodY = 10;
            int randNum2 = minFoodY + (int) (Math.random() * (maxFoodY - minFoodY) + 1);
            for (int j = 1; j < foodX.length + 1; j++) {
                values[randNum1][randNum2] = 'A';

            }

        }

    // Assign three elements within it.
        // Loop over top-level arrays.
        for (int i = 0; i < values.length; i++) {

            // Loop and display sub-arrays.
            char[] sub = values[i];

            for (int x = 0; x < sub.length; x++) {
                System.out.print(sub[x] + " ");
            }
            System.out.println();

        }

    }
}

【问题讨论】:

  • 嗨,我是 java 编码的新手,我正在尝试创建随机数(我已经完成了),我正在尝试将此随机数作为坐标分配到二维数组中并在坐标。任何帮助表示赞赏。
  • 那么问题到底是什么?你有例外吗?输出与预期不同?
  • 我的代码存在 areaoutofbound 错误,并且它不会打印出 'A' @Mureinik
  • @Mureinik 我的代码存在 areaoutofbound 错误,并且没有打印出“A”

标签: java random multidimensional-array


【解决方案1】:

Java 中的数组是零索引的。这意味着如果你声明一个数组myArray如下:

final int[] myArray = new int[10];

然后您将创建一个包含 myArray[0], myArray[1], ..., myArray[9] 中的值的 10 元素数组。这也适用于二维数组,例如代码中的 values 数组。但是,您已经定义了randNum1randNum2 以返回110 范围内的值。当其中任何一个值设置为 10 时,values[randNum1][randNum2] 将抛出 ArrayIndexOutOfBoundsException,因为您尝试使用超出其范围的索引来引用数组。

除此之外,您还创建了一个数组foodX,除了确定其长度之外,您什么也不做。在这种情况下,最好为此目的声明一个常量 int 值。最后,虽然您已经导入了 java.util.Random 类,但您正在使用 Math.random() 生成随机变量,它不依赖于此。您也可以使用Random.nextDouble(),如果使用随机数种子,这将很有用,但这是一个旁白。

在不考虑任何额外考虑并让您的输出按我认为的预期工作的情况下,因此我将按以下方式重新编写您的课程:

package training;

public class Training {

  public static void main(String[] args) {

    char[][] values = new char[10][10];
    int foodSize = 15
    for (int i = 1; i <= foodSize; i++) {
        int minFood = 0;
        int maxFood = 10;
        int randNum1 = minFood + (int) (Math.random() * (maxFood - minFood));
        int minFoodY = 0;
        int maxFoodY = 10;
        int randNum2 = minFoodY + (int) (Math.random() * (maxFoodY - minFoodY));

        values[randNum1][randNum2] = 'A';
        // I've removed the for loop in the line above since it simply does the same thing 15 times and is inefficient
    }

    // Assign three elements within it.
    // Loop over top-level arrays.
    for (int i = 0; i < values.length; i++) {

        // Loop and display sub-arrays.
        char[] sub = values[i];

        for (int x = 0; x < sub.length; x++) {
            System.out.print(sub[x] + " ");
        }
        System.out.println();

    }

  }
}

【讨论】:

    猜你喜欢
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 2021-07-12
    相关资源
    最近更新 更多