2016-09-16 3 views
-1

Я новый программист в целом, так что простите меня, если эта проблема является честной базой.Класс закрытого символа рядом с индексом 525

Цель этой программы - простой расчет «оптимального веса тела» и постоянно выдает исключение во время выполнения по сравнению с сравнениями строк a и b в строке 35. Я попытался удалить логические операторы, и это все еще не кажется быть проблемой. Где я ошибаюсь?

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

@ Аndreas хорошо, конечно, но вы можете видеть, что это проблема с вызовом 'nextInt', не глядя на номера строк. –

0

Вы вызываете неправильный Scanner.readInt. Вы хотите вызвать пустой args, который возвращает int.

Тот, который вы вызываете, принимает int в качестве входных данных, которые должны быть базовыми числами (то есть число в восьмеричном или двоичном формате и т. Д.). Поскольку feet и inches оба инициализированы до 0, он пытается прочитать int в базе 0, что невозможно.

То, что вы хотите что-то подобное:

// 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(); 
Смежные вопросы