2016-11-08 112 views
0

我對Java很陌生(做一個初學者大學模塊),所以對於這個可能很愚蠢的問題感到抱歉。我試圖驗證一個衣衫襤褸的array是否是「三對角矩陣」。初學者布爾編譯錯誤

它是有效的,如果它是length 3在第一水平和lengthn − 1nn − 1在第二級。我打算拿出一個代碼,首先驗證長度是3,然後找到其中最長的lengtharray其中n,然後最後驗證每個length

無論出於何種原因,我的代碼不會編譯,但我沒有看到錯誤消息,只是在類上有一個紅色感嘆號。我認爲這意味着有多個錯誤。如果有人能指出這將是一個巨大的幫助。

static boolean isValidTridiagonal (double [][] m) 
{ 
    if (double [][]=new double [3][]) 
    { 
     int n = 0; 
     for(int i = 0; i < m.length; i++) 
     { 
      if(m[i].length > n) 
      { 
       n = m[i].length; 

       if((m[0].length = n-1) && (m[1].length = n) &&(m[2].length=n-1)) 
       { 
        return true 

       } 
       else 
       { 
        return false 
       } 
      } 
       else 
      { 
       return false 
      } 
     } 

非常感謝!

+1

你應該使用IDE喜歡的NetBeans或Eclipse和你可以閱讀錯誤,告訴你'語法錯誤,插入「;」完成BlockStatements' – Foolish

回答

0

爲什麼你需要所有的循環?如果所有陣列不能爲空,比

static boolean isValidTridiagonal(double[][] m) { return m.length == 3 && m[0].length == m[1].length - 1 && m[2].length == m[0].length; }

+0

謝謝!我想我是在過度複雜的問題...真的很感謝幫助 – hii

1

我的,因爲它是有幫助的使用可以突出語法錯誤和其它問題代碼的IDE的意見愚蠢的同意,那真叫一個巨大的差異。除此之外,另一個一般策略是始終以「寶貝步驟」編碼:如果代碼正常工作,經常編譯和測試,則只做最小的測試。如果你仍然有麻煩,你總是可以在搜索有問題的位時註釋掉你的代碼塊。

說了這麼多,我在你的代碼中看到的錯誤是:

if (double [][]=new double[3][]) 

如果你想測試輸入的長度,你可以做,如果(m.length == 3)

if((m[0].length = n-1) && (m[1].length = n) &&(m[2].length=n-1)) 

你沒有測試的平等,而是試圖把n的值-1等爲m [0]。長度,這是行不通的。你大概的意思是

if((m[0].length == n-1) && (m[1].length == n) &&(m[2].length==n-1)) 

return true 

你錯過了一個分號。編譯器對這樣的事情發愁,除非你使用IDE或學習解釋編譯器錯誤消息,否則找到這樣的錯誤可能會非常痛苦。

最後,當然,vasste的答案爲您的實際任務提供了一個更簡單的解決方案,所以值得研究一下:)。

0

最後你錯過了一些大括號,但從縮進來看,你忘了複製它們。

您從回車行末尾丟失分號。

此if語句中的條件if (double [][] = new double [3][])不是有效表達式。你只是想評估長度,你可以像if (m.length == 3)一樣進行評估。你稍後做了同樣的事情。

包含(m[0].length = n-1) && (m[1].length = n) && (m[2].length=n-1)的行不是有效的,因爲您在所有三種情況下都執行了任務(=)。平等檢查是雙等號運算符==

您不會在任何情況下返回值。您可以通過在第一個if語句的結束大括號後添加return false;來解決此問題,即該函數的最後一行。

這足以讓你的代碼編譯。正如在另一個答案中提到的,你的邏輯很混亂,沒有實際追蹤它,我會推測它不會像你所期望的那樣工作。

如果我理解正確你的要求,你可以重寫整個功能:

static boolean isValidTridiagonal (double [][] m) 
{ 
    return m.length == 3 && 
      m[0].length + 1 == m[1].length && 
      m[2].length + 1 == m[1].length; 
} 

一個適當的IDE - Netbeans的,Eclipse的,等等 - 將給予相當描述性的錯誤消息,你在哪裏告訴你出錯了。


這基本上是完全的風格,但我希望有人早些時候指出這一點。如果你發現自己在這種形式編寫代碼:

if((m[0].length == n-1) && (m[1].length == n) && (m[2].length == n-1)) 
{ 
    return true; 
} 
else 
{ 
    return false; 
} 

知道,你可以不用編寫救自己,而不會丟失任何可讀性那麼多行:

return (m[0].length == n-1) && (m[1].length == n) && (m[2].length == n-1); 
+0

非常感謝!真的很感謝解釋 – hii