Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解决这个Java数组默认初始化问题_Java - Fatal编程技术网

如何解决这个Java数组默认初始化问题

如何解决这个Java数组默认初始化问题,java,Java,这工作正常,但对于3,2,0或0,0,0或3,0,1,如果任何输入用户输入的值为零,则基元int类型的默认值为0,因此数组中未初始化的元素将保留0值 现在,如果您检查元素是否不是0,然后打印,如果您输入3,2,0,那么它将跳过0 最好使用列表 public class ApiClass{ //The below method prints only the user entered values public void printArray(int[] a){ for(int ele

这工作正常,但对于3,2,0或0,0,0或3,0,1,如果任何输入用户输入的值为零,则基元int类型的默认值为0,因此数组中未初始化的元素将保留0值

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

最好使用
列表

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);
  }
}

这不是一个好办法。如果您有三个用户条目,那么应该创建一个长度为三的数组(而不是长度为五的数组中有两个尾随未使用的条目)。无法区分“默认”0和以后指定的0

另一种选择是使用
整数[]
,其中“默认值”为null,而不是0(但是您无法区分“默认值”null和以后分配的null)


如果您事先不知道数组的长度,请使用
列表

您的for循环错误

应该是

for(Integer num: numbers){
 //print num, no need to check for `0` any more
}
您的初始实现从未增加i的值。

请尝试使用以下方法:

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

如果您的问题只是从用户输入的0值中区分默认的0值,为什么不使用您知道用户永远无法输入的值初始化数组?(您需要确保情况确实如此)

一种方法是在初始化之前迭代数组,另一种方法是使用

为什么
整数[]
,为什么不
列出
?如果您事先不知道数组的长度,使用列表代替另一点,如果我们使用
List
我们只添加真实值,那么就不需要再检查默认值了values@Thilo这是一个面试问题,面试官不同意使用List@satya您应该指定,Thilo+1我可以用任何其他语言实现这一点吗?需要考虑的是:我认为您的printArray方法不应该是决定值是否不适合打印的方法。如果数组包含元素,并且方法只是打印数组,则打印它。如果在打印之前需要对其进行过滤,那么让其他实体承担这一责任。我们可以用任何其他面向对象的语言实现这一点吗?@satya-您的问题是什么??你想在其他OO语言中实现什么?等等。你发布有缺陷的代码,然后说它不起作用。我告诉你为什么,然后你修好它。当时的问题是什么?
for(int element: a) {
 if(element !=0){
   System.out.println(element + "\t");
 }
}
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);
  }
}