Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.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的int数组中表示未初始化的值?_Java_Arrays_Nan - Fatal编程技术网

如何在Java的int数组中表示未初始化的值?

如何在Java的int数组中表示未初始化的值?,java,arrays,nan,Java,Arrays,Nan,我有一个int数组,它存储5个整数。我打算将5个数字作为输入,并以排序方式(升序)将它们放入数组中。所以基本上,我把每一步接受的值,按升序放在它的位置上。假设没有输入是0,我有以下代码: System.out.println("Enter 5 integers..."); Scanner sc=new Scanner(System.in); int[] arr = new int[5]; int c; //assuming that no number entered is 0 for(in

我有一个
int
数组,它存储5个整数。我打算将5个数字作为输入,并以排序方式(升序)将它们放入数组中。所以基本上,我把每一步接受的值,按升序放在它的位置上。假设没有输入是
0
,我有以下代码:

System.out.println("Enter 5 integers...");
Scanner sc=new Scanner(System.in);
int[] arr = new int[5];
int c;

//assuming that no number entered is 0

for(int i=1; i<=5; i++){
    c = sc.nextInt();
    for(int j=0; j<5; j++){
        if(arr[j] == 0){ //placing an input where there's 0
            arr[j] = c;
            break;
        }
        else if(c < arr[j]){
            for(int k=4; k>j; k--)
                arr[k] = arr[k-1];
            arr[j] = c;
            break;
        }
    }
}
System.out.println("The numbers in ascending order are\n"
                        +java.util.Arrays.toString(arr));
System.out.println(“输入5个整数…”);
扫描仪sc=新的扫描仪(System.in);
int[]arr=新的int[5];
INTC;
//假设没有输入数字是0

对于(inti=1;i在Java中,您有一种替代过去语言的“经典”方式的方法,这种方法依赖于“神奇值”来表示未初始化的
int
(类似于最大或最小的可能值)

您可以使用
Integer
,而不是
int
,并对“未初始化”值使用
null

Integer[]arr=新整数[5];

这里,
arr
的每个元素自动初始化为
null
,这很好


但是一定要注意比较引用而不是值的可怕的
==

在Java中,您有一种替代过去语言的“经典”方式,它依赖“神奇值”来表示未初始化的
int
(类似于最大或最小的可能值)

您可以使用
Integer
,而不是
int
,并对“未初始化”值使用
null

Integer[]arr=新整数[5];

这里,
arr
的每个元素自动初始化为
null
,这很好


但是要注意比较引用而不是值的可怕的
==

一种方法是使用一些默认值,您不希望输入为有效输入(例如,如果所有有效输入都是非负的,负数如
-1
整数。最小值
可以工作)。如果要使用基本整数数组(即
int[]
),这是唯一的方法


另一种方法是使用
Integer
Integer[]
)数组,默认情况下,其元素初始化为
null
。使用包装类型而不是原语被认为效率较低,因此存在折衷。

一种方法是使用一些默认值,您不希望将其作为有效输入输入(例如,
-1
Integer.MIN_VALUE
等负数可以在所有有效输入均为非负数的情况下工作)。如果要使用基本整数数组(即
int[]
),这是唯一的方法

另一种方法是使用
Integer
Integer[]
)数组,默认情况下,其元素初始化为
null
。使用包装类型而不是原语被认为效率较低,因此存在折衷

如果用户输入0怎么办?

然后你需要:

  • 使用负数初始化数组
  • 不允许用户作为用户提供 输入负数(验证)
另一个选项是使用包装类整数而不是原语,因为它们可以很容易地证明为空引用

依我看,你的情况没有必要

如果用户输入0怎么办?

然后你需要:

  • 使用负数初始化数组
  • 不允许用户作为用户提供 输入负数(验证)
另一个选项是使用包装类整数而不是原语,因为它们可以很容易地证明为空引用


在我看来,在您的情况下没有必要……

您可以保留一个长度相同的
布尔值的单独数组,并且每个具有与
int
数组中相同索引的条目指示值是否已初始化:

int[] arr = new int[5];
boolean[] initialized = new boolean[arr.length];
int c;

//assuming that no number entered is 0

for(int i=1; i<=5; i++){
    c = sc.nextInt();
    for(int j=0; j<5; j++){
        if(!initialized[j]){ // use boolean array to find out if already initialized
            arr[j] = c;
            initialized[j] = true;
            break;
        }
        else if(c < arr[j]){
            for(int k=4; k>j; k--) {
                arr[k] = arr[k-1];
                initialized[k] = initialized[k-1];
            }
            arr[j] = c;
            initialized[j] = true;
            break;
        }
    }
}
int[]arr=newint[5];
布尔值[]已初始化=新布尔值[arr.length];
INTC;
//假设没有输入数字是0

对于(int i=1;i您可以保留一个长度相同的
boolean
的单独数组,每个具有与
int
数组中相同索引的条目指示值是否已初始化:

int[] arr = new int[5];
boolean[] initialized = new boolean[arr.length];
int c;

//assuming that no number entered is 0

for(int i=1; i<=5; i++){
    c = sc.nextInt();
    for(int j=0; j<5; j++){
        if(!initialized[j]){ // use boolean array to find out if already initialized
            arr[j] = c;
            initialized[j] = true;
            break;
        }
        else if(c < arr[j]){
            for(int k=4; k>j; k--) {
                arr[k] = arr[k-1];
                initialized[k] = initialized[k-1];
            }
            arr[j] = c;
            initialized[j] = true;
            break;
        }
    }
}
int[]arr=newint[5];
布尔值[]已初始化=新布尔值[arr.length];
INTC;
//假设没有输入数字是0

对于(int i=1;i为什么不使用整数数组?可以在那里使用null。另一个选项是创建一个包装类,将您的值包装为status,但这个解决方案听起来很简单ugly@pbielicki虽然我没有想到这一点,但我正在考虑在这种情况下是否可以使用
Double.NaN
,因此不必这样做对基元类型使用包装类。为什么不使用整数数组?可以在那里使用null。其他选项是创建一个包装类,用状态包装您的值,但此解决方案听起来更像ugly@pbielicki虽然我没有想到这一点,但我正在考虑是否可以使用
Double.NaN
在这种情况下,不必为基元类型使用包装器类。我假设用户可以输入任何东西,也可以是负数,我不能用数字表示未初始化的值。我假设用户可以输入任何东西,也可以是负数,我不能用数字表示未初始化的值。所以这是c中唯一的方法整数的ase,对吗?在
Double
数组中不能像使用
Double.NaN
那样,对吗?即使在-128到+127范围内,如果数字是使用自动装箱或integer.valueOf()创建的,则只能使用
=
。但是如果其中一个整数是使用
新整数(123)创建的
那么,这一个不等于
=
Integer.valueOf(123)
,例如。是的,这是一个很好的观点。我删除了我的最后一句话。Less通常是m