2015-09-16 5 views
-2

я получаю эту ошибку и я не могу понять, почему:Java: переменная не была инициализирована ошибка

Glosor.java:102: error: variable språk1 might not have been initialized JOptionPane.showInputDialog(null, språk1 + ":" + språk1glosor + "\n" + språk2 + ":"); ^ Glosor.java:102: error: variable språk2 might not have been initialized JOptionPane.showInputDialog(null, språk1 + ":" + språk1glosor + "\n" + språk2 + ":");

Это мой код:

javax.swing.*; 
import java.util.Arrays; 
import java.util.LinkedList; 
import java.util.List; 
import java.io.*; 

public class Glosor { 
public static void main(String[] args) throws IOException { 

List<String> gloslista1 = new LinkedList<String>(Arrays.asList()); 
List<String> gloslista2 = new LinkedList<String>(Arrays.asList()); 

    String inputStr1 =  JOptionPane.showInputDialog(null, 
               "**********************************" + "\n\n" + 
               "1. Skapa glosövning" + "\n\n" + 
               "2. Starta glosövning" + "\n\n" + 
               "3. Avsluta" + "\n\n" + 
               "**********************************"); 
    int input1 = Integer.parseInt(inputStr1); 


    switch (input1) { 

     case 1: 

     String övningsnamn = JOptionPane.showInputDialog(null, "Vad heter övningen?"); 
     String språk1 = JOptionPane.showInputDialog(null, "Språk 1?");  
     String språk2 = JOptionPane.showInputDialog(null, "Språk 2?"); 

      while (true) { 

      String glosa1 = JOptionPane.showInputDialog(null, "Skriv in glosa på " + språk1 + "\n\n" + 
                  "När du är klar skriv klar i rutan");    
       if(glosa1.equals("klar")) { 
       break; 

       } 
       else {   
       String glosa2 = JOptionPane.showInputDialog(null, "Skriv in glosa på " + språk2); 


       gloslista1.add(glosa1); 
       gloslista2.add(glosa2); 
       }      

      } 

       String filnamn1 = "språk1ord.txt"; 
       String filnamn2 = "språk2ord.txt"; 

       PrintWriter utström1 = new PrintWriter 
            (new BufferedWriter 
            (new FileWriter(filnamn1))); 
       //Skapar en text fil för glosorna på svenska 

       PrintWriter utström2 = new PrintWriter 
            (new BufferedWriter 
            (new FileWriter(filnamn2))); 
       //Skapar en text fil för glosorna på franska 

       for(int i = 0; i<=gloslista1.size()-1; i++) { 

       utström1.println(gloslista1.get(i)); 
       utström2.println(gloslista2.get(i)); 
       //Skriver in glosor i text filerna 

       } 
       utström1.close(); 
       utström2.close(); 





     case 2: 
     String inputStr2 = JOptionPane.showInputDialog(null, 
               "**********************************" + "\n\n" + 
               "1. Starta glosövning" + "\n\n" + 
               "2. Avsluta" + "\n\n" + 
               "**********************************"); 
     int input2 = Integer.parseInt(inputStr2); 

      if(input2 == 1) { 

       BufferedReader inström1 = new BufferedReader 
           (new FileReader("svenskaord.txt"));     
       String språk1glosor; 

       BufferedReader inström2 = new BufferedReader 
           (new FileReader("franskaord.txt"));     
       String språk2glosor; 

       int counter = 0; 
       while (true) { 
       counter++; 
       språk1glosor = inström1.readLine(); 
       språk2glosor = inström2.readLine(); 

        if(counter > gloslista1.size()) 
        break; 


       String svar = JOptionPane.showInputDialog(null, språk1 + ":" + språk1glosor + "\n" + språk2 + ":"); 





       }       
      } 
+0

Это означает, в основном, что error говорит ... Если 'input1' окажется равным 2, то' språk1' и 'språk2' никогда не будут инициализированы. Эти переменные * объявлены * в первом блоке case, но поскольку управление никогда не проходит там, если 'input1 == 2',' språk1' и 'språk2' никогда не получают * назначено * значение для этого конкретного значения' input1'. Затем на линии 102 вы используете эти неинициализированные переменные, что «лучше всего избегать». – WhiteViking

ответ

1

Вы инициализацией språk1 в вашем случае 1 и ссылаясь на него как в случае 1, так и в случае 2. Вам необходимо перенести инициализацию из заявления дела:

int input1 = Integer.parseInt(inputStr1); 
String övningsnamn = JOptionPane.showInputDialog(null, "Vad heter övningen?"); 
String språk1 = JOptionPane.showInputDialog(null, "Språk 1?");  
String språk2 = JOptionPane.showInputDialog(null, "Språk 2?"); 

switch (input1) { 
+0

есть ли способ, которым я мог бы держать его в заявлении дела и все еще заставить его работать? –

+0

Вы можете инициализировать эти переменные в каждом из операторов case. – DenimChicken

+0

Дело в том, что я хочу, чтобы переменные были инициализированы в случае 1 –

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