2016-06-16 12 views
0

一部のコードでは、いくつかの数値をスタックにプッシュして後で出力する必要があります。だから私はこれを試してみました:スタックの戻り値の型として整数をint型に変換する

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 

私の質問:

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); 
    } 
} 

私はこれをしようとするたびに、私は、このエラーメッセージが表示されます

  1. は、変換する方法はありますIntegerint?どうやって?

  2. スタックを使用する必要があります。後で変数をポップアップして変数intに保存する必要があります。これ以外に何ができますか?何も方法はありません(私は自分自身をスタックを作成する必要があります)?

は、スタックオーバーフローの同じ/ほぼ同じタイトルのいくつかの質問がありましたが、私は私の場合で働いていた答えを見つけることができませんでした。

+0

「整数」は基本的に「int」であり、ほとんどの場合(たとえば、あなたが遭遇しているものなど)、それらは互換的に使用できます。オートバイを見上げる。 – Jashaszun

+2

これを使用する前に 'stack'を初期化する必要があります(' stack = new Stack <>(); ')... –

+0

@Jashaszun int a = Integer.parseInt(" "+ stack.pop()); intを保存するためにこの行を修正できますか? – 000

答えて

4

問題のカップル:アレックスは、前述したように

まず、あなたがそれを使用する前に、あなたのスタックを初期化する必要があります。それがヌルなら、どうすればそれに何かを追加することができますか?

第2に、前述のように、Integerintと互換性があり、Javaのオートボックスのためにボクシング/アンボクシングを行うときに使用できます。

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

はい、方法がある、それは、オートアンボクシング、自動的にそれに対応するプリミティブ型に(ここではInteger)ラッパークラスを変換する(ここではint)ので、実際には何もありませんでしょうプロセスであると呼ばれていますする。それは自動ボクシング自動的に対応するラッパークラスにプリミティブ型を変換するプロセスであると呼ばれ、反対も存在する:

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

NB:ここ

正しいコードであります

+0

@Jashaszun私は自分のコードのみをコピー/貼り付けています。 –

関連する問題