2016-06-16 8 views
0

In einigen Code muss ich einige Zahlen in einem Stapel schieben und sie später drucken. Also habe ich versucht, diese:Konvertieren von Ganzzahl in Int in Java als Rückgabetyp des Stapels

package bf; 

import java.util.Stack; 

public class BF { 
    public static void main(String[] args) { 
     Stack<Integer> stack = null ; 
     stack.push(1); 
     int a = Integer.parseInt("" + stack.pop()); 
     System.out.println(a); 
    } 
} 

Jedes Mal, wenn ich versuche, dies zu tun, erhalte ich diese Fehlermeldung:

Exception in thread "main" java.lang.NullPointerException 
    at bf.BF.main(BF.java:12) 
C:\Users\user\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1 

Meine Fragen:

  1. Gibt es eine Möglichkeit zu konvertieren Integer bis int? Wie?

  2. Ich muss einen Stapel verwenden. Später muss ich Pop und speichern Sie es auf eine int Variable, was kann ich sonst noch tun? Gibt es keinen Weg (ich muss selbst einen Stack erstellen)?

Es gab einige Fragen mit dem gleichen/fast dem gleichen Titel in Stack-Überlauf, aber ich konnte keine Antwort finden, die in meinem Fall gearbeitet.

+0

Ein 'Integer' ist im Grunde eine' int', und in den meisten Fällen (zum Beispiel die, die Sie stoßen) Sie sie austauschbar verwendet werden können. Suchen Sie nach Autoboxen. – Jashaszun

+2

Sie müssen Ihren 'Stack' initialisieren, bevor Sie ihn verwenden (' stack = new Stack <>(); ') ... –

+0

@Jashaszun int a = Ganzzahl.parseInt (" "+ stack.pop()); können Sie diese Zeile zum Speichern für Int Zweck bitte korrigieren? – 000

Antwort

4

Ein paar Probleme:

Zuerst wird, wie Alex oben erwähnt, müssen Sie Ihren Stapel initialisieren, bevor Sie es benutzen. Wenn es null ist, wie können Sie dann etwas hinzufügen?

Zweitens, wie ich oben erwähnt, können Sie grundsätzlich Integer als austauschbar mit int beim Boxen/Unboxing aufgrund Autoboxing in Java verwenden.

Stack<Integer> stack = new Stack<>(); // initialize first 
stack.push(1); 
int a = stack.pop(); // just pop, no need to convert to string and parse 
System.out.println(a); 
1

Ja, es einen Weg gibt, sie genannt wird Auto-Unboxing, was den Prozess ist, der eine Wrapper-Klasse automatisch konvertiert (hier Integer) zu seiner primitiven Typ entspricht (hier int), so haben Sie eigentlich nichts machen. Hier

ist der richtige Code:

public static void main(String[] args) throws Exception { 
    Stack<Integer> stack = new Stack<>(); 
    stack.push(1); 
    int a = stack.pop(); 
} 

NB: Das Gegenteil besteht auch, es heißt Auto-Box, die den Prozess ist, der automatisch eine primitive Art zu seiner entsprechenden Wrapper-Klasse umwandeln

+0

@Jashaszun Ich habe nur seinen Code kopiert/eingefügt, danke für die Bemerkung –