【问题标题】:Java: A few error while implementing a multidimensional array with methodsJava:使用方法实现多维数组时出现一些错误
【发布时间】:2012-11-12 22:43:47
【问题描述】:

我尝试用方法制作一个多维数组。但我卡在这里;我的打印方法无法正常工作。它什么也不显示,也没有错误。

public void bas() { // ========> print method
for (int a = 0; a < dizi.length; a++) {
    for (int b = 0; b < dizi[a].length; b++) {
        System.out.println(" dizi[" + n + "][" + m + "] = "
        + dizi[n][m]);
    }}}

它已修复。

public int[][] doldur() { // ========> fill method
for (int i = 0; i < dizi.length; i++) {
    for (int j = 0; j < dizi.length[i]; j++) { //problem in here: The type of the expression must be an array type but it resolved to int

    }
}
return dizi;

}

dizi.length[i] => dizi[i].length


我的其余代码:

public class ikiBoyutluDizi {
int n, m;
int[][] dizi = new int[n][m];

public int[][] diziBoyutu(int a, int b) {
    return dizi;
}

public int[][] doldur() { // ========> fill method
    for (int i = 0; i < dizi.length; i++) {
        for (int j = 0; j < dizi.length[i]; j++) {

        }
    }
    return dizi;
}

public void bas() { // ========> print method
    for (int a = 0; a < dizi.length; a++) {

        for (int b = 0; b < dizi[a].length; b++) {

            System.out.println(" dizi[" + n + "][" + m + "] = "

            + dizi[n][m]);

        }
    }
}

public static void main(String[] args) {
    ikiBoyutluDizi dizi2x = new ikiBoyutluDizi();
    dizi2x.diziBoyutu(2, 3);
    dizi2x.doldur();
    dizi2x.bas();
}

}

还有一件事;你能检查我的打印方法吗?您认为修复填充方法后它是否可以正常工作?

【问题讨论】:

  • 只是一个问题。您似乎正确地执行了打印方法(空检查除外),那么为什么您错误地执行了填充方法?两个嵌套的for 循环具有相同的逻辑。
  • 顺便说一句,其余代码中存在语义错误(在填充方法之前和打印方法之后)。它不会按照我认为你打算如何工作的方式工作。
  • @ADTC 因为;注意力不集中:)

标签: java for-loop multidimensional-array


【解决方案1】:

在有问题的行中 - 您应该使用 dizi[i].length 而不是 dizi.length[i]

原因是 diziint[][] 类型,因此 dizi[i]int[] 类型 - 这是一个数组,但 dizi.lengthint,而您实际上试图访问一个元素在 int 中 - 这是不可能的!

您可能还想在这样做之前确保dizi[i] != null

public int[][] doldur() { // ========> fill method
for (int i = 0; i < dizi.length; i++) {
    for (int j = 0; dizi[i] != null && j < dizi[i].length; j++) { 
      //               ^                         ^
      //           not null                   dizi[i].length 
      //                                         instead of
      //                                      dizi.length[i]
      // Do domething

    }
}

【讨论】:

  • @android93: 有什么问题吗?对我来说似乎很好,至少从第一眼看是这样。
  • @android93: 你确定nm 设置的值不是0吗?您应该在 c'tor 中将它们初始化为不同的值,或者您得到一个大小为 0 x 0 的数组,并且循环在第一次迭代之前终止(因为 0
  • 我想说他的整个程序是在对 OOP 基础知识的错误理解下编写的。有几个错误,不仅仅是你指出的初始化错误。我希望他使用 Eclipse 来编写代码。
【解决方案2】:
for (int j = 0; j < dizi[i].length; j++)

dizi[i] 将在 i 索引处获取数组。并且长度属性会得到它的长度。

【讨论】:

    猜你喜欢
    • 2016-11-21
    • 1970-01-01
    • 2019-03-02
    • 2016-07-01
    • 2016-06-25
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    相关资源
    最近更新 更多