如何打印所有已初始化的零被删除的数组元素?

时间:2014-03-28 23:12:58

标签: java arrays

public String toString(){
    String allstr="";
    for (int i=0 ; i<this.myArray.length; i++){ 
    }

    for (int i=capacity-1 ; i>=0 ; i--){
        allstr=(this.myArray[i] + " ") + allstr ;
    }
    return allstr;
}

此代码打印我的数组的所有元素,包括初始化的0。我怎么能排除他们?记住我的程序允许在数组中输入0。所以输入零= / =初始化为零。例如,如果一个数组有5 3 2 1 0 0 -1并且第一个零由我输入,我将如何删除由于我的数组的初始化而存在的第二个零。上面的代码是项目的一部分。只是一种方法。

4 个答案:

答案 0 :(得分:0)

执行此操作的最佳方法是使用List<Integer>代替静态数组。

请在此处阅读ArrayList

示例代码:

List<Integer> myArray = new ArrayList<Integer>();
for (int i = 0; i < 10; i++) {
    if (i % 2 == 0) {
        myArray.add((int) ((Math.random() * 5) + 1));
    }
}

System.out.println(Arrays.toString(myArray.toArray(new Integer[] {})).replaceAll(
        "[\\[,\\]]", ""));

答案 1 :(得分:0)

使用int数组,无法区分您设置为零的值与初始化为它的值。但是,如果您创建一个数组 Integer s,您将能够区分0和null。

例如,使用Integer

Integer[] list = new Integer[3];
list[0] = 1;
list[1] = 0;
for (int i = 0; i < list.length; i++) {
    System.out.println(list[i]);
}

输出

1
0
null

与使用int相比:

int[] list = new int[3];
list[0] = 1;
list[1] = 0;
for (int i = 0; i < list.length; i++) {
    System.out.println(list[i]);
}

输出:

1
0
0

答案 2 :(得分:0)

如果您拥有的是一个原始数字数组(如int),则根本无法区分初始化期间放置的零和输入产生的零。您可以使用其他内容来跟踪,例如boolean的并行数组,以跟踪值是来自输入还是输入的元素列表。

另一种方法是使用Number个对象的数组,并使用一个特殊的对象来表示初始零,如BigInteger.ZERO。输入中的所有其他内容都是IntegerBigDecimal。通过对初始化与输入使用不同的类,混合的可能性较小。顺便说一句,你应该使用for-each语法,如果你正在迭代地构建一个字符串,你应该使用StringBuilder

StringBuilder buf = new StringBuilder();
boolean first = true;
for (Number num : array) {
  if (num != BigInteger.ZERO) {
    if (first) {
      first = false;
    }
    else {
      buf.append(' ');
    }
    buf.append(num);
  }
}
return buf.toString();

不是手动构建字符串,而是可以使用Java所没有的String.join的各种等价物,由不同的第三方库提供。

答案 3 :(得分:0)

好的,如果您的数组是这样的:

int[] myArray = {0, 0, 0, 0, 0};

您可以创建布尔数组。让我们说真正的价值在于它是由用户输入的,而如果它是由用户输入则是假的。初始化。

boolean[] isChanged = {false, false, false, false, false};

每当您在数组中更改或输入新值时,您只需将此值标记为&#34;已更改&#34;

isChanged[i] = true;

比你的方法toString()将

public String toString(){
    String allstr="";
    for (int i = 0; i < this.myArray.length; i++){
        if (isChanged[i] == true) 
            allstr = allstr + (this.myArray[i] + " ");
    }

    return allstr;
}