2015-04-16 3 views
-1

Java не выводит код правильно, когда слово начинается с согласного. Она выводит:PigLatin не выводит правильно

Исключение в потоке «главный»

Это работает, когда слово начинается с гласной.

import java.util.*; 

public class PigLatin { 
    public static void main(String[] args) { 
     String word = getWord(); 
     String pigLatinWord = convertToPigLatin(word); 
     System.out.println(pigLatinWord + " is the word translated in PigLatin"); 
    } 

    public static String getWord() { 
     Scanner keyboard = new Scanner(System.in); 
     String word; 
     System.out.print("Enter a word: "); 
     word = keyboard.nextLine(); 
     return word; 
    } 

    public static boolean isVowel(char character) { 
     if(character == 'a' || character == 'e' || character == 'i' 
          || character == 'o' || character == 'u') { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    public static String convertToPigLatin(String word) { 
     String pigLatinWord = ""; 

     if(isVowel(word.charAt(0)) == true) { 
      String latin = word + "yay"; 
      System.out.print(latin); 
     } else { 
      for (int x = 0; x < word.length(); x++) { 
       if(isVowel(word.charAt(x)) == true) { 
        String partOfWord = word.substring(0,word.charAt(x)); 
        String secondPartOfWord = word.substring(word.charAt(x)); 
        String combination=secondPartOfWord + partOfWord; 
        pigLatinWord = combination + "ay"; 
       } 
      } 
     } 
     return pigLatinWord; 
    } 
} 
  1. Я хочу, чтобы все мои методы тот же
  2. я не хочу, чтобы изменить код слишком много
+0

у вас есть дополнительный «и» в ограничениях вашего заявления, если в isVowel(). Начните с удаления этого. Кроме того, можете ли вы отправить Stacktrace об ошибке? Дайте нам пример того, как он не выводится правильно. Что вы ввели? Чего ты ожидал? –

+0

Если слово начинается с гласного, добавьте окончание «yay» в конец слова. Например, индийский в piglatin является indianyay. - Чтобы перевести слова, начинающиеся с согласного (или нескольких согласных) в piglatin, вы должны удалить все начальные согласные, пока не дойдете до гласного . Затем переместите удаленные согласные в конец слова вместе с , заканчивающимся «ay». Таким образом, фарфор у свинарника инчайе, школа в piglatin oolschay, и кошка в piglatin is acay. – Stewart

+1

отредактируйте свое оригинальное сообщение, чтобы все в сообществе SO, читающие ваш вопрос, имели всю необходимую информацию, не пропуская комментариев :) –

ответ

1

Сначала вы получаете подстроки с .charAt, что вызывает ошибку. Просто используйте индекс x.

Вторая ошибка, как только вы нашли свою строку, вы хотите закончить. Добавьте перерыв в конце вашего оператора if.

И, наконец, ваш код неверен в том, что вам нужно иметь дело со случаем всех согласных; если у вас есть слово, подобное ритму, ваше латинское слово свиньи будет ритмичным. С предыдущими двумя исправлениями этого не происходит. Поэтому проверьте, что если все буквы являются согласными, делайте второй случай.

Так что ваш последний еще раздел должен выглядеть следующим образом со всеми изменениями:

} else { 
     Boolean wordIsAllConsonants = true; 
     for (int x = 0; x < word.length(); x++) { 
      if(isVowel(word.charAt(x)) == true) { 
       String partOfWord = word.substring(0,x); 
       String secondPartOfWord = word.substring(x); 
       String combination=secondPartOfWord + partOfWord; 
       pigLatinWord = combination + "ay"; 
       wordIsAllConsonants = false; 
       break; 
      } 
     } 
     if(wordIsAllConsonants) 
      pigLatinWord = word + "ay"; 
    } 
    return pigLatinWord; 
3

Хорошо новый подход, чтобы помочь кому-то. Вместо того, чтобы просто сказать вам ответ, давайте учиться!

Я запустил вашу программу с помощью ввода «поросенок». Сюрприз! Я получил эту ошибку.

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 105 
at java.lang.String.substring(String.java:1907) 
at com.tutelatechnologies.tapfortap.server.support.PigLatin.convertToPigLatin(PigLatin.java:40) 
at com.tutelatechnologies.tapfortap.server.support.PigLatin.main(PigLatin.java:9) 

Я знаю, о чем вы думаете. ЧТО ЭТО ЗНАЧИТ?!?!? Ну, если вы посмотрите в свою трассировку стека (если вы планируете стать разработчиком, привыкнете к этому), вы увидите StringIndexOutOfBoundsException, когда вы вызываете метод substring(). Он даже сообщает вам строку, в которой ошибка возникает в вашем коде!

PigLatin.java:40 

Невероятно! Поэтому пройдите через свой код с примером. Черт, попробуй это на бумаге со словом «поросенок», как я. В частности обратите внимание на значения для x, которые вы передаете подстроке(). Кроме того, позвольте мне напомнить вам об определении substring methods. Удостоверьтесь, что вы хорошо относитесь к входным параметрам этого метода о том, включен или исключен этот индекс в полученной подстроке.

Не стесняйтесь прокомментировать это для получения дополнительных советов!

+1

Я отредактировал плохое отступы в коде OP, и теперь номера строк изменились. Я думал, что мне нужно натянуть его, если ppl скопирует и компилирует копию :) – Snps

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