java中的数组未赋值时,默认元素都为零,这样老是会出问题,怎么解决啊?比如我下面这个程序。
importjava.util.Scanner;publicclassch06{publicstaticvoidmain(String[]shu){int[]list1=...
import java.util.Scanner;
public class ch06 {
public static void main(String[] shu) {
int[] list1 = new int[10];
Scanner input = new Scanner(System.in);
System.out.println("Enter ten numbers:");
for (int i = 0; i < list1.length; i++)
list1[i] = input.nextInt();
eliminateDuplicates(list1);
}
public static void eliminateDuplicates(int[] list) {
int[] result = new int[list.length];
int k = 0;
for (int i = 0; i < list.length; i++) {
int j = 0;
for (; j <= i && list[i] != result[j]; j++);/*如果再插入的那个不等于前面所有的数,那么这个j是比前
数的个数多加了一,这时候就可以插入数据了,就让k等于这个时候的list[i],然后K还有自增。但是有一个问题是,
未赋初值时,数组的第一个值是零,如果数组中出现零,那么这样消除重复后零就都没有了。怎么解决?*/
if (j > i)
result[k++] = list[i];
}
for(int i=0;i<k;i++){
System.out.print(result[i]+" ");
}
}
} 展开
public class ch06 {
public static void main(String[] shu) {
int[] list1 = new int[10];
Scanner input = new Scanner(System.in);
System.out.println("Enter ten numbers:");
for (int i = 0; i < list1.length; i++)
list1[i] = input.nextInt();
eliminateDuplicates(list1);
}
public static void eliminateDuplicates(int[] list) {
int[] result = new int[list.length];
int k = 0;
for (int i = 0; i < list.length; i++) {
int j = 0;
for (; j <= i && list[i] != result[j]; j++);/*如果再插入的那个不等于前面所有的数,那么这个j是比前
数的个数多加了一,这时候就可以插入数据了,就让k等于这个时候的list[i],然后K还有自增。但是有一个问题是,
未赋初值时,数组的第一个值是零,如果数组中出现零,那么这样消除重复后零就都没有了。怎么解决?*/
if (j > i)
result[k++] = list[i];
}
for(int i=0;i<k;i++){
System.out.print(result[i]+" ");
}
}
} 展开
2个回答
展开全部
你问这问题,证明你对数组的静态初始化和动态初始化还不够了解。
数组的静态初始化
int[] a={1,2,3,4};
动态初始化
int[] intArray;//声明数组
intArray = new int[5];//为数组分配空间
所谓的静态和动态是相对于程序运行是而言的,静态是在程序编译时就初始化好了的,动态初始化是在程序运行是才动态分配内存空间。对于代码而言,其实都可以。唯一不一样的地方, 就是动态的初始值都是0,静态的是直接给定值了。
所以对于动态初始化的数组,里面元素默认都是0
数组的静态初始化
int[] a={1,2,3,4};
动态初始化
int[] intArray;//声明数组
intArray = new int[5];//为数组分配空间
所谓的静态和动态是相对于程序运行是而言的,静态是在程序编译时就初始化好了的,动态初始化是在程序运行是才动态分配内存空间。对于代码而言,其实都可以。唯一不一样的地方, 就是动态的初始值都是0,静态的是直接给定值了。
所以对于动态初始化的数组,里面元素默认都是0
追问
不好意思,我问的问题其实是这样的。就是要设计一个方法,消除数组中的重复元素,但是用以上代码方法会在消除重复时,数组中的零都没有了。我想让0出现在数组中,要怎么实现?
追答
你可以加个标志判断是否有0,下面那个方法可以这样改:
public static void eliminateDuplicates(int[] list) {
int[] result = new int[list.length];
int k = 0;
boolean flag =true;
for (int i = 0; i i)
result[k++] = list[i];
}
for (int i = 0; i < k; i++) {
System.out.print(result[i] + " ");
}
}
展开全部
for (; j <= i && list[i] != result[j]; j++);
/*
* 如果再插入的那个不等于前面所有的数,那么这个j是比前 数的个数多加了一, * 这时候就可以插入数据了,就让k等于这个时候的list[i],然后K还有自增。 但是有一个问题是,
* 未赋初值时,数组的第一个值是零,如果数组中出现零,那么这样消除重复后零就都没有了。怎么解决?
*/
if (j > i || (j == i && list[i] == 0)){
result[k++] = list[i];
}
其中:|| (j == i && list[i] == 0) 应该能解决你的问题!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询