我尝试将一个整数转换为数组,例如1234到int[] arr = {1,2,3,4};
我写了一个函数
public static void convertInt2Array(int guess) {
String temp = Integer.toString(guess);
String temp2;
int temp3;
int [] newGuess = new int[temp.length()];
for(int i=0;i<=temp.length();i++) {
if (i!=temp.length()) {
temp2 = temp.substring(i, i+1);
} else {
temp2 = temp.substring(i);
//System.out.println(i);
}
temp3 = Integer.parseInt(temp2);
newGuess[i] = temp3;
}
for(int i=0;i<=newGuess.length;i++) {
System.out.println(newGuess[i]);
}
}
但抛出异常:
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:504)
at java.lang.Integer.parseInt(Integer.java:527)
at q4.test.convertInt2Array(test.java:28)
at q4.test.main(test.java:14)
Java Result: 1
有什么想法吗?
直接问题是由于你使用<= temp.length()
而不是< temp.length()
。但是,您可以更简单地实现这一目标。即使您使用字符串方法,您也可以使用:
String temp = Integer.toString(guess);
int[] newGuess = new int[temp.length()];
for (int i = 0; i < temp.length(); i++)
{
newGuess[i] = temp.charAt(i) - '0';
}
在打印内容时,您需要进行相同的更改以使用< newGuess.length()
- 否则对于长度为4的数组(具有有效索引0,1,2,3),您将尝试使用newGuess[4]
。我写的绝大多数for
循环在条件中使用<
,而不是<=
。
temp2 = temp.substring(i);
将始终返回空字符串“”。
相反,你的循环应该具有条件i<temp.length()
。而temp2
应该永远是temp.substring(i, i+1);
。
同样,当你打印出newGuess
时,你应该循环到newGuess.length
但不包括。所以你的病情应该是i<newGuess.length
。
for语句中的<=
应该是<
顺便说一句,有可能在不使用字符串的情况下更有效地做到这一点,而是使用整数的/10
和%10
。
_
调用这些功能
public int[] convertToArray(int number) {
int i = 0;
int length = (int) Math.log10(number);
int divisor = (int) Math.pow(10, length);
int temp[] = new int[length + 1];
while (number != 0) {
temp[i] = number / divisor;
if (i < length) {
++i;
}
number = number % divisor;
if (i != 0) {
divisor = divisor / 10;
}
}
return temp;
}
我可以建议以下方法:
将数字转换为字符串 - >将字符串转换为字符数组 - >将字符数组转换为整数数组
这是我的代码:
public class test {
public static void main(String[] args) {
int num1 = 123456; // example 1
int num2 = 89786775; // example 2
String str1 = Integer.toString(num1); // converts num1 into String
String str2 = Integer.toString(num2); // converts num2 into String
char[] ch1 = str1.toCharArray();// gets str1 into an array of char
char[] ch2 = str2.toCharArray();// gets str2 into an array of char
int[] t1 = new int[ch1.length];// defines t1 for bringing ch1 into it
int[] t2 = new int[ch2.length];// defines t2 for bringing ch2 into it
for(int i=0;i<ch1.length;i++) // watch the ASCII table
t1[i]= (int) ch1[i]-48;// ch1[i] is 48 units more than what we want
for(int i=0;i<ch2.length;i++)// watch the ASCII table
t2[i]= (int) ch2[i]-48;// ch2[i] is 48 units more than what we want
}
}
int count = 0;
String newString = n + "";
char [] stringArray = newString.toCharArray();
int [] intArray = new int[stringArray.length];
for (char i : stringArray) {
int m = Character.getNumericValue(i);
intArray[count] = m;
count += 1;
}
return intArray;
兄弟告诉我这是否有效。你必须把它放到我儿子的方法中。
我无法为Vladimir解决方案添加评论,但我认为当您的初始数字也低于10时,这也更有效。这是我的建议:
int temp = test;
ArrayList<Integer> array = new ArrayList<Integer>();
do{
array.add(temp % 10);
temp /= 10;
} while (temp > 1);
记得要反转数组。
这是带整数和返回数字数组的函数。
static int[] Int_to_array(int n)
{
int j = 0;
int len = Integer.toString(n).length();
int[] arr = new int[len];
while(n!=0)
{
arr[len-j-1] = n%10;
n = n/10;
j++;
}
return arr;
}
首先从用户输入int作为int,然后将其转换为String
,然后创建一个大小为str.length()
的字符数组,现在使用charAt()
填充for循环的char数组。
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
String str = Integer.toString(num);
char [] ch = new char [str.length()];
for(int i=0;i<str.length();i++)
{
ch[i]= str.charAt(i);
}
for(char c: ch)
{
System.out.print(c +" ");
}
我无法为Vladimir的决定添加注释,但您可以立即将阵列部署在正确的方向上。这是我的解决方案:
public static int[] splitAnIntegerIntoAnArrayOfNumbers (int a) {
int temp = a;
ArrayList<Integer> array = new ArrayList<Integer>();
do{
array.add(temp % 10);
temp /= 10;
} while (temp > 0);
int[] arrayOfNumbers = new int[array.size()];
for(int i = 0, j = array.size()-1; i < array.size(); i++,j--)
arrayOfNumbers [j] = array.get(i);
return arrayOfNumbers;
}
重要提示:此解决方案不适用于负整数。
public static void main(String k[])
{
System.out.println ("NUMBER OF VALUES ="+k.length);
int arrymy[]=new int[k.length];
for (int i = 0; i < k.length; i++)
{
int newGues = Integer.parseInt(k[i]);
arrymy[i] = newGues;
}
}
你不需要将int
转换为String
,只需使用% 10
获取最后一位数,然后将你的int除以10即可到达下一位数。
int temp = test;
ArrayList<Integer> array = new ArrayList<Integer>();
do{
array.add(temp % 10);
temp /= 10;
} while (temp > 0);
这将使您的ArrayList以相反的顺序包含您的数字。如果需要,您可以轻松还原它并将其转换为int []。
public static void main(String[] args)
{
int num = 1234567;
int[]digits = Integer.toString(num).chars().map(c -> c-'0').toArray();
for(int d : digits)
System.out.print(d);
}
主要想法是
Integer.toString(num);
Integer.toString(num).chars();
Integer.toString(num).chars().map(c -> c-'0');
Integer.toString(num).chars().map(c -> c-'0').toArray();
使用String.split
方法会简单得多
public static void fn(int guess) {
String[] sNums = Integer.toString(guess).split("");
for (String s : nums) {
...
在Scala中,您可以这样做:
def convert(a: Int, acc: List[Int] = Nil): List[Int] =
if (a > 0) convert(a / 10, a % 10 +: acc) else acc
在一行中,没有颠倒顺序。
您可以使用-
private int[] createArrayFromNumber(int number) {
String str = (new Integer(number)).toString();
char[] chArr = str.toCharArray();
int[] arr = new int[chArr.length];
for (int i = 0; i< chArr.length; i++) {
arr[i] = Character.getNumericValue(chArr[i]);
}
return arr;
}
你可以这样做:
char[] digits = string.toCharArray();
然后你可以将字符评估为整数:例如:
char[] digits = "12345".toCharArray();
int digit = Character.getNumericValue(digits[0]);
System.out.println(digit); // prints 1
你不必使用substring(...)
。使用temp.charAt(i)
获取一个数字并使用以下代码将char
转换为int
。
char c = '7';
int i = c - '0';
System.out.println(i);
你可以做这样的事情
public int[] convertDigitsToArray(int n) {
int [] temp = new int[String.valueOf(n).length()]; //calculate the length of digits
int i = String.valueOf(n).length()-1 ; //initialize the value to the last index
do {
temp[i]= n%10;
n = n/10;
i--;
}while(n>0);
return temp;
}
这也将维持秩序。
如果有帮助,请回复。