Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.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_Int - Fatal编程技术网

Java 如何为长度等于该数字位数的数字数组(int)分配内存?

Java 如何为长度等于该数字位数的数字数组(int)分配内存?,java,arrays,int,Java,Arrays,Int,e、 g.对于int n=1234我可以创建一个字符串(s.valueOf(n)),然后我会这样定义数组: int[] array = new int[s.length()]; //this allocates memory for an array with 4 elements 是否有任何其他方法可以在不使用字符串且仅使用整数的情况下执行此操作?您可以使用查找位数 numOfDigits = (int)(Math.log10(n)+1); int size = (int)Math.log

e、 g.对于
int n=1234
我可以创建一个字符串
(s.valueOf(n))
,然后我会这样定义数组:

int[] array = new int[s.length()]; //this allocates memory for an array with 4 elements
是否有任何其他方法可以在不使用字符串且仅使用整数的情况下执行此操作?

您可以使用查找位数

numOfDigits = (int)(Math.log10(n)+1);
int size = (int)Math.log10(1234)+1;
int[] array = new int[size];
现在你可以:

int[] array = new int[numOfDigits];
请注意,如果
n=1999
numfodigits
将为4。所以你要为4个整数分配内存,而不是1999个整数

但是请注意,在阅读该方法的文档时,您会注意到:

如果参数为正零或负零,则结果为 负无穷大


我想你说的是Java,所以:

 int value = myValue;
 for (int noOfDigits = 1; Math.abs(value) >= 1; ++noOfDigits) {
     value /= 10;
 }

 int[] array = new int[noOfDigits];

如果数字为负数,则不包括前导符号的空格,但您可以轻松测试此条件,并将
noOfDigits
增加一个。

使用
日志函数查找位数

numOfDigits = (int)(Math.log10(n)+1);
int size = (int)Math.log10(1234)+1;
int[] array = new int[size];

根据我的理解,您可以执行以下操作以获得位数

    int n = 12345;
    int count = 1;
    while(n>10){
         n = n/10;
         count++; 
    }
    int[] array = new int[count];
if(n>0){
numberOfDigets=(int)(数学log10(n)+1);
} 
else if(n<0){
numberOfDigets=(int)(Math.log10(Math.abs(n))+1);
}否则{
数字位数=1;
}
如果n大于零,则使用Maroun Maroun编写的Math.log10函数。如果n小于零,则使用Math.abs函数获取正值。如果要为-分配空间,请添加2而不是1。else子句用于n为零并将numberOfDigets设置为1的情况

如果对java函数的额外调用无关紧要,请使用以下代码。 如果(n!=0){ numberOfDigets=(int)(Math.log10(Math.abs(n))+1); }否则{ 数字位数=1; }


Math.abs(n)
将始终返回n的正版本。要注意的值是
整数。min\u值
因为该值仍然是负数,但这是另一个问题。

对不起?你能再详细一点吗?对于编程学生来说,获取数字的位数长度是一个众所周知的问题。我相信你可以很快地用谷歌搜索它。@freak-我还能说什么?@constant你应该像permgener一样说。再详细说明一下。只是简单的数学,你需要对数的概念。如给出的答案所示,如果您最终需要整数上近似值,那么.Log有点过头了。