2009-03-14 3 views
26

グリーティング、Javaの整数がnullであるかどうかを確認するにはどうすればよいですか?

私の整数がnullかどうかを検証しようとしています。そうであれば、ユーザーに値を入力するように促す必要があります。私の背景はPerlなので、最初の試みは次のようになります。

int startIn = Integer.parseInt (startField.getText()); 

if (startIn) { 
    JOptionPane.showMessageDialog(null, 
     "You must enter a number between 0-16.","Input Error", 
     JOptionPane.ERROR_MESSAGE);     
} 

Javaはブール論理を期待しているので、これは機能しません。 Perlで

、私はハッシュ/配列要素はでデータが含まれているかどうかを確認するために「存在」を使用することができます

@items = ("one", "two", "three"); 
#@items =(); 

if (exists($items[0])) { 
    print "Something in \@items.\n"; 
} 
else { 
    print "Nothing in \@items!\n"; 
} 

は、Javaでこれに方法はありますか?ご協力ありがとうございました!

Jeremiah

P.S. Perl exists info

+0

これは本当に2つの異なる質問ですか?コンテナの使用は、最初の例とは何か関係がありますか? –

答えて

41

parseInt()は、解析が正常に完了できない場合、例外をスローするだけです。代わりに、対応するオブジェクトタイプのIntegersを使用することができます。これにより、物が少しきれいになります。

Integer s = null; 

try { 
    s = Integer.valueOf(startField.getText()); 
} 
catch (NumberFormatException e) { 
    // ... 
} 

if (s != null) { ... } 

を注意してくださいあなたはparseInt()を使用することを決定しない場合:だから、おそらくに近い何かをしたいです! parseInt()は良い国際化をサポートしていませんので、あなたはさらに多くのフープを介してジャンプする必要があります。

try { 
    NumberFormat nf = NumberFormat.getIntegerInstance(locale); 
    nf.setParseIntegerOnly(true); 
    nf.setMaximumIntegerDigits(9); // Or whatever you'd like to max out at. 

    // Start parsing from the beginning. 
    ParsePosition p = new ParsePosition(0); 

    int val = format.parse(str, p).intValue(); 
    if (p.getIndex() != str.length()) { 
     // There's some stuff after all the digits are done being processed. 
    } 

    // Work with the processed value here. 
} catch (java.text.ParseFormatException exc) { 
    // Something blew up in the parsing. 
} 
+11

あなたはあまりにも多くの例外をキャッチして無視できるような言語を愛していませんか? – mpeters

+1

率直に言えば、私はむしろ例外をキャッチして、私はずっと前に馬鹿だった場所を見つけなければならない。ちょうど私の意見。 – Android334

3

int sが値型です。彼らは決してnullになることはできません。代わりに、解析が失敗した場合、parseIntはキャッチする必要があるNumberFormatExceptionをスローします。

8

はこれを試してみてください:

Integer startIn = null; 

try { 
    startIn = Integer.valueOf(startField.getText()); 
} catch (NumberFormatException e) { 
    . 
    . 
    . 
} 

if (startIn == null) { 
    // Prompt for value... 
} 
0

私はあなただけのコレクションで、Perlでの整数の「存在」を使用することができないと思います。あなたは、Javaでのあなたの例に合ったPerlでの意味の例を挙げることができます。

ハッシュ要素または配列要素を指定する式が指定されている場合、対応する値が未定義であっても、ハッシュまたは配列の指定された要素が初期化されている場合はtrueを返します。

これは、ハッシュ要素または配列要素にのみ適用されることを示しています。

+0

私はかなり同意します。私のPerlの例では、配列を使用して、配列の要素に内容があるかどうかを調べるために存在を使用しています。答えをありがとう。 –

2

の場合、existsは、SCALARで、とにかくありません。 Perlの方法は

defined($x) 

で、同等のJavaは

anInteger != null 

ものは等価物です。

exists $hash{key} 

はあなたの例から、Javaの

map.containsKey("key") 

のようなものです、私はあなたが

を探しているのだと思うなら、私のために(STARTIN!= NULL){...

2

Integer.toString()メソッドを使用するだけで、うまく動作します。あなたはそれがヌルである場合に非常にしたい場合は、それを変換することができます。以下の例:

private void setCarColor(int redIn, int blueIn, int greenIn) 
{ 
//Integer s = null; 
if (Integer.toString(redIn) == null || Integer.toString(blueIn) == null ||  Integer.toString(greenIn) == null) 
0

これは役に立ちます。

Integer startIn = null; 

// (optional below but a good practice, to prevent errors.) 
boolean dontContinue = false; 
try { 
    Integer.parseInt (startField.getText()); 
} catch (NumberFormatException e){ 
    e.printStackTrace(); 
} 

// in java = assigns a boolean in if statements oddly. 
// Thus double equal must be used. So if startIn is null, display the message 
if (startIn == null) { 
    JOptionPane.showMessageDialog(null, 
     "You must enter a number between 0-16.","Input Error", 
     JOptionPane.ERROR_MESSAGE);        
} 

// (again optional) 
if (dontContinue == true) { 
    //Do-some-error-fix 
} 
+0

(余分なソースコードを追加するには、4つのスペースまたは1つのタブでインデントする必要があります) – kay

+0

@Kay:スペースまたはタブ?それは質問です:P –

関連する問題