2017-04-16 75 views
0

無法理解編譯錯誤。主要應該保持不變。我相信MakeandFillMatix方法是問題,我無法弄清楚。我認爲這是我創建該方法的方式。Java - 獲取編譯錯誤不兼容類型int無法轉換爲[] []

import java.util.*; 
/* 

*/ 
public class TesterProject 
{ 
    public static void main(String [] args) 
    { 
     int n = getMatrixSize(); 
     int[][] m = makeAndFillMatrix(n); 
     printMatrix(m); 
    } 
    public static int getMatrixSize() 
    { 
     Scanner S = new Scanner(System.in); 

     System.out.println("give me a int to create the matrix"); 
     int n = S.nextint(); 
     return n; 
    } 
    public static void makeAndFillMatrix(int [][] r) 
    { 
     Random generator = new Random(5); 
     int rand = generator.nextInt(10); 
     for(int i = 0; i < r.length; i++) 
     { 
      for(int j = 0; j < r; j++) 
      { 
       r[i][j]= rand; 
      } 
     } 
     return r; 
    } 
    public static void printMatrix(int [][] matrix) 
    { 
     for(int r = 0; r < matrix.length; r++) 
     { 
      for(int c = 0; c < matrix[r].length; c++) 
      { 
       System.out.print(matrix[r][c] + " "); 
      } 
      System.out.println(); 
     } 
    } 
} 
+0

知道錯誤的行號將允許您刪除95%的代碼,然後有人可能會幫助您解決它。 – rghome

回答

2

提示

你在你的代碼中的許多問題:

  1. int n = S.nextint();應該int n = S.nextInt();與上我
  2. 你不能用一個數組for (int j = 0; j < r; j++) {比較一個int,我認爲你需要這個for (int j = 0; j < i; j++) {
  3. void makeAndFillMatrix(int[][] r)它不返回任何東西,你的回報,最終的數組。
  4. makeAndFillMatrix(int[][] r)採取二維數組,而不是一個int int[][] m = makeAndFillMatrix(n);

修復這個問題,你的問題是解決:)


編輯

然後,你必須改變你的代碼如下:

public static void main(String[] args) { 
    int n = getMatrixSize(); 
    int[][] m = makeAndFillMatrix(n);//<<<----Problem 4 
    printMatrix(m); 
} 

public static int getMatrixSize() { 
    Scanner S = new Scanner(System.in); 

    System.out.println("give me a int to create the matrix"); 
    int n = S.nextInt();//<<--------------Problem 1 
    return n; 
} 

public static int[][] makeAndFillMatrix(int n) {//<<<---Problem 3 
    Random generator = new Random(5); 
    int[][] r = new int[n][n]; 
    int rand = generator.nextInt(10); 
    for (int i = 0; i < r.length; i++) { 
     for (int j = 0; j < i; j++) {//<<<-----------Problem 2 
      r[i][j] = rand; 
     } 
    } 
    return r; 
} 

public static void printMatrix(int[][] matrix) { 
    for (int r = 0; r < matrix.length; r++) { 
     for (int c = 0; c < matrix[r].length; c++) { 
      System.out.print(matrix[r][c] + " "); 
     } 
     System.out.println(); 
    } 
} 
+0

4.我需要保持主要一致。因爲這是我的教師代碼。 – IDK

+0

確定那麼你的方法應該採取一個int並返回一個矩陣,檢查我的編輯我把所有的代碼@IDK –

+1

哇,它的工作原理!感謝您和其他用戶的幫助!必須改變j中的循環到j IDK

0

變化makeAndFillMatrix(int[][] r)makeAndFillMatrix(int r) 你想要的矩陣大小,這是一個整數,所以採取整數,而不是一個多維數組的。

而在這之後的循環,改變r.length只是r

變化voidint [][]在方法聲明。

在該方法中添加一行int[][] q;並更改r[i][j] = randq[i][j] = rand

,並更改return rreturn q

+0

兩者都改變​​後仍然會出現相同的編譯錯誤。 – IDK

+0

我收到編譯錯誤q可能沒有被初始化。 – IDK

+0

寫入int [] [] q = new int [r] [r]; –

0

您正試圖將'int'(在主函數中)轉換爲'int [] []'(「makeAndFillMatrix」的參數)。另外,makeAndFillMatrix返回'void'。

我相信你想你的函數改寫爲這樣的:

public static int[][] makeAndFillMatrix(int r) 
{ 
    // Create a new matrix 
    int[][] matrix = new int[r][r]; 
    // Get a random value 
    Random generator = new Random(5); 
    int rand = generator.nextInt(10); 
    // Assign random value to each cell of the matrix 
    for(int i = 0; i < r; i++) 
    { 
     for(int j = 0; j < r; j++) 
     { 
      r[i][j] = rand; 
     } 
    } 
    // Return the matrix 
    return matrix; 
} 
+0

輸入代碼後我得到一個編譯器錯誤,說不兼容的類型:int [] []不能轉換爲int \t \t int matrix = new int [r] [r]; – IDK

+0

哦,我的壞!你必須使用int [] [] matrix = new int [r] [r]!我會更新我的答案! – Demindiro

0

您收到的錯誤是由於你在你的主要方法調用

int[][] m = makeAndFillMatrix(n); 

您設置n如在上面的線的int,這意味着n是數字,但是,makeAndFillMatrix(int[][])取入的int秒的二維數組。 (順便說一下,二維數組是一個矩陣。)

如果你想用戶輸入的大小的矩陣,那麼強似n到您的makeAndFillMatrix方法,你就需要在矩陣大小n通過。你可以用兩種方法來做到這一點。選項1是矩陣傳遞給您的makeAndFillMatrix方法,像這樣:

public static void main(String [] args) 
{ 
    int n = getMatrixSize(); 
    int[][] m = makeAndFillMatrix(new int[n][n]); // new int matrix of size n 
    printMatrix(m); 
} 

或(更傳統的方式,在我看來),你可以給makeAndFillMatrix矩陣的大小(像你正在做的),你可以有makeAndFillMatrix使數組:

public static void makeAndFillMatrix(int matrixSize) 
{ 
    int[][] r = new int[matrixSize][matrixSize]; 
    Random generator = new Random(5); 
    int rand = generator.nextInt(10); 
    for(int i = 0; i < r.length; i++) 
    { 
     for(int j = 0; j < r[i].length; j++) //~~~I modified this line as well~~~ 
     { 
      r[i][j]= rand; 
     } 
    } 
    return r; 
} 

不管怎麼說,你可以把你挑在這接近你想拿這個問題,但無論,我注意到,你的makeAndFillMatrix方法有錯誤。我修好了,寫了//~~~I modified this line as well~~~

你的內循環原來說for(int j = 0; j < r; j++),但r是矩陣。對於內部循環,您希望增加j,直到它已經達到的當前行的大小,因此我也更改了該行。 (您的內循環在您的printMatrix方法中是正確的。)無論您對第一個問題採取何種方法,您的makeAndFillMatrix方法中的內循環也需要進行修改。

我希望這有助於!

相關問題