如何解决这个Java Array默认初始化

时间:2012-01-19 05:08:33

标签: java

public class ApiClass{
 //The below method prints only the user entered values 
 public void printArray(int[] a){
   for(int element : a){
     //ignore because this is the default value when array is created not user entered
     if(element != 0)
     {
       System.out.print(element+"\t");
     }
   }
 }
}

public class Client{
  public static void main(String... args){
    ApiClass api = new ApiClass();
    int[] input = new int[5];
    input[0]= 3;
    input[2]= 2;
    input[3] = 1;
    api.printArray(input);
  }
}

这工作正常,但3,2,0或0,0,0或3,0,1都没有输入任何输入用户输入零

5 个答案:

答案 0 :(得分:1)

原始int类型的默认值为0,因此数组中未启动的元素将保持0值,

现在,如果您检查元素是否不为0则打印,如果您输入3,2,0,则它将跳过0

最好使用List

List<Integer> numbers = new ArrayList<Integer>();
numbers.add(1);
numbers.add(0);
numbers.add(3);

现在迭代数字

for(Integer num: numbers){
 //print num, no need to check for `0` any more
}

答案 1 :(得分:1)

这不是一个好方法。如果您有三个用户条目,则应该创建一个长度为3的数组(而不是长度为5的数组,其中包含两个尾随未使用的条目)。无法区分“默认”0和稍后指定的0。

另一种选择是使用Integer[],其中“default”为null,而不是0(但是你不能区分“default”null和后面指定的null。)

如果您事先不知道数组的长度,请改用List<Integer>

答案 2 :(得分:0)

您的for循环错误。

应该是

for(int element: a) {
 if(element !=0){
   System.out.println(element + "\t");
 }
}

您的初始实现从未增加i的值。

答案 3 :(得分:0)

试试这个:

public void printArray(Integer[] a){
   for(Integer element : a){
    //Ignore because this is the default value when array is created not user entered
    if (element != null) {
      System.out.print(element.toString() + "\t");
    }
  }
}

public class Client{
  public static void main(String... args){
    ApiClass api = new ApiClass();
    Integer[] input = new Integer[5];
    input[0]= 3;
    input[2]= 2;
    input[3] = 1;
    api.printArray(input);
  }
}

答案 4 :(得分:0)

萨蒂亚:

如果您的问题只是从用户输入的0值中消除默认的0值,为什么不用您知道用户永远不能输入的值来初始化数组? (你需要确保是这种情况)。

一种方法是在数组之前迭代并初始化,另一种方法是使用 Arrays.fill()