2016-03-29 17 views
0

ユーザーが2〜4桁の数字を入力するプログラムのコードを書いていましたが、これは小数点以下2桁までです。しかし、ユーザがこれらの数字を入力する前に、例えばポンド記号を入力しなければならない。 #12.34。私は二重の値がポンド記号で始まっているかどうかをチェックし、ユーザーが入力を忘れた場合には、再度入力するよう促すことをどうすればいいか疑問に思っていました。これまでのところ、String値と '.startsWith()'コードを使用していましたが、後でString値が見つからないので、プログラムの残りの部分をコード化することが不可能になっています。これは私が現時点で持っているが、二重に変更したいコードです:double値に特殊文字が含まれていないかどうかを確認する方法

String input; 
System.out.print("Enter the 4 numbers with a pound key: "); 
input = keyboard.next(); 
while (!input.startsWith("#")) { 
System.out.print("Re-enter the 4 numbers with a pound key: "); 
input = keyboard.next(); 
} 

私は以前に述べたように、二重に文字列を置換したいました。

+2

おそらく、あなたの代わりにそれを制限する、シャープ記号を入力するように促すべきではありませんが。ポンド記号は、表示目的でのみ使用してください。 – Kartic

+0

Double.parseDoubleが役立つ可能性があります –

+1

文字列がpoundで始まるかどうかを確認し、残りの文字列を解析してdoubleにします。 –

答えて

3
String input; 
System.out.print("Enter the 4 numbers with a pound key: "); 
input = keyboard.next(); 
while (!input.startsWith("#")) { 
System.out.print("Re-enter the 4 numbers with a pound key: "); 
input = keyboard.next(); 
} 
// if your excution reaches here. then it means the values entered by user is starting from '#'. 
String temp = input; 
double value = Double.parseDouble(temp.replace("#","")); 

。私はコーディングが今できるはずだと思う。

+0

ありがとうございました! –

3

double値に通貨記号がありません。あなたが行っている通貨記号をチェックし、ダブルを解析する前にそれを削除する必要があります。プログラムの使用valueの残りの部分については

String input; 
System.out.print("Enter the 4 numbers with a pound key: "); 
input = keyboard.next(); 
while (!input.startsWith("£")) { 
    System.out.print("Re-enter the 4 numbers with a pound key: "); 
    input = keyboard.next(); 
} 
doulble number = Double.parseDouble(input.substring(1)); 
+0

ありがとうございました! :) –

1

お客様startsWithメソッドを使用してください。あなたは

は、私はあなたがするまで繰り返し、それを促したい、基本的に

コードに文字列値が不可能プログラムの残りの部分を作っていることを後で

を見つけることだと言う理由を私は知りませんユーザーは#記号を入力します。だから、なぜwhileループを使用しないのですか?

System.out.println("Enter a number:"); 
String s = keyboard.next(); 
double d = 0.0; // You actually wnat to store the user input in a 
       // variable, right? 
while (!s.trim().startWith("#")) { 
    System.out.println("You did not enter the number in the correct format. Try again."); 
    s = keyboard.next(); 
    try { 
     d = Double.parseDouble(s.substring(1)); 
    } catch (NumberFormatException ex) { 
     continue; 
    } catch (IndexOutOfBoundsException ex) { 
     continue; 
    } 
} 

これは大量のコードです。

説明:

まず、番号を入力し、sに入力を格納するようにユーザに促します。それは理解しやすいです。今ここでは難しい部分があります。ユーザーが入力を正しい形式で入力するまでループしたい。のは、無効な入力の種類を見てみましょうあります

  • ユーザが最初のものがstartsWithの方法によって処理された数

を入力していない#記号

  • を入力しません。入力が#で始まらない場合は、再度ユーザーに確認してください。その前にtrimが最初に呼び出され、入力内の空白を切り捨てて" #5.90"のような入力が有効になります。 2番目の部分は次の部分で処理されます。

    try { 
         d = Double.parseDouble(s.substring(1)); 
        } catch (NumberFormatException ex) { 
         continue; 
        } catch (IndexOutOfBoundsException ex) { 
         continue; 
        } 
    

    入力が間違っている場合は、もう一度ユーザーに確認してください。ユーザーが長さが1未満の文字列を入力した場合は、再度ユーザーに確認してください。

    「待って!なぜsubstringメソッドが呼び出されますか?」あなたは尋ねました。ユーザの前に#を入力し、その後に正しい数字形式を入力すると、その文字列をどのようにダブルに変換しますか?ここでは、最初の文字を部分文字列を使ってトリミングするだけです。

  • 1

    あなたは数やポイントはありません、すべての文字削除し、このような何かを試みることができる:

    public static void main(String[] args) throws IOException { 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
        String input; 
        System.out.println("Input a number: "); 
        while (!(input = br.readLine()).equals("quit")) { 
         Double parsedDouble; 
         if (input.matches("#[0-9]+\\.[0-9]{1,2}")) { 
          parsedDouble = Double.parseDouble(input.replaceAll("[^0-9.]+", "")); 
          System.out.println("double: " + parsedDouble); 
          System.out.println("Input another number: "); 
         } else { 
          System.out.println("Invalid. Try again. Example: #10.10"); 
         } 
        } 
    } 
    
    関連する問題