Variable bloc try catch java

roseda -  
 roseda -
Bonjour,
si vous pouviez m'aider:
j'ai un petit problème:

le code suivant , lit un fichier texte d'entiers , et les affiche dans une matrice,
je voulais sauvegarder les valeurs de la matrice dans un tableau de 2 dimensions; puis réutiliser ce tableau. mais quand je déclare la table dans le bloc try , je ne peux pas la réutiliser, sinon si je fais comme décrit dans mon code , j'aurai cette erreur après compilation:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
monTableau cannot be resolved or is not a field

at fich.<init>(fich.java:31)
at afich.main(afich.java:12)

svppppp, quelqu'un peut m'aider??? merciiiiiiiii

mon code java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class fich {
String chemin = "fichier.txt";
public int a;

public int i=1;
public int x=1;
public int j=1;
int [][] monTableau = new int[a][a];

{
try{
BufferedReader buf = new BufferedReader(new FileReader(chemin));

try {

String line;
// on lit toutes les lignes du fichier
int n = Integer.parseInt(buf.readLine());
a=n+1;
while ((line = buf.readLine()) != null) {
if (x<=n) {

int m=Integer.parseInt(line);
this.monTableau[i][j]=m;
System.out.print(monTableau[i][j]+ " ");
x++;
j++;
}
if (x==n+1)
{
System.out.println();
x=1;
i++;
j=1;
}
}

System.out.println("\n");
}

finally {

// on ferme notre fichier
buf.close();
}

}
catch (IOException ioe) {

System.out.println(ioe.toString());
}
}
}

2 réponses

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    C'est assez simple, au lieu de faire :

    try {
        BufferedReader buf = new BufferedReader(...);
        ...

    Il faut faire :

    BufferedReader buf = null;
    try {
        buf = new BufferedReader(...);
        ...

    Remarque : si tu ne connais pas la classe Scanner, jettes-y un coup d'oeil, c'est plus simple pour lire les lignes d'un fichier que l'utilisation de BufferedReader...

    Scanner sc = new Scanner(new File("chemin"));
    
    while (sc.hasNextLine()) {
        ligne = sc.nextLine();
        ...
    0
  2. danimo
     
    Salut,
    C'est quoi le bloc {
    ....
    ...
    }
    qui suit
    int [][] monTableau = new int[a][a];

    un constructeur,
    la méthode main(...),
    ???
    d'autre part le tableau monTableau tel que déclaré n'est pas utilisable car sans dimensions ou plustôt avec des dimensions zéro:

    avec public int a; a est à zéro
    et donc on a int [][] monTableau = new int[0][0];

    Dan
    0
    1. roseda
       
      c bon j'ai résolu mon problème, j'ai déclaré le tableau avant le bloc try, et je l'ai réinitialisé avec des constantes, et ça marche. vous aviez raison , merci bcp pour la réponse.
      0