strEnglishPhrase уже определен в main (java.lang.String [])? - PullRequest
0 голосов
/ 28 января 2011

Кажется, я не могу заставить это работать, это мой первый Java-класс, поэтому любая помощь очень ценится: вот что у меня так далеко:

import java.io.Console;
import java.util.Scanner;

public class Pig extends Object{

    public static void main( String[] args){
         Console console = System.console();
        String strEnglishPhrase;
        char choice;
        do{
            System.out.println("Welcome to the Pig Latin Translator!!");
            strEnglishPhrase =
                console.readLine("Enter Phrase for Translation : ");
             Scanner scanner = new Scanner(System.in);

             String strEnglishPhrase = scanner.nextLine();

            if(strEnglishPhrase != null && !strEnglishPhrase.equals("")){
                System.out.println("Phrase in Pig Latin : \n"
                    + convertEnglishToPigLatin(strEnglishPhrase));
            } else{
                System.out.println("Whoops, Invalid Entry.");
            }
            choice =
                console
                    .readLine("Do you want to continue? y" + '/' + "n?")
                    .charAt(0);
        } while((choice != 'n') && (choice != 'N'));
    }

    public static String convertEnglishToPigLatin( String strEnglishPhrase){
         String strVowels = "aeiou";
         String[] strTokens = strEnglishPhrase.split("[ ]");
         StringBuffer sbPigLatinStuff = new StringBuffer();

        for(int i = 0; i < strTokens.length; i++){
            if(strVowels.indexOf(strTokens[i].charAt(0)) >= 0){
                sbPigLatinStuff.append(strTokens[i] + "way ");
            } else if((strTokens[i].indexOf("a") < 0)
                && (strTokens[i].indexOf("e") < 0)
                && (strTokens[i].indexOf("i") < 0)
                && (strTokens[i].indexOf("o") < 0)
                && (strTokens[i].indexOf("u") < 0)){
                sbPigLatinStuff.append(strTokens[i] + "ay ");
            } else{
                for(int j = 1; j < strTokens[i].length(); j++){
                    if(strVowels.indexOf(strTokens[i].charAt(j)) >= 0){
                        sbPigLatinStuff.append(strTokens[i].substring(j)
                            + strTokens[i].substring(0, j) + "ay ");
                        break;
                    }
                }
            }
        }

        return sbPigLatinStuff.toString();
    }
}

Ответы [ 4 ]

2 голосов
/ 28 января 2011

У вас есть двойное объявление строковой переменной strEnglishPhrase в той же области видимости.

public class Pig extends Object
{  
    public static void main(String[] args)     
    { 
        Console console = System.console();

        // First declaration of strEnglishPhrase!
        String strEnglishPhrase; 

        char choice; 

        do { 
           System.out.println("Welcome to the Pig Latin Translator!!"); 
           strEnglishPhrase = console.readLine("Enter Phrase for Translation : ");
           Scanner scanner = new Scanner(System.in);

           // Second and duplicate declaration of strEnglishPhrase!

           String strEnglishPhrase = scanner.nextLine();  

           ...
        }
     ...
    }
 }

Вы можете решить проблему, удалив объявление типа strEnglishPhrase в цикле do:

 // Replace this line
 String strEnglishPhrase = scanner.nextLine();  

 // by this line:
 strEnglishPhrase = scanner.nextLine();  
1 голос
/ 28 января 2011

Я думаю, что проблема в том, что в верхней части вашего кода у вас есть

Console console = System.console();
String strEnglishPhrase;
char choice;

, который определяет String, называемый strEnglishPhrase.Тем не менее, в теле цикла вы также пишете

String strEnglishPhrase = scanner.nextLine(); 

Это пытается определить новую переменную, также называемую strEnglishPhrase, которая конфликтует с более ранним определением.

Чтобы исправить этолибо удалите объявление из цикла, либо измените приведенный выше код на

strEnglishPhrase = scanner.nextLine(); 

, который является присваиванием, а не объявлением.

1 голос
/ 28 января 2011

Моя Java не блестящая, но вы, кажется, объявили strEnglishPhrase в начале вашего main метода, а затем снова ваш while цикл.

  public static void main(String[] args)     
{ 
Console console = System.console();
String strEnglishPhrase;  <<-- declared here
char choice;
do
{
 System.out.println("Welcome to the Pig Latin Translator!!");
 strEnglishPhrase = console.readLine("Enter Phrase for Translation : ");  
    Scanner scanner = new Scanner(System.in);  

   String strEnglishPhrase = scanner.nextLine(); <<-- And again here
0 голосов
/ 28 января 2011

Вы впервые объявили strEnglishPhrase здесь:

Console console = System.console();
String strEnglishPhrase;
char choice;

, а затем снова определите его в этой точке:

String strEnglishPhrase = scanner.nextLine();

Просто удалите на этом этапе ключевое слово 'String'.

strEnglishPhrase = scanner.nextLine();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...