2016-09-16 59 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

这是35行? 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

这条线:

kboard.nextInt(feet); 

应该

feet = kboard.nextInt(); 

当你提供一个int参数Scanner.nextInt,它被认为是你要输入数字的基数。 feet的值为零,你不能真正拥有一个基数为零的数字,因此是错误的。


注意,错误doesn't occur on the line you claim

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

+0

重要的行不是'WeightCalc.main(Main.java:45)',表明它是行** 45 **是罪魁祸首? – Andreas

+0

@Andreas当然,但你可以看到,这是一个与'nextInt'的调用问题,而无需查看行号。 –

0

你打错了Scanner.readInt。你想调用返回int的空参数。

你打电话的人需要一个int作为输入,应该是数字基数(即数字是八进制或二进制等)。由于feetinches都被初始化为0,它会尝试读取基址0中的int,这是不可能的。

你需要的是更多的东西一样:

// 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();