2017-10-05 9 views
-2

私はJavaを使い慣れていません。これを達成するために2日間の検索を行っていますが、まだそれを把握していません。私のifステートメントでは、ユーザーが値を入力せずにenterキーを押すだけで、ユーザーが1未満の値を入力した場合でも、再入力を求めるメッセージが表示されるようにする必要があります。 私のコードは、これがそうでなければparseIntNumberFormatExceptionを投げると同じように検証(matches)を行い、そのint型の変数にnull値を与える

int numberOfCars = -1 
while (numberOfCars == null || numberOfCars < 1) 
{ 
    numberOfCars = (JOptionPane.showInputDialog("Enter number of cars.")); 
    if(numberOfCars == null || numberOfCars < 1) 
    { 
     JOptionPane.showMessageDialog(null, "Please enter a value."); 
    } 
} 
+0

空の文字列または 'null'なのでを等しくするための明示的な' int'でどのように可能性が高いですか? – tadman

+1

'numberOfCars'が空の文字列_or_と等しくなるような方法はありません。 'int'変数のために、まったくまったくありません。 –

+0

関連 - https://stackoverflow.com/questions/7504064/does-java-allow-nullable-types – Eric

答えて

1
int numberOfCars = -1; 
do { 
    String answer = JOptionPane.showInputDialog("Enter number of cars."); 
    if (answer != null && answer.matches("-?[0-9]+")) { 
     numberOfCars = Integer.parseInt(answer); 
     if (numberOfCars < 1) { 
      JOptionPane.showMessageDialog(null, "Value must be larger than 1."); 
     } 
    } else { 
     JOptionPane.showMessageDialog(null, "Value not a number."); 
    } 
} while (numberOfCars < 1); 

で実行文句を言わない私がnull以外のintカントを読んでいる、と私は整数を試してみました、しかし。

正規表現String.matches(String)

.matches("-?[0-9]+") 

これは、パターンに一致する:

  • -?はマイナス=、任意に(?
  • [0-9]+は0-9の範囲である[ ... ]から文字を、= 、数字、およびそれ以上(+

また、正規表現に関する情報については、Patternも参照してください。

文字列から取得される値がintになります。ゼロによる除算のように、この はNumberFormatExceptionというエラーを発生させる可能性があります。

ここではdo-whileループが適合します(ほとんどありません)。通常のwhileループも問題ありません。

+0

適用された正規表現とともに' Integer.parseInt() 'と' matches() 'について説明した方がOPに役立つでしょう。彼女は初心者です。または、ヒントのために評判の良いリソース – eshirima

+0

@eshirimaへのリンクを提供してください。もう少し説明した。 –

1

JOptionPane.showInputDialog()Stringを返します。 ステートメントを使用して、入力値がintに構文解析しようとしたときに入力値が正しいことを確認し、Integer.parseInt()を使用することができます。これはあなたのすべての場合に有効です。

だから、これは仕事ができる:

int numberOfCars = -1; 

while(numberOfCars < 1){ 
    try{ 
    numberOfCars = JOptionPane.showInputDialog("Enter number of cars."); 

    if(numberOfCars < 1){ 
     JOptionPane.showMessageDialog(null, "Please enter a value."); 
    } 

    }catch(NumberFormatException e){ 
     JOptionPane.showMessageDialog(null, "Please enter numeric value."); 
    } 
} 
+0

これは完全に機能しました!キャッチ例外の欠如は、エラーの原因となったものでした –

関連する問題