2016-04-21 8 views
16

Mein Code istIst es möglich, zwischen Zeichen und Integer zu unterscheiden, die im selben Integer-Array gespeichert sind?

int array[] = {'a',98}; 
for(int num:array) { 
    System.out.println(num); 
} 

Wenn ich das drucken, werde ich o/p als bekommen.

Wenn ich (char) num drucke, dann wird o/p und sein.

Ist es möglich, das Array als a 98 zu drucken? Meine Vermutung ist, wie Array Integer-Werte der Array-Elemente speichern wird, ist es nicht möglich. Aber irgendeine Lösung hier?

+4

Ich kann mir keinen Weg vorstellen, dies zu tun. Was ist der Grund, warum Sie das tun möchten? Vielleicht sollten Sie einen anderen Ansatz verwenden? –

+0

Ich bezweifle, dass es möglich ist. Kannst du 'List' stattdessen benutzen? – sidgate

+13

Sobald die Werte im Array sind, sind sie ganze Zahlen. Es gibt keine Möglichkeit zu wissen, ob sie aus einem Zeichen oder einer regulären Ganzzahl stammen. – Berger

Antwort

27

Ich glaube nicht, es gibt eine Möglichkeit, es mit int[] zu tun. Aber Sie können Object[] erstellen, um dies zu erreichen. Hier

ist der Code-Schnipsel:

public static void main (String[] args) throws Exception { 
    Object array[] = {'a',98}; 
    for(Object o : array){ 
     System.out.println(o); 
    } 
} 

Ausgang:

a 
98 
+9

Wenn es nur zwei mögliche Typen gibt (char und int), würde ich lieber ein benutzerdefiniertes Objekt erstellen, das den Wert festhält und sicherstellt, dass es entweder ein int oder ein char ist. Auf diese Weise vermeiden Sie gefährliches Verhalten, da das Objekt-Array mit allem gefüllt werden könnte. –

9
Object[] array = { 'a', 98 } 
if (array[i] instanceof Character) { // Or Integer 
+1

Wenn Sie ein Object-Array verwenden, muss er die Klasse nicht überprüfen, da die toString-Methode des Objekts automatisch aufgerufen wird. (In seinem Druckbeispiel) –

+0

Warum die if-Anweisung? Verwenden Sie einfach 'array [i] .toString()', um eine agnostische Zeichenfolgendarstellung zu erhalten. – MichaelK

+2

@MichaelKarnerfors du musst nicht einmal toString() aufrufen, da es automatisch aufgerufen wird! –

10

Nein, ist es nicht möglich, dass ein int[] zu wissen, ob seine Daten als Zeichen oder als Zahl in dem Quellcode geschrieben wurden. Sie benötigen eine andere Datenstruktur, wenn Sie diese Art von Informationen behalten möchten.

11

Sie int[] array haben, das ist, wie der Bytecode aussieht:

public class Test { 
    public Test(); 
    Code: 
     0: aload_0 
     1: invokespecial #1 // Method java/lang/Object."<init>":()V 
     4: return 

    public static void main(java.lang.String[]); 
    Code: 
     0: iconst_2 
     1: newarray  int 
     3: dup 
     4: iconst_0 
     5: bipush  97 
     7: iastore 
     8: dup 
     9: iconst_1 
     10: bipush  98 
     12: iastore 
     13: astore_1 
     14: return 
} 

Wie Sie sehen können, Werte eingefügt als int.

Andere Benutzer haben vorgeschlagen, Object[] array zu verwenden. Schauen Sie sich die Bytecode davon:

public class Test { 
    public Test(); 
    Code: 
     0: aload_0 
     1: invokespecial #1  // Method java/lang/Object."<init>":()V 
     4: return 

    public static void main(java.lang.String[]); 
    Code: 
     0: iconst_2 
     1: anewarray  #2  // class java/lang/Object 
     4: dup 
     5: iconst_0 
     6: bipush  97 
     8: invokestatic #3  // Method java/lang/Character.valueOf:(C)Ljava/lang/Character; 
     11: aastore 
     12: dup 
     13: iconst_1 
     14: bipush  98 
     16: invokestatic #4  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 
     19: aastore 
     20: astore_1 
     21: return 
} 

Notiere die

// Method java/lang/Character.valueOf:(C)Ljava/lang/Character; 

Linie, die sagt, dass das Verfahren Character.valueOf aufgerufen wird, so dass Sie den eigentlichen Charakter statt dessen int Wert.

+0

ziemlich tiefe Erklärung. Das bedeutet, dass die entsprechende valueOf() -Methode aufgerufen wird, um sie für das Objekt-Array zu drucken, was bei Arrays primitiver Datentypen nicht der Fall ist. Ist es? – Audumbar

+0

@Audumbar Ja .. – Maroun

Verwandte Themen