2016-09-16 14 views
-1

私は一般的に新しいプログラマですので、この問題が正当なビットベースであれば私を許してください。インデックスの近くの文字クラスが閉じられていません525

このプログラムの目標は、「最適体重」の簡単な計算であり、実行時に35行目のaとbの文字列の比較で継続的に例外をスローします。論理演算子を削除しようとしましたが、問題になるどこが間違っていますか?

import java.util.*; 

public class WeightCalc { 

    //Initialize variables 
    static int feet = 0, inches = 0, totalWeight = 0; 
    static boolean isMale; 

    public static void optimalWeight(){ 
    // Calculate optimal weight 
    if (isMale == true){ 
     if (feet >= 5){ 
     totalWeight = 106 + 6*(inches); 
     } else{ 
     System.out.print("Error, you're a midget."); 
     } 
    } 
    if (isMale == false){ 
     if (feet >= 5){ 
     totalWeight = 100 + 5*(inches); 
     } else{ 
     System.out.print("Error, you're a midget."); 
     } 
    } 
    } 

    public static void main(String[] args){ 

    String a = "Male", b = "male"; 

    // Initialize kboard Scanner 
    Scanner kboard = new Scanner(System.in); 

    // Ask for gender and assign isMale 
    System.out.println("What is your gender? "); 
    String gender = kboard.nextLine(); 
    if (gender.equals(a) || gender.equals(b)){ 
     isMale = true; 
    }else { 
     isMale = false; 
    } 

    // Ask for height, first feet, then inches 
    System.out.println("What is your height in regards to feet? "); 
    kboard.nextInt(feet); 
    System.out.println("What is your remaining h eight in inches? "); 
    kboard.nextInt(inches); 

    //Call optimalWeight method and run 
    optimalWeight(); 

    // Print the output 
    System.out.println("Your optimal weight should be " + totalWeight + "."); 

    // Set isMale opposite to what it was before and calculate opposite sex's potential weight 
    isMale = !isMale; 
    optimalWeight(); 

    // Print the output of the second run 
    System.out.println("If you were of the opposite sex, your weight would be " + totalWeight + "."); 

    // Close the Scanner variable 
    kboard.close(); 
    } 
} 
+0

:あなたが欲しい

は、より多くのようなものでしょうか? 'if(gender.equals(a)|| gender.equals(b)){'?そして例外は何ですか? –

+1

'a == true'または' a == false'を使ってブール値を比較しないでください。単に 'a'または'!a'を使用してください。 –

+0

http://stackoverflow.com/questions/21816788/unclosed-character-class-error –

答えて

1

この行:あなたはScanner.nextIntにint型のパラメータを提供する場合

kboard.nextInt(feet); 

feet = kboard.nextInt(); 

、それはあなたが入力しようとしている数の基数とみなされるべきです。 feetの値はゼロです。したがって、実際には基数ゼロの数値を持つことはできません。したがって、エラーです。

Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed character class near index 525 
(([-+]?(((((?i)[]|\p{javaDigit})++)|([\p{javaDigit}&&[^0]]((?i)[]|\p{javaDigit})?((?i)[]|\p{javaDigit})?(\,((?i)[]|\p{javaDigit})((?i)[]|\p{javaDigit})((?i)[]|\p{javaDigit}))+)))))|(((((?i)[]|\p{javaDigit})++)|([\p{javaDigit}&&[^0]]((?i)[]|\p{javaDigit})?((?i)[]|\p{javaDigit})?(\,((?i)[]|\p{javaDigit})((?i)[]|\p{javaDigit})((?i)[]|\p{javaDigit}))+)))|(\Q-\E((((?i)[]|\p{javaDigit})++)|([\p{javaDigit}&&[^0]]((?i)[]|\p{javaDigit})?((?i)[]|\p{javaDigit})?(\,((?i)[]|\p{javaDigit})((?i)[]|\p{javaDigit})((?i)[]|\p{javaDigit}))+))) 
                                                                                                                                      ^
    at java.util.regex.Pattern.error(Pattern.java:1955) 
    at java.util.regex.Pattern.clazz(Pattern.java:2548) 
    at java.util.regex.Pattern.clazz(Pattern.java:2504) 
    at java.util.regex.Pattern.clazz(Pattern.java:2504) 
    at java.util.regex.Pattern.clazz(Pattern.java:2504) 
    at java.util.regex.Pattern.clazz(Pattern.java:2504) 
    at java.util.regex.Pattern.clazz(Pattern.java:2504) 
    at java.util.regex.Pattern.clazz(Pattern.java:2504) 
    at java.util.regex.Pattern.clazz(Pattern.java:2504) 
    at java.util.regex.Pattern.clazz(Pattern.java:2504) 
    at java.util.regex.Pattern.clazz(Pattern.java:2504) 
    at java.util.regex.Pattern.clazz(Pattern.java:2504) 
    at java.util.regex.Pattern.clazz(Pattern.java:2504) 
    at java.util.regex.Pattern.clazz(Pattern.java:2504) 
    at java.util.regex.Pattern.clazz(Pattern.java:2504) 
    at java.util.regex.Pattern.clazz(Pattern.java:2504) 
    at java.util.regex.Pattern.clazz(Pattern.java:2504) 
    at java.util.regex.Pattern.clazz(Pattern.java:2504) 
    at java.util.regex.Pattern.clazz(Pattern.java:2504) 
    at java.util.regex.Pattern.sequence(Pattern.java:2063) 
    at java.util.regex.Pattern.expr(Pattern.java:1996) 
    at java.util.regex.Pattern.group0(Pattern.java:2905) 
    at java.util.regex.Pattern.sequence(Pattern.java:2051) 
    at java.util.regex.Pattern.expr(Pattern.java:1996) 
    at java.util.regex.Pattern.group0(Pattern.java:2905) 
    at java.util.regex.Pattern.sequence(Pattern.java:2051) 
    at java.util.regex.Pattern.expr(Pattern.java:1996) 
    at java.util.regex.Pattern.group0(Pattern.java:2905) 
    at java.util.regex.Pattern.sequence(Pattern.java:2051) 
    at java.util.regex.Pattern.expr(Pattern.java:1996) 
    at java.util.regex.Pattern.group0(Pattern.java:2905) 
    at java.util.regex.Pattern.sequence(Pattern.java:2051) 
    at java.util.regex.Pattern.expr(Pattern.java:1996) 
    at java.util.regex.Pattern.group0(Pattern.java:2905) 
    at java.util.regex.Pattern.sequence(Pattern.java:2051) 
    at java.util.regex.Pattern.expr(Pattern.java:1996) 
    at java.util.regex.Pattern.group0(Pattern.java:2905) 
    at java.util.regex.Pattern.sequence(Pattern.java:2051) 
    at java.util.regex.Pattern.expr(Pattern.java:1996) 
    at java.util.regex.Pattern.compile(Pattern.java:1696) 
    at java.util.regex.Pattern.<init>(Pattern.java:1351) 
    at java.util.regex.Pattern.compile(Pattern.java:1028) 
    at java.util.Scanner$1.create(Scanner.java:367) 
    at java.util.Scanner$1.create(Scanner.java:365) 
    at sun.misc.LRUCache.forName(LRUCache.java:72) 
    at java.util.Scanner.integerPattern(Scanner.java:443) 
    at java.util.Scanner.nextInt(Scanner.java:2117) 
    at WeightCalc.main(Main.java:45) 

ここで最後から二番目の行::

java.util.Scanner.nextInt(Scanner.java:2117) 

それはScanner.nextIntにだことを示してエラーdoesn't occur on the line you claimがあること


注意。

+0

重要な行は 'WeightCalc.main(Main.java:45)'ではありません。それは、行** 45 **であることを示していますが、それは原因ですか? – Andreas

+0

@Andreasまあ、確かに、行番号を見ずに 'nextInt'の呼び出しに問題があることがわかります。 –

0

あなたは間違った電話番号Scanner.readIntです。 intを返す空の引数を呼び出すとします。

あなたが電話する人は、数値ベース(つまり、数字は8進数または2進数など)で入力される入力としてintを入力します。 feetinchesは両方とも0に初期化されているため、0にを読み込もうとします。これは不可能です。 35行である

// Ask for height, first feet, then inches 
System.out.println("What is your height in regards to feet? "); 
feet = kboard.nextInt(); 
System.out.println("What is your remaining h eight in inches? "); 
inches = kboard.nextInt(); 
関連する問題