public class Demo2_10{
public static void arrayqulin(int a[])
{
for(int x=0;x<a.length-1;x++)
{
if(a[x]==0)
{
for(int i=x;i<a.length-3;i++)
{
a[i]=a[i+1];
}
x--;
}
}
}
public static int number(int a[])
{
int count=0;
for(int x=0;x<a.length-1;x++)
{
if(a[x]==0)
count++;
}
return count;
}
public static void printarray(int a[])
{
System.out.print("int newArr[]={");
for(int i=0;i<=a.length-1;i++)
{
System.out.print(a[i]+",");
if(i==a.length-1)
System.out.println(a[a.length-1]+"};");
}
}
public static void movearray(int a[],int b[])
{
for(int i=0;i<b.length-1;i++)
{
b[i]=a[i];
}
}
public static void main(String[] args) {
int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5} ;
int[] newArr=new int[oldArr.length-number(oldArr)-1];
arrayqulin(oldArr);
movearray(oldArr,newArr);
printarray(newArr);
}
}
我写的这个代码的目的是将oldArr中的0去掉之后变成一个新的数组给newArr,然后运行了什么结果都没有,但是风扇转的蛮快的,eclipse直接无响应了......
public class Demo2_10{
public static int number(int a[])
{
int count=0;
for(int x=0;x<=a.length-1;x++) //下标从0开始,所以最后一位是a.length-1
{
if(a[x]==0)
count++;
}
return count;
}
public static void printarray(int a[])
{
System.out.print("int newArr[]={");
for(int i=0;i<=a.length-1;i++)
{
//如果按之前那种,最后一个元素会输出两次
if(i==a.length-1)
System.out.println(a[a.length-1]+"};");
else
System.out.print(a[i]+",");
}
}
//没必要调用arrayqulin,直接for循环判断,不是0的就挪到新数组
public static void movearray(int a[],int b[])
{
for(int i=0,j=0;i<=a.length-1;i++)
{
if(a[i]!=0){
b[j] = a[i];
j++;
}
}
}
public static void main(String[] args) {
int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5} ;
int[] newArr=new int[oldArr.length-number(oldArr)];//这里不用-1,两个长度相减得到新数组的长度
movearray(oldArr,newArr);
printarray(newArr);
}
}
说不定你写了个死循环,哈哈哈哈
public static void main(String[] args) {
// 源数组
int[] oldArr = {1, 3, 4, 5, 0, 0, 6, 6, 0, 5, 4, 7, 6, 7, 0, 5};
// 不为零的数组存储
int[] notZero = new int[oldArr.length];
// 不为零的元素计数
int ind = 0;
// 循环遍历
for (int i = 0; i < oldArr.length; i++) {
// 找出不为0的元素并放入notZero中存储
if (oldArr[i] != 0) {
System.arraycopy(oldArr, i, notZero, ind++, 1);
}
}
System.out.println("oldArr含有0的元素共有" + (oldArr.length - ind) + "个");
// 创建非0输出数组
int[] newArr = new int[ind];
// 拷贝过来 参数说明详见源码
System.arraycopy(notZero, 0, newArr, 0, newArr.length);
// 循环输出
Arrays.stream(newArr).forEach(num -> System.out.print(num+","));
}
我比较懒
public static void main(String[] args) {
int[] oldArr = {1, 3, 4, 5, 0, 0, 6, 6, 0, 5, 4, 7, 6, 7, 0, 5};
int[] notZero = new int[oldArr.length];
int ind = 0;
for (int i = 0; i < oldArr.length; i++) {
if (oldArr[i] != 0) {
System.arraycopy(oldArr, i, notZero, ind++, 1);
}
}
int[] newArr = new int[ind];
System.arraycopy(notZero, 0, newArr, 0, newArr.length);
Arrays.stream(newArr).forEach(num -> System.out.print(num+","));
}
我看看去掉注释需要多少行
行号没了- -
这段代码是有可能存在死循环的,当你最后的索引大于a.length-3时,值就不会去掉0,++,--就跳不出循环了,而且一个去重操作,没人会搞得这么复杂。
漏洞百出。。