2014-10-27 80 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不存在的情景。