Converteer een geheel getal naar een reeks cijfers

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 forlussen die ik schrijf gebruik <in de conditie, in plaats van <=.


2, Autoriteit 70%

U hoeft niet intnaar Stringte converteren. Gebruik gewoon % 10om 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

  1. Converteer de INT naar zijn stringwaarde

    Integer.toString(num);
    
  2. 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();
    
  3. 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');
    
  4. 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 charnaar intte 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 temp2moet altijd temp.substring(i, i+1);zijn.

Op dezelfde manier als u newGuessafdrukt, moet u doorlopen tot newGuess.lengthmaar niet opnemen. Uw conditie zou dus i<newGuess.lengthmoeten 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 /10en %10gehele 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 Stringen 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;
    }
}

Other episodes