@warriorkg
Убил своего сына

Почему так происходит?

package rhymeCounter;
import java.util.*;
import java.io.*;

public class rhymeCounter {
Scanner myConsoleScanner = new Scanner(System.in);
PrintWriter myPrinter = new PrintWriter(System.out);
public static void rhyme() throws IOException {
String a1 = "Двадцать один, Тридцать один, Сорок один, Пятьдесят один";
String a2 = "Двадцать два, Тридцать два, Сорок два, Пятьдесят два";
for(int i = 1; i <= 100; i++) {
switch(i) {
case 1:
String j = a1;
break;
case 2:
j = a2; break;
}
System.out.println("У числа " + i + "эти рифмы : " + j );
}
}
}

Выдает ошибку : " j cannot be resolved to a variable "
Где я ошибся ? Что не так ?
  • Вопрос задан
  • 197 просмотров
Решения вопроса 1
@MoonMaster
Программист и этим все сказано
Проблема в области видимости переменной j. Дело в том, что ваша переменная видна только в case 1 и больше нигде. Поэтому компилятор и ругается в том, что нельзя присвоить значение. Объявите переменную j вначале цикла или сделайте её статической и у вас все заработает. Например так
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;

public class Apply {

    Scanner myConsoleScanner = new Scanner (System.in);
    PrintWriter myPrinter = new PrintWriter (System.out);
    static String j;

    public static void main(String[] args) {
        try{
            Apply.rhyme ();
        }
        catch (IOException ex){
            ex.printStackTrace ();
        }
    }

    public static void rhyme() throws IOException {
        String a1 = "Двадцать один, Тридцать один, Сорок один, Пятьдесят один";
        String a2 = "Двадцать два, Тридцать два, Сорок два, Пятьдесят два";

        for(int i = 1; i <= 100; i++) {
            switch(i) {
                case 1:
                    j = a1;
                    break;
                case 2:
                    j = a2; break;
            }
            System.out.println("У числа " + i + "эти рифмы : " + j );
        }
    }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
DVamp1r3
@DVamp1r3
Java/PHP программист
j внутри case. надо объявить перед switch
Ответ написан
Комментировать
Потому что j определена в блоке case 1, и доступна только там. А вы пытаетесь её использовать в других областях видимости. Вынесите объявление перед switch, а в case 1 оставьте лишь присваивание. Это элементарные вещи, которые рассказаны в первых 2-3 главах любой книжки по Java.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы