2013-10-03 4 views
0

Я пытаюсь создать функцию, которая будет произвольно генерировать букву из алфавита, и пользователю нужно будет ввести «A» для буквы гласных и «B» для согласного. Затем система проверит правильность ответа, выполнив поиск буквы из массива.не может найти символ indexOf в Java

Однако, я получаю эту ошибку:

Не может найти символ

символа: метод IndexOf (голец)

Пожалуйста, проверьте мой код ниже.

public static void Exam_LetterType() throws Exception 
{ 
    BufferedReader temp = new BufferedReader(new InputStreamReader(System.in)); 

    String Alphabet[]={"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"}; 
    String Vowel[]={"a","e","i","o","u"}; 
    String Consonant[]={"b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z"}; 

    Random x = new Random(); 

    int Index; 
    String Answer; 

    int CorrectAnswer = 0; 

    for(int i=1;i<=20;i++) 
    { 
     Index = x.nextInt(26); 

     System.out.println ("\n   A) VOWEL LETTER  B) CONSONANT LETTER"); 
     System.out.print("   Letter" + "'" + Alphabet[Index] + "'" + " is a: "); 

     String Question = Alphabet[Index]; 

     Answer = temp.readLine(); 

     if(Vowel.indexOf(Question).equals(-1)) 
      if(Answer.equals("B")) 
      { 
       CorrectAnswer = CorrectAnswer + 1; 
      } 
      else if(Consonant.indexOf(Question).equals(-1)) 
      { 
        if(Answer.equals("A")) 
        { 
         CorrectAnswer = CorrectAnswer + 1; 
        } 
        else 
        { 
         CorrectAnswer = CorrectAnswer + 0; 
        } 
      } 
    } 
} 

Ждем вашего ответа. Благодаря!

+2

Ваш код будет месиво легче для нас, чтобы следовать, если вы использовали соглашение начинает имена переменных с строчной. например 'vowel' вместо' Vowel' - с капиталом он выглядит как тип, а не переменная. – John3136

+0

будет двигаться вперед. спасибо @ John3136! – Franz

ответ

1

Прежде всего, нет indexOf метода в Array class.

И даже здесь

if(Vowel.indexOf(Question).equals(-1)) 

вы не можете сравнить целые значения с equals вы должны использовать ==

Эта линия должна быть

if(// check here that weather the value **i** lesser than the length of array) 
    if(Vowel[i].indexOf(Question)== -1)) 

решает, что это, Так как вы сравниваете много раз , Просто напишите метод Util, который проверяет строку в array или n ВЗ.

public boolean arrayContainsString(String[] arrayToLookUp, String str){ 
     boolean contains = false; 
     for (String item : arrayToLookUp) { 
      if (str.equalsIgnoreCase(item)) { //case or not 
       contains = true; 
       break; // No need to look further. 
      } 
     } 
     return contains; 
    } 

Затем вы можете использовать этот метод, как, просто

if(arrayContainsString(Vowel, Question)){ 
    //proceed furthur 
} 

И как примечания к: Пожалуйста, следуйте java naming conventions .varaibles имена начинаются с буквы нижнего регистра.

+0

Это решит проблему компилятора, но не его логику.Hes пытается проверить, существует ли строка 'Question' в массиве' Vowel' или нет. Ваше решение проверяет, находится ли строка в 'Vowel [i]' в строке 'Question' или нет. – Jayamohan

+0

Не имеет значения. Оба являются одиночными символами. –

0

попробовать

if(Arrays.asList(Vowel).contains(Question)) 
2

Убедитесь, что массивы сортируются и использовать Arrays.binarySearch

0

попробовать это ..

вам необходимо изменить два условия показано ниже

Vowel[i].indexOf(Question) == -1 

и

Consonant[i].indexOf(Question) == -1 

вы можете найти полный отредактированный код ниже:

public static void Exam_LetterType() throws Exception 
{ 
    BufferedReader temp = new BufferedReader(new InputStreamReader(System.in)); 

     String Alphabet[]={"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"}; 
     String Vowel[]={"a","e","i","o","u"}; 
     String Consonant[]={"b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z"}; 

     Random x = new Random(); 

     int Index; 
     String Answer; 

     int CorrectAnswer = 0; 

     for(int i=1;i<=20;i++) 
     { 
      Index = x.nextInt(26); 

      System.out.println ("\n   A) VOWEL LETTER  B) CONSONANT LETTER"); 
      System.out.print("   Letter" + "'" + Alphabet[Index] + "'" + " is a: "); 

      String Question = Alphabet[Index]; 

      Answer = temp.readLine(); 

      if(Vowel[i].indexOf(Question) == -1) 
       if(Answer.equals("B")) 
       { 
        CorrectAnswer = CorrectAnswer + 1; 
       } 
       else if(Consonant[i].indexOf(Question) == -1) 
       { 
         if(Answer.equals("A")) 
         { 
          CorrectAnswer = CorrectAnswer + 1; 
         } 
         else 
         { 
          CorrectAnswer = CorrectAnswer + 0; 
         } 
       } 
     }} 
+0

получил! Спасибо, победа! – Franz

+0

приветствуется '@ user2841079'. вы можете отметить этот ответ как принятый ответ. – Vijay

Смежные вопросы