删除矩阵中的整数

时间:2016-08-10 18:04:06

标签: java matrix multidimensional-array

我想摆脱我方法中的零点。有谁知道如何做到这一点?我是否必须将矩阵转换为字符串,或者我可以在整数矩阵中以某种方式删除元素?

来自:

1 0 0 0 0

1 1 0 0 0

1 2 1 0 0

1 3 3 1 0

1 4 6 4 1

对此:

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1
public static void writeElement(int[][] m){
  int[][] b = new int[m.length][m.length];
  for(int row=0; row<m.length; row++){
     b[row][0] = 1;
  }
  for(int col=1; col<m.length; col++){
     b[0][col]=0;
  }
  for(int row=1; row<m.length; row++){
     for(int col=1; col<m[row].length; col++){
        b[row][col] = (b[row-1][col-1] + b[row-1][col]);
     }
  }
  for(int i=0; i<b.length; i++){
     for(int j=0; j<b[i].length; j++){
        System.out.print(b[i][j] + "  ");
     }
  System.out.println();
  }
}//writeElement

3 个答案:

答案 0 :(得分:1)

  

我是否必须将矩阵转换为字符串

当您使用System.out.println()时,您已经这样做了。你只需要改变你给出的方法。

从你拥有的东西开始:

for(int i=0; i<b.length; i++){
 for(int j=0; j<b[i].length; j++){
    System.out.print(b[i][j] + "  ");//where you print results out
 }
System.out.println();
}

你需要比b [i] [j] +&#34;更复杂的东西。 &#34;得到你想要的结果,因为整数&#39; 0&#39;的默认字符串解释。好吧,&#39; 0&#39;。你想要&#39; 0&#39; 0映射到空间&#39; &#39;

对我来说最简单的方法是创建一个处理这个逻辑的方法,因为如果有零,你实际上根本不需要输出。如果我误解了你的问题,使用一种方法可以让你以后很容易地改变它。 (您必须将此方法与writeElement类放在同一个类中。)

private static String getPrintValueForMatrix(int value)
{
    if(value == 0)
        return "  ";//two spaces
    else
        return value+" ";
}

修改原始代码以调用方法

for(int i=0; i<b.length; i++){
    for(int j=0; j<b[i].length; j++){
        System.out.print(getPrintValueForMatrix(b[i][j]));//only this line changed
    }
System.out.println();
}

这应该给你这样的结果:

1         
1 1       
1 2 1     
1 3 3 1   
1 4 6 4 1 

答案 1 :(得分:0)

java中的数组具有固定的结构。创建后,您无法动态删除/添加插槽。如果你想这样做,你必须使用像java.util.arrayList。

这样的集合元素

或者,您必须创建一个新数组;并以不同方式填充行。所以不要总是有相同的宽度;你只会为非零值分配空间。然后你会迭代你的整个矩阵;并仅复制非零值。

但当然:处理这样的矩阵需要非常精确;因为每个行数组可能有不同的长度!

选项1(使用列表)具有很大的优势,您可以在创建时进入并删除/添加元素。缺点是:集合仅适用于参考类型;在这种情况下:整数。这意味着一点内存开销。

选项2需要显式创建新数组;并且如上所述:精确处理长度。

答案 2 :(得分:0)

您可以设置数组String类型,允许您在希望“删除”时将元素设置为空字符串("")。然后,当您要求元素时,您可以使用逻辑来忽略任何""并仅使用数字。当然,这意味着只要您想要检索它们,就需要调用Integer.valueOf(b[/*indexOne*/][/*indexTwo*/])将条目转换为int类型。

此外,如果您想要使用String.valueOf(/*anInt*/)而不是int设置元素,则需要以类似的方式使用String