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并且第一个零由我输入,我将如何删除由于我的数组的初始化而存在的第二个零。上面的代码是项目的一部分。只是一种方法。
答案 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
。输入中的所有其他内容都是Integer
或BigDecimal
。通过对初始化与输入使用不同的类,混合的可能性较小。顺便说一句,你应该使用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;
}