随机生成的数组有问题

时间:2014-11-23 22:17:04

标签: java arrays random

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

编写以下函数,测试二维列表是否具有四个相同值的连续数字,水平,垂直或对角。 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;
}

}

1 个答案:

答案 0 :(得分: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

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