it-swarm.com.de

String teilen und auf int Array setzen

Ich muss einen String mit den Zahlen ex eingeben: 1,2,3,4,5 . Das ist ein Beispiel der Eingabe, dann muss ich das in ein Array von INT einfügen, damit ich es sortieren kann, aber nicht funktioniert so wie es funktionieren sollte.

package array;

import Java.util.Scanner;

public class Array {

    public static void main(String[] args) {
        String input;
        int length, count, size;
        Scanner keyboard = new Scanner(System.in);
        input = keyboard.next();
        length = input.length();
        size = length / 2;
        int intarray[] = new int[size];
        String strarray[] = new String[size];
        strarray = input.split(",");

        for (count = 0; count < intarray.length ; count++) {
            intarray[count] = Integer.parseInt(strarray[count]);
        }

        for (int s : intarray) {
            System.out.println(s);
        }
    }
}
24
user1076331

Für die Eingabe 1,2,3,4,5 hat die Eingabe die Länge 9. 9/2 = 4 in Ganzzahl-Mathematik. Sie speichern also nur die ersten vier Variablen, nicht alle 5.

Selbst wenn Sie das behoben haben, wird es furchtbar kaputt gehen, wenn Sie eine Eingabe von 10,11,12,13 eingeben.

Es würde (zufällig) funktionieren, wenn Sie 1,2,3,4,50 für eine Eingabe verwenden, seltsamerweise :-)

Es wäre viel besser, wenn Sie so etwas tun

String[] strArray = input.split(",");
int[] intArray = new int[strArray.length];
for(int i = 0; i < strArray.length; i++) {
    intArray[i] = Integer.parseInt(strArray[i]);
}

Wenn Sie einen Fehler erhalten, empfehle ich Ihnen dringend, diesen Code zusammen mit dem Code zu veröffentlichen. Möglicherweise haben Sie keinen Benutzer mit einem Jdk, der den Code zum Debuggen kompilieren kann. :)

50
corsiKa

Java 8 bietet eine Stream-basierte Alternative zur manuellen Iteration:

int[] intArray = Arrays.stream(input.split(","))
    .mapToInt(Integer::parseInt)
    .toArray();

Seien Sie darauf vorbereitet, NumberFormatException abzufangen, wenn die Eingabe Zeichenfolgen enthalten kann, die nicht in eine Ganzzahl konvertiert werden können.

17
Andy Brown

Nehmen wir an, Sie haben als "1,2,3,4" eingegeben.

Das bedeutet, dass die Länge der Eingabe 7 beträgt. Nun schreiben Sie die Größe = 7/2 = 3,5. Da size jedoch int ist, wird es auf 3 gerundet.

Wenn Sie den Code wie unten beschrieben neu schreiben, sollte er funktionieren:

String input;
int length, count, size;
Scanner keyboard = new Scanner(System.in);
input = keyboard.next();
length = input.length();

String strarray[] = input.split(",");
int intarray[] = new int[strarray.length];

for (count = 0; count < intarray.length ; count++) {
    intarray[count] = Integer.parseInt(strarray[count]);
}

for (int s : intarray) {
    System.out.println(s);
}
2
Tapan Thaker
String input = "2,1,3,4,5,10,100";
String[] strings = input.split(",");
int[] numbers = new int[strings.length];
for (int i = 0; i < numbers.length; i++)
{
  numbers[i] = Integer.parseInt(strings[i]);
}
Arrays.sort(numbers);

System.out.println(Arrays.toString(numbers));
0
Trevor Freeman
List<String> stringList = new ArrayList<String>(Arrays.asList(arr.split(",")));
List<Integer> intList = new ArrayList<Integer>();
for (String s : stringList) 
   intList.add(Integer.valueOf(s));
0
egroque

Ändern Sie die Reihenfolge, in der Sie Dinge tun, ein bisschen. Sie scheinen sich ohne besonderen Grund durch 2 zu teilen. 

Ihre Anwendung garantiert zwar nicht eine Eingabezeichenfolge von durch Semikolons getrennten Variablen, Sie können dies jedoch leicht tun: 

package com;

import Java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        // Good practice to initialize before use
        Scanner keyboard = new Scanner(System.in);
        String input = "";
        // it's also a good idea to Prompt the user as to what is going on
        keyboardScanner : for (;;) {
            input = keyboard.next();
            if (input.indexOf(",") >= 0) { // Realistically we would want to use a regex to ensure [0-9],...etc groupings 
                break keyboardScanner;  // break out of the loop
            } else { 
                keyboard = new Scanner(System.in);
                continue keyboardScanner; // recreate the scanner in the event we have to start over, just some cleanup
            }
        }

        String strarray[] = input.split(","); // move this up here      
        int intarray[] = new int[strarray.length];

        int count = 0; // Declare variables when they are needed not at the top of methods as there is no reason to allocate memory before it is ready to be used
        for (count = 0; count < intarray.length; count++) {
            intarray[count] = Integer.parseInt(strarray[count]);
        }

        for (int s : intarray) {
            System.out.println(s);
        }
    }
}
0
Mike McMahon

Sie erledigen die Integer-Division, so dass Sie die korrekte Länge verlieren, wenn der Benutzer gerade eine ungerade Anzahl von Eingaben vornimmt. Dies ist ein Problem, das ich festgestellt habe. Wenn ich den Code mit der Eingabe '1,2,3,4,5,6,7' ausführen, wird mein letzter Wert ignoriert ...

0
Colby