【问题标题】:Trouble with randomly generated arrays随机生成的数组有问题
【发布时间】:2014-11-23 22:17:03
【问题描述】:

所以我正在处理一个处理随机生成的数组的任务。这是作业:

编写下面的函数来测试一个二维列表是否有四个连续的相同值的数字,无论是水平的、垂直的还是对角的。 public static boolean isConsecutiveFour(int[][] values) 编写一个测试程序,提示用户输入一个二维列表的行数和列数,然后使用随机数生成器填充数组并打印出来。如果列表包含四个具有相同值的连续数字,则显示 True。否则,显示 False。

我完成了所有其他工作,它似乎可以工作,但我被困在随机生成数组部分。应该发生的是用户应该输入数组的行数和列数,然后生成它。然后,对该数组进行测试以找出是否存在四个连续的数字。当我来测试问题时,它实际上并没有显示数字。我很茫然,真的很困惑(任何人都可以帮助我或给我一个提示吗?将不胜感激。谢谢!

import java.util.Random;
import java.util.Scanner;
public class ConsecutiveFour {
    public static void main(String[] args) {
  Scanner input = new Scanner(System.in);
  Random r = new Random();
System.out.print("Enter number of rows: ");
int rows = input.nextInt();
    input.nextLine();

System.out.print("Enter number of columns: ");
int columns = input.nextInt();
    input.nextLine();


int[][] matrix = new int[rows][columns];

        // generate some random boolean values        
        boolean[] booleans = new boolean[10];
        for (int i = 0; i < booleans.length; i++) {
            booleans[i] = r.nextBoolean();
        }

        for (boolean b : booleans) {
            System.out.print(b + ", ");
        }
        System.out.println("");

  }
 public static boolean isConsecutiveFour(int[][] values) {
   boolean cons = false;
  int 
//tests horizontally

for (int r=0; r < rows; r++) {
  for (int c=0; c < columns - 3; c++){
    if (values[c][r] == values[c+1][r] &&
        values[c][r] == values[c+2][r] &&
        values[c][r] == values[c+3][r]) {
      cons = true;
    }
  }
}

//tests vertically
for (int r=0; r < rows - 3; r++) {
  for (int c=0; c < columns; c++){
    if (values[c][r] == values[c][r+1] &&
        values[c][r] == values[c][r+2] &&
        values[c][r] == values[c][r+3]) {
      cons = true;
    }
  }
}

//tests diagonally (going down and to the right)
for (int r=3; r < rows; r++) {
  for (int c=0; c < columns - 3; c++) {
    if (values[c][r] == values[c+1][r-1] &&
        values[c][r] == values[c+2][r-2] &&
        values[c][r] == values[c+3][r-3]) {
      cons = true;
    }
  }
}

//tests diagonally (going down and to the left)
for (int r=0; r < rows - 3; r++) {
  for (int c=0; c < columns - 3; c++) {
    if (values[c][r] == values[c+1][r+1] &&
        values[c][r] == values[c+2][r+2] &&
        values[c][r] == values[c+3][r+3]) {
      cons = true;
    }
  }
}
return cons;
}

}

【问题讨论】:

  • 不是您的反对票,而是您应该在哪里生成随机数?你在哪里填写你的matrix 数组?您应该为此使用 Random 对象 r,它有一个方法 nextInt(int max) 用于此。我会在嵌套的 for 循环中执行此操作,就在创建我的数组之后,换句话说,就在此之后:int[][] matrix = new int[rows][columns];.

标签: java arrays random


【解决方案1】:

启动两个 input.nextLine(); 行是不必要的。您的 input.nextInt(); 足以引入您需要的两个值。

您可能更容易生成所需的确切数量的随机数。看到这是一个作业,我会给你一些伪代码来完成。

for (int i = 0; i < rows; i++) {
  for (int k = 0; i < columns; k++) {
  int ranNum // Generate random number
  // Place random number in matrix[i][k]
  }
}

// Send array through checks

这是您遇到的问题还是我误解了您的困惑?

【讨论】:

  • 我遇到的问题是最终要在代码输出中显示数字,我不知道如何生成它们。
  • 好的,然后只需在 if() 语句中的 isConsecutiveFour() 方法中的每个检查语句之后添加类似的内容。 System.out.println(values[c][r] + "如果需要的话");然后让您的 return 语句返回您的布尔值,因此不再进行检查。
  • 我只是不断得到一个垂直的零列。
  • 那是因为你的作业要求你生成随机数字。你试图生成随机布尔值。
猜你喜欢
  • 2018-10-11
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2016-05-26
  • 2013-06-03
  • 1970-01-01
  • 2014-08-23
  • 1970-01-01
相关资源
最近更新 更多