Java 如何打印在删除所有初始化零的情况下输入的数组的所有元素? 公共字符串toString(){ 字符串allstr=“”; 对于(int i=0;i=0;i--){ allstr=(this.myArray[i]+“”)+allstr; } 返回allstr; }

Java 如何打印在删除所有初始化零的情况下输入的数组的所有元素? 公共字符串toString(){ 字符串allstr=“”; 对于(int i=0;i=0;i--){ allstr=(this.myArray[i]+“”)+allstr; } 返回allstr; },java,arrays,Java,Arrays,这段代码打印数组的所有元素,包括初始化的0。我怎样才能排除他们?请记住,我的程序允许在数组中输入0。因此,输入的零=/=初始化的零。例如,如果一个数组有5 3 2 1 0 0-1,并且第一个零是由我输入的,那么我如何删除由于数组初始化而存在的第二个零。上述代码是项目的一部分。只是一种方法 最好的方法是使用List代替静态数组 请在这里阅读 示例代码: public String toString(){ String allstr=""; for (int i=0 ; i<t

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

最好的方法是使用
List
代替静态数组

请在这里阅读

示例代码:

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;
}
List myArray=new ArrayList();
对于(int i=0;i<10;i++){
如果(i%2==0){
添加((int)((Math.random()*5)+1));
}
}
System.out.println(Arrays.toString(myArray.toArray(新整数[]{})).replaceAll(
"[\\[,\\]]", ""));

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

例如,使用
Integer

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(
        "[\\[,\\]]", ""));
与使用
int
相比:

1
0
null

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

另一种方法是使用
Number
对象数组,并使用一个特殊数组来表示初始零,如
biginger.zero
。来自输入的所有其他变量都是
整数
大十进制
。通过对初始化和输入使用不同的类,混合的可能性更小。顺便说一句,如果以迭代方式构建字符串,则应使用for-each语法和
StringBuilder

1
0
0

不必手动构建字符串,您可以使用Java没有的string.join的各种等价物,这些等价物由不同的第三方库提供。

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

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();
您可以创建布尔数组。假设真值是由用户输入的,而假值是初始化的

int[] myArray = {0, 0, 0, 0, 0};
每次在数组中更改或输入新值时,只需将该值标记为“已更改”

您的方法toString()将

公共字符串toString(){
字符串allstr=“”;
for(int i=0;i
您的第一个for循环没有执行任何操作。。。其次,myArray是整数数组吗?hm忘了提到用户可以输入所有可能的值。不幸的是,这是行不通的。我还必须用0初始化数组。
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();
int[] myArray = {0, 0, 0, 0, 0};
boolean[] isChanged = {false, false, false, false, false};
isChanged[i] = true;
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;
}