2014-10-27 137 views
0

我創建了一個方法,該方法需要一個等級(a100,q68等),從二維數組中刪除該等級並調整數組大小。等級的第一個字母決定了等級所在的行,其餘是等級。如果等級被刪除,則該方法返回true,否則返回false。這是我的代碼到目前爲止。我知道我錯過了一些東西,但我不確定它是什麼。從二維數組中刪除

public boolean deleteGrade(String newGradeIn) { 

    char row = newGradeIn.charAt(0); 
    double grade = Double.parseDouble(newGradeIn.substring(1)); 
    int index = categoryRow(row); 
    if (index == -1) { 
    return false; 
    } 

    double[] oldArr = gradeTable[index]; 
    double[] newArr = Arrays.copyOf(oldArr, oldArr.length - 1); 
    newArr[newArr.length + 1] = grade; 
    gradeTable[index] = newArr; 


    return true; 
} 
+0

你的實際問題是什麼? – ifloop 2014-10-27 16:41:46

+0

我想我會拋棄一些實際刪除評分的東西。 – me123 2014-10-27 16:42:45

+0

你認爲你遺漏了它或者你是代碼實際上在刪除一個項目失敗?你應該閱讀[如何提出一個好問題] – ifloop 2014-10-27 16:45:08

回答

0

你從數組中移除的邏輯是不正確的。 替換下面的代碼

double[] oldArr = gradeTable[index]; 
double[] newArr = Arrays.copyOf(oldArr, oldArr.length - 1); 
newArr[newArr.length + 1] = grade; 
gradeTable[index] = newArr; 

用下面的

double[] oldArr = gradeTable[index]; 
    double[] newArr = new double[oldArr.length - 1]; 
    int i = 0; 
    for (double element : oldArr) 
    { 
     if (element != grade) 
     { 
      newArr[i++] = element; 
     } 
    } 
    gradeTable[index] = newArr; 

這裏我們將遍歷所有元素找到實際的等級,將其取下。 注意:沒有考慮給定gradeIn不存在的情景。