Println с неразрешенными строками

У меня возникла проблема, когда я пытаюсь напечатать свои строки. Я хочу, чтобы весь println читал что-то вроде этого «BAR, ORANGE и PLUM». Строки, похоже, не взаимодействуют с оператором println. Я очень новичок в java, и я очень потерян, поэтому, пожалуйста, объясните ваши предложения очень просто. Я был бы очень признателен не только за ответ, но и за объяснение, чтобы больше не повторять эту ошибку. Спасибо за ваше время.

/*
 * This program will simulate playing a slot machine.
 * It will provide instructions to the user with an initial stake of $50 and then let the user play until either the money runs out or the player quits.
 * Author: Zac Saunders
 * Version: 1.3
 */


import acm.program.*;

import java.awt.*;

import acm.util.RandomGenerator;

public class SlotMachine_V2 extends GraphicsProgram {

    RandomGenerator rgen = new RandomGenerator();

    public void run(){

        waitForClick();
        rollWheels();
    }

    public void rollWheels(){

        Wheel_1();
        Wheel_2();
        Wheel_3();
        println("You rolled:"+aa, + bb, +cc"");
        run();

    }

    public void Wheel_1(){

        int a = rgen.nextInt(1, 6);

        if( a == 1){//BAR//

            String aa =(" BAR, ");

        }else if( a == 2){//BELL//

            String aa =(" BELL, ");

        }else if( a == 3){//PLUM//

            String aa =(" PLUM, "); 

        }else if( a == 4){//ORANGE//

            String aa =(" ORANGE, ");

        }else if( a == 5){//CHERRY//

            String aa =(" CHERRY, ");       

        }else if( a == 6){//DASH (-)//

            String aa =(" -, ");        
        }
    }

    public void Wheel_2(){

        int b = rgen.nextInt(1, 6);

        if( b == 1){//BAR//

            String bb =("BAR, ");

        }else if( b == 2){//BELL//

            String bb =("BELL, ");

        }else if( b == 3){//PLUM//

            String bb =("PLUM, ");  

        }else if( b == 4){//ORANGE//

            String bb =("ORANGE, ");

        }else if( b == 5){//CHERRY//

            String bb =("CHERRY, ");        

        }else if( b == 6){//DASH (-)//

            String bb =("-, ");     
        }

    }

    public void Wheel_3(){

        int c = rgen.nextInt(1, 6);

        if( c == 1){//BAR//

            String cc =("and BAR");

        }else if( c == 2){//BELL//

            String cc =("and BELL");

        }else if( c == 3){//PLUM//

            String cc =("and PLUM");    

        }else if( c == 4){//ORANGE//

            String cc =("and ORANGE");

        }else if( c == 5){//CHERRY//

            String cc =("and CHERRY");      

        }else if( c == 6){//DASH (-)//

            String cc =("and -");       
        }
    }

}

person TheZac2613    schedule 18.12.2013    source источник
comment
Не заключайте в скобки String. Пожалуйста.   -  person Sotirios Delimanolis    schedule 18.12.2013
comment
Почему вы объявляете одну и ту же строку снова и снова?   -  person iWumbo    schedule 18.12.2013
comment
Таким образом, независимо от того, что генератор случайных чисел решит, что это за колесо, эта строка становится aa, bb или cc. Есть лучший способ сделать это?   -  person TheZac2613    schedule 18.12.2013


Ответы (3)


Вы должны объявить свои переменные в классе. Как вы это делаете сейчас, вы объявляете новые переменные в методах, и они находятся в области видимости только в этих методах.

public class SlotMachine_V2 extends GraphicsProgram {

    String aa;
    String bb;
    String cc;

    ...

}

Затем вы используете их:

public void Wheel_1(){

    int a = rgen.nextInt(1, 6);

    if( a == 1){//BAR//

        aa = " BAR, ";

    ...
}
person Szymon    schedule 18.12.2013
comment
Благодарю вас! Кажется, это исправляет println, но в методах Wheel 1/2/3 значение локальной переменной aa/bb/cc не используется. - person TheZac2613; 18.12.2013
comment
Вам не нужны локальные переменные. Удалить их. - person Szymon; 18.12.2013
comment
Если я их удалю, как println получит значения aa, bb и cc? Извините, если это глупый вопрос, как я уже сказал, я новичок в этом. - person TheZac2613; 18.12.2013
comment
Да, все переменные экземпляра (поля), объявленные на уровне класса, видны для всех нестатических методов этого класса. - person Szymon; 18.12.2013
comment
Идеальный. Спасибо, ты просто сделал мне ночь. - person TheZac2613; 18.12.2013
comment
Может быть, вы можете помочь. Как я могу сослаться на результаты того, что напечатано? Бывший. If(println = BAR, - и PLUM){... - person TheZac2613; 18.12.2013
comment
Создайте локальную переменную String x = aa + bb + cc;. Вы можете использовать ее для сравнения, но используйте x.equals("..."), а не ==. - person Szymon; 18.12.2013

Вы объявляете String aa =(" BAR, "); внутри блоков кода, поэтому видимость ограничивается блоками кода.

попробуйте переместить String aa на уровень класса, то есть чуть ниже RandomGenerator rgen = new RandomGenerator(); все в порядке.

person Scary Wombat    schedule 18.12.2013

просто используйте

System.out.println(String.format("%s, %s, and %s",aa,bb,cc));

и не ставьте запятые вокруг aa,bb,cc

person Pankaj Sharma    schedule 18.12.2013
comment
Благодарю вас! Теперь, в чем разница между этим и тем, что предложил Шимон? - person TheZac2613; 18.12.2013
comment
вам не нужно отслеживать запятые, а формат строки - это стандартный процесс для форматирования строк, а затем конкатенация, поскольку это увеличивает читаемость кода - person Pankaj Sharma; 18.12.2013
comment
У меня есть еще один вопрос к вам, как я могу ссылаться на результаты того, что напечатано? Бывший. If(println = BAR, - и PLUM){... - person TheZac2613; 18.12.2013