Ik probeer een geheel getal naar een array te converteren. Bijvoorbeeld 1234 tot int[] arr = {1,2,3,4};
.
Ik heb een functie geschreven:
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]);
}
}
Maar er wordt een uitzondering gegenereerd:
Uitzondering in thread “main” java.lang.NumberFormatException: Voor invoerstring: “”
op java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)op java.lang.Integer.parseInt(Integer.java:504)
op java.lang.Integer.parseInt(Integer.java:527)
op q4.test.convertInt2Array(test.java:28)
op q4.test.main(test.java:14)
Java-resultaat: 1
Hoe kan ik dit oplossen?
Antwoord 1, autoriteit 100%
Het directe probleem is dat u <= temp.length()
gebruikt in plaats van < temp.length()
. U kunt dit echter veel eenvoudiger bereiken. Zelfs als u de stringbenadering gebruikt, kunt u het volgende gebruiken:
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';
}
U moet dezelfde wijziging doen om < newGuess.length()
Bij het afdrukken van de inhoud ook – anders voor een reeks lengte 4 (die geldige indexen 0, 1, 2, 3) heeft, probeer dan newGuess[4]
. De overgrote meerderheid van for
lussen die ik schrijf gebruik <
in de conditie, in plaats van <=
.
2, Autoriteit 70%
U hoeft niet int
naar String
te converteren. Gebruik gewoon % 10
om het laatste cijfer te krijgen en vervolgens uw INT door 10 te verdelen om naar de volgende te gaan.
int temp = test;
ArrayList<Integer> array = new ArrayList<Integer>();
do{
array.add(temp % 10);
temp /= 10;
} while (temp > 0);
Hiermee wordt u achtergelaten met ArrayList met uw cijfers in omgekeerde volgorde. U kunt het eenvoudig terugkeren als het vereist is en converteert naar INT [].
3, Autoriteit 58%
Gebruik:
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);
}
Het hoofdidee is
-
Converteer de INT naar zijn stringwaarde
Integer.toString(num);
-
Verkrijg een stroom van INT die de ASCII-waarde van elke char (~ cijfer) weergeeft die de snaarversie van ons geheel getal samenstellen
Integer.toString(num).chars();
-
Converteer de ASCII-waarde van elk teken naar de waarde ervan.
Om de werkelijke int-waarde van een teken te krijgen, moeten we de ASCII-codewaarde van het teken ‘0’ aftrekken van de ASCII-code van het werkelijke teken.
Om alle cijfers van ons nummer te krijgen, moet deze bewerking worden toegepast op elk teken (overeenkomend met het cijfer) dat het tekenreeksequivalent van ons nummer vormt, wat wordt gedaan door de onderstaande kaartfunctie op onze IntStream toe te passen.Integer.toString(num).chars().map(c -> c-'0');
-
Converteer de stroom van int naar een array van int met toArray()
Integer.toString(num).chars().map(c -> c-'0').toArray();
Antwoord 4, autoriteit 6%
U kunt gebruiken:
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;
}
Antwoord 5, autoriteit 6%
Je kunt gewoon doen:
char[] digits = string.toCharArray();
En dan kun je de tekens evalueren als gehele getallen.
Bijvoorbeeld:
char[] digits = "12345".toCharArray();
int digit = Character.getNumericValue(digits[0]);
System.out.println(digit); // Prints 1
Antwoord 6, autoriteit 5%
Het zou veel eenvoudiger zijn om de String.splitmethode:
public static void fn(int guess) {
String[] sNums = Integer.toString(guess).split("");
for (String s : nums) {
...
7, Autoriteit 4%
In Scala kunt u het doen als:
def convert(a: Int, acc: List[Int] = Nil): List[Int] =
if (a > 0) convert(a / 10, a % 10 +: acc) else acc
in één regel en zonder de bestelling te achterhalen.
8, Autoriteit 4%
U kunt zoiets doen:
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;
}
Hiermee wordt de bestelling ook behouden.
9, Autoriteit 4%
In JavaScript doet deze enkele regel de truc:
Array.from(String(12345), Number);
Voorbeeld
const numToSeparate = 12345;
const arrayOfDigits = Array.from(String(numToSeparate), Number);
console.log(arrayOfDigits); //[1,2,3,4,5]
10
U hoeft niet substring(...)
te gebruiken. Gebruik temp.charAt(i)
om een cijfer te krijgen en de volgende code te gebruiken om char
naar int
te converteren.
char c = '7';
int i = c - '0';
System.out.println(i);
11
Probeer dit!
int num = 1234;
String s = Integer.toString(num);
int[] intArray = new int[s.length()];
for(int i=0; i<s.length(); i++){
intArray[i] = Character.getNumericValue(s.charAt(i));
}
12
Bel deze functie:
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;
}
Antwoord 13
temp2 = temp.substring(i);
retourneert altijd de lege string “”.
In plaats daarvan zou je lus de voorwaarde i<temp.length()
moeten hebben. En temp2
moet altijd temp.substring(i, i+1);
zijn.
Op dezelfde manier als u newGuess
afdrukt, moet u doorlopen tot newGuess.length
maar niet opnemen. Uw conditie zou dus i<newGuess.length
moeten zijn.
Antwoord 14
De <=
in het for-statement moet een <
zijn.
Trouwens, het is mogelijk om dit veel efficiënter te doen zonder strings te gebruiken, maar in plaats daarvan /10
en %10
gehele getallen te gebruiken.
Antwoord 15
Ik kan de volgende methode voorstellen:
Converteer het getal naar een tekenreeks → converteer de tekenreeks naar een reeks tekens → converteer de reeks tekens naar een reeks gehele getallen
Hier komt mijn code:
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
}
}
16
Gebruik:
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;
U moet dit in een methode plaatsen.
17
Ik kan geen opmerkingen toevoegen aan Vladimir’s oplossing , maar ik denk dat dit efficiënter is wanneer uw eerste nummers ook lager kunnen zijn dan 10.
Dit is mijn voorstel:
int temp = test;
ArrayList<Integer> array = new ArrayList<Integer>();
do{
array.add(temp % 10);
temp /= 10;
} while (temp > 1);
Vergeet niet om de array om te keren.
18
Hier is de functie die een geheel getal inneemt en een reeks cijfers retourneert.
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;
}
Antwoord 19
Neem eerst de invoer van de gebruiker als int, converteer deze naar String
en maak een tekenreeks ter grootte van str.length()
. Vul nu een tekenreeks in met een for-lus met behulp van charAt()
.
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 +" ");
}
Antwoord 20
Zonder gebruik te maken van String, Integer, ArrayList, Math:
// Actual number
int n = 56715380;
// Copy of the number
int m = n;
// Find no. of digits as length
int ln = 0;
while (m > 0) {
m = m / 10;
ln++;
}
// Copy of the length
int len = ln;
// Reverse the number
int revNum = 0;
ln--;
int base;
while (n > 0) {
base = 1;
for (int i = 0; i < ln; i++) {
base = base * 10;
}
revNum = revNum + base * (n % 10);
n = n / 10;
ln--;
}
// Store the reverse number in the array
int arr[] = new int[len];
for (int i = 0; revNum > 0; i++) {
arr[i] = revNum % 10;
revNum = revNum / 10;
}
// Print the array
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
}
21
Ik kan geen opmerkingen toevoegen aan de beslissing van Vladimir , maar u kunt onmiddellijk een array in de juiste richting maken. Hier is mijn oplossing:
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;
}
BELANGRIJK: deze oplossing werkt niet voor negatieve gehele getallen.
22
i gewijzigd JON SKEET’s geaccepteerde antwoord Omdat het geen negatieve waarden accepteert.
Dit accepteert nu en converteert het nummer op de juiste manier:
public static void main(String[] args) {
int number = -1203;
boolean isNegative = false;
String temp = Integer.toString(number);
if(temp.charAt(0)== '-') {
isNegative = true;
}
int len = temp.length();
if(isNegative) {
len = len - 1;
}
int[] myArr = new int[len];
for (int i = 0; i < len; i++) {
if (isNegative) {
myArr[i] = temp.charAt(i + 1) - '0';
}
if(!isNegative) {
myArr[i] = temp.charAt(i) - '0';
}
}
if (isNegative) {
for (int i = 0; i < len; i++) {
myArr[i] = myArr[i] * (-1);
}
}
for (int k : myArr) {
System.out.println(k);
}
}
Uitgang
-1
-2
0
-3
23
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;
}
}