2014-11-23 74 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