2016-10-24 24 views
-2
package programame; 

import java.util.Scanner; 
import java.util.Arrays; 

public class E100 { 
public static int ascendente(int a) 
{ 
    String str = Integer.toString(a); 
    String max[] = str.split(""); 
    Arrays.sort(max); 
    String str1 = Arrays.toString(max); 
    int ascendente = Integer.parseInt(str1); 
    return ascendente; 
} 
public static void main(String args[]) { 
    Scanner sc = new Scanner(System.in); 
    int intentos = sc.nextInt(); 
    int x = sc.nextInt(); 
    System.out.println(ascendente(x)); 
    } 
} 

Hallo zu sortieren, Ich versuche, eine int Lese von einem Scanner zu sortieren, aber jedes Mal laufe ich es es mir die Fehlermeldung gibt =Java-Fehler beim Versuch, ein int

Exception in thread "main" java.lang.NumberFormatException: For input string: "[3, 4, 6, 7]" at 
java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:580)  at 
java.lang.Integer.parseInt(Integer.java:615) at 
programame.E100.ascendente(E100.java:18) at 
programame.E100.main(E100.java:25) 

C:\Users\agn12\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1 
+0

posten Sie bitte den kompletten Stack-Trace – Blip

+0

Ist es jetzt? –

+0

Arrays.toString setzt "[" "]" Klammern. – Sneh

Antwort

0

Sie versuchen die Nummer 3467 in seine konstituierenden Dezimalstellen zu spalten, sortieren und die Ziffern in einen einzelnen String neu zu konstruieren:

String max[] = str.split(""); 
Arrays.sort(max); 
String str1 = Arrays.toString(max); 

Das Problem ist, dass Arrays.toString eine für Menschen lesbare Darstellung des Arrays zurückgibt, die in der Form "[3, 4, 6, 7]" ist. Dies kann natürlich nicht als int analysiert werden. Sie erwarten, die Zeichenfolge "3467" zu erhalten.

Eine bessere Möglichkeit (in Bezug auf Laufzeit-Effizienz und einfache Codierung) ist es, die Zeichenfolge in einzelne Zeichen anstelle von Ein-Zeichen-Zeichenfolgen zu teilen. Dann können Sie sie sortieren, und sie leicht in eine Zeichenkette drehen Sie einen der Konstrukteurs-String mit:

char[] max = str.toCharArray(); 
Arrays.sort(max); 
String str1 = new String(max); 

Der Rest des Codes gleich bleiben kann.

+0

Ich habe es versucht, aber gibt mir den Fehler "char [] kann nicht in String []" konvertiert werden –

+0

@ A.Gisbert Apologies, Max ist ein Char-Array, kein String-Array. Siehe korrigierte Bearbeitung. –

+0

Ok, jetzt funktioniert es. Ich danke dir sehr! –

0

Der Fehler ist mit diese Zeile

Zeichenfolge str1 = Arrays.toString (max);

Sie versuchen, eine Reihe von Zahlen auf Zeichenfolge zu konvertieren, so max = [2]

So str1 = "[2]"

und dann diese

int in eine Zahl konvertieren ascendente = Ganzzahl.parseInt (str1);

Gibt einen Fehler :: java.lang.NumberFormatException

1

Die Ausnahme

java.lang.NumberFormatException: For input string: "[3, 4, 6, 7]" 

sagt, dass Java nicht so String in einen Int umwandeln können, wie Sie anfordern,. Es kann von Nutzen sein zu können, die Compiler-Fehler lesen:

programame.E100.ascendente(E100.java:18) at

programame.E100.main(E100.java:25)

Es sagt Ihnen, dass das Problem bei der Linie 25 in Verfahren Haupt von E100.java entsteht, dass die Methode ascendente wiederum ruft und das Problem ist in Zeile 18, wo Sie versuchen, ein int-Array von Strings zu konvertieren.

Verwandte Themen