2014-11-23 78 views
-3

所以我正在处理随机生成数组的任务。这里是作业:随机生成阵列的麻烦

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

不是你的选民,但你应该在哪里产生你的随机数字?你在哪里填充你的矩阵阵列?你应该使用你的Random对象,'r',它有一个方法,'nextInt(int max)'。我会在嵌套的for循环中执行此操作,在创建数组后,换句话说就是在这之后:int [] [] matrix = new int [rows] [columns];'。 – 2014-11-23 22:19:48

回答

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 

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

+0

我遇到的问题最终会在代码的输出中显示数字,我不知道如何生成它们。 – blue1artic 2014-11-23 22:36:53

+0

好的,然后在if()语句中的isConsecutiveFour()方法内的每个检查语句后面添加类似的内容。 System.out.println(values [c] [r] +“Text if if”); 然后让你的返回语句返回你的布尔值,以便不再进行检查。 – Regis 2014-11-23 22:40:33

+0

我只是继续得到一个零的垂直列。 – blue1artic 2014-11-23 22:47:22