关于数组去零有关问题.麻烦大家看看那里出有关问题了,多谢
关于数组去零问题.麻烦大家看看那里出问题了,谢谢
// 创建原数组,里面有零
int nums[] = { 12, 0, 21, 34, 43, 0, 5, 64, 0, 76 };
// 创建新数组,去零
int newNums[] = new int[10];
// 输出新的数组
for (int i = 0; i < nums.length; i++) {
newNums[i] = nums[i];
}
for (int i = 0; i < nums.length; i++) {
if (nums[i] == 0) {
// 判断如果遇到有0,就用for循环将0后面剩余数组全部提前一位
for (int j = i; j < nums.length - 1; j++) {
newNums[j] = nums[j + 1];
}
}
}
// 去零之后输出
System.out.println("去零之后的结果是:");
for (int i = 0; i < newNums.length; i++) {
System.out.print(newNums[i] + "、");
}
------解决方案--------------------
你前移了一位之后newNums[j] 和num[i]位置已经错开。。所以后面的不会再移动。。
------解决方案--------------------
对旧数组遍历,非0就将此元素拷贝到新数组,然后输出新数组,有问题吗?
------解决方案--------------------
nums第一次匹配到0,i=1
12, 0, 21, 34, 43, 0, 5, 64, 0, 76
newnums变成
12,21,34,43,0,5,64,0,76,76
第二次匹配到0,i=5你newNums[j] = nums[j + 1];这句意思是想让i=6及以后逐个覆盖前面的一位,然而你自己看
newnums[6]他已经是等于nums[7]了,所以,保持不变!!不可能出现前移的效果。。
说不清楚了,。自己领悟。。
// 创建原数组,里面有零
int nums[] = { 12, 0, 21, 34, 43, 0, 5, 64, 0, 76 };
// 创建新数组,去零
int newNums[] = new int[10];
// 输出新的数组
for (int i = 0; i < nums.length; i++) {
newNums[i] = nums[i];
}
for (int i = 0; i < nums.length; i++) {
if (nums[i] == 0) {
// 判断如果遇到有0,就用for循环将0后面剩余数组全部提前一位
for (int j = i; j < nums.length - 1; j++) {
newNums[j] = nums[j + 1];
}
}
}
// 去零之后输出
System.out.println("去零之后的结果是:");
for (int i = 0; i < newNums.length; i++) {
System.out.print(newNums[i] + "、");
}
------解决方案--------------------
------解决方案--------------------
对旧数组遍历,非0就将此元素拷贝到新数组,然后输出新数组,有问题吗?
------解决方案--------------------
nums第一次匹配到0,i=1
12, 0, 21, 34, 43, 0, 5, 64, 0, 76
newnums变成
12,21,34,43,0,5,64,0,76,76
第二次匹配到0,i=5你newNums[j] = nums[j + 1];这句意思是想让i=6及以后逐个覆盖前面的一位,然而你自己看
newnums[6]他已经是等于nums[7]了,所以,保持不变!!不可能出现前移的效果。。
说不清楚了,。自己领悟。。