这个try catch代码(Java)出了什么问题?

时间:2014-04-18 21:46:44

标签: java arrays exception-handling compilation try-catch

2小时我试图编译我的代码,似乎没有工作...... 看看哪一行给了我一个msg,在代码中有一个评论。

Try和catch是否隔离了变量的独家消息?

import java.io.*;
public class Tp3Partie2 {

    public static void main (String[] params) {
        int cmd;
        FileReader fEntree;
        FileReader fEntree2;
        BufferedReader entree;
        Cars [] tableau;
        try {
            fEntree = new FileReader( "test.txt" );
            fEntree2 = new FileReader( "test.txt" );
            LineNumberReader nbrLigne = new LineNumberReader( fEntree );
            nbrLigne.skip(Long.MAX_VALUE);
            int nbrLigneFichier = nbrLigne.getLineNumber();
            nbrLigneFichier = nbrLigneFichier + 1;
            entree = new BufferedReader( fEntree2 );
            tableau = new Cars[nbrLigneFichier/5];
            System.out.println( tableau.length );
            for(int i=0;i<nbrLigneFichier/5;i++) {
                String type = entree.readLine();
                type.trim();
                int posType = Cars.obtenirCode(type, 't');

                String couleur = entree.readLine();
                couleur.trim();
                int posCouleur = Cars.obtenirCode(couleur, 'c');

                int pointure = Integer.parseInt(entree.readLine());
                double prix = Double.parseDouble(entree.readLine());
                boolean neuf = Boolean.parseBoolean(entree.readLine());
                System.out.println(i);
                tableau[i] = new Cars(posType,posCouleur,pointure,prix,neuf);
                tableau[i].toString();
            }
            entree.close();
            nbrLigne.close();
        } catch ( IOException e ) {
            System.out.println( MessagesTp3.FICHIER_EXISTE_PAS );
        }

        do {            
            System.out.println( MessagesTp3.AJOUTER_PAIRE );
            System.out.println( MessagesTp3.SUPPRIMER_PAIRE );
            System.out.println( MessagesTp3.AFFICHER_PAIRES );
            System.out.println( MessagesTp3.QUITTER  );
            System.out.println( MessagesTp3.VOTRE_CHOIX ); 
            cmd = Clavier.lireInt();

            switch (cmd) {
                case 1:
                break;
                case 2:
                break;
                case 3:
                System.out.println( MessagesTp3.LISTE_CHAUSSURES );                
                for(int i=0;i<tableau.length;i++) { // This line gives me a msg of "variable tableaumight not een initialized"
                    tableau[i].toString();
                }        
                break;
                case 9:
                break;
                default:
                System.out.println( MessagesTp3.CHOIX_NONVALIDE );
                break;
            }

        } while ( !(cmd == 9) );

        System.out.println( MessagesTp3.FIN_PROGRAMME );
    } // main

    public static void enregistrerPaires () {
    }

    public static void ajouterPaires () {
    }

    public static void suprimerPaires () {
    }
}

1 个答案:

答案 0 :(得分:2)

实际上try和catch并没有限制范围,但编译器所说的是在初始化try catch块中的变量之前可能会抛出的异常。

在这种情况下抛出并捕获异常,该变量未初始化,然后代码将继续。但是进一步说,我们得到编译错误的行,其中变量不会被初始化。

编译器检测到这种可能性并抛出错误,例如,解决方案是使用空数组初始化变量:

Cars [] tableau = {};