Podem me ajudar , pq nao esta a funcionar

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Scanner;

public class lapr1ficheiro {
    public static boolean lerficheiro(String fileName, double[] vetor, double[][] matrizLeslie) throws FileNotFoundException {
        int linha;
        String[] x;
        String[] s;
        String[] f;


        File lerfile = new File(fileName + ".txt");
        Scanner ler = new Scanner(lerfile);

        while (ler.hasNextLine()) {
            String exlinha = ler.nextLine(); // ler ate nao existir linhas
            String criRray = String.valueOf(exlinha.charAt(0));

            switch (criRray) {
                case "x":
                case "X":
                    x = exlinha.split(",|\\=");

                    if (x.length > 200) {
                        System.out.println("Ficheiro invalido insira outro ficheiro");
                        return false;
                    }

                    System.out.println(Arrays.toString(x));

                    for (int i = 1, y = 0; i < x.length; i += 2, y++) {
                        vetor[y] = Double.parseDouble(x[i]);
                        System.out.println(vetor[y]);
                    }

                    break;
                case "s":
                case "S":
                    s = exlinha.split(",|\\=");

                    if (s.length > 200) {
                        System.out.println("Ficheiro invalido insira outro ficheiro");
                        return false;
                    }

                    System.out.println(Arrays.toString(s));

                    break;
                case "f":
                case "F":
                    f = exlinha.split(",|\\=");

                    if (f.length > 200) {
                        System.out.println("Ficheiro invalido insira outro ficheiro");
                        return false;
                    }

                    System.out.println(Arrays.toString(f));
                    double[][] matrizDeLeslie = new double[f.length][f.length];
                    int k = 0;
                for (int i = 1; i < matrizDeLeslie.length; i++) {
                    for (int j = 0; j < matrizDeLeslie.length; j++) {
                        matrizDeLeslie[0][j] = Double.parseDouble(f[j]);
                        if (i - 1 == j) {
                            matrizDeLeslie[i][j] = Double.parseDouble(s[k]);
                            k++;
                            break;
                        }
                    }
                }
            }
        }
            return true;
        }
    }

Qual erro ta ocorrendo ?

Pelo que vi aqui seu código não compila porque a variável s “pode não ter sido inicializada” e isso quer dizer o seguinte:

Se o valor da variável criRray for “s” ou “S” a variável s será inicializada normalmente na linha abaixo.

s = exlinha.split(",|\\=");

Porém, se o valor de criRray for “f” ou “F” a variável s também seria utilizada na linha abaixo.

matrizDeLeslie[i][j] = Double.parseDouble(s[k]);

O problema é que neste ponto do seu programa s não foi inicializada ainda e por isso o compilador reclama.

Diferente das variáveis de classe e variáveis de instancia, as variáveis locais como a s devem ser inicializadas antes de serem usadas e é trabalho do programador assegurar isso.

Como uma forma rápida de resolver, vc poderia inicializar s com um array vazio logo quando ela é declarada, assim:

String[] s = {};

Só que a sugestão acima é só um jeito “sujo” pra evitar o erro de compilação. É importante que vc reveja sua lógica pra ver se minha sugestão é realmente a melhor opção.

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Scanner;

public class lapr1ficheiro {
public static void main(String[] args) {
double[] vetor = new double[200];
double[][] matriz = new double[200][200];
try {
lerficheiro(“c:\Users\tiago\IdeaProjects\aprogpl3\src\gd”, vetor, matriz);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}

public static boolean lerficheiro(String fileName, double[] vetor, double[][] matrizLeslie) throws FileNotFoundException {
    int linha;
    int countClasses;
    String[] x;
    String[] s;
    String[] f;

    File lerfile = new File(fileName + ".txt");
    Scanner ler = new Scanner(lerfile);

    while (ler.hasNextLine()) {

        String exlinha = ler.nextLine(); // ler ate nao existir linhas
        String criRray = String.valueOf(exlinha.charAt(0));
        switch (criRray) {
            case "x":
            case "X":
                x = exlinha.split(",|\\=");

                if (x.length > 200) {
                    System.out.println("Ficheiro invalido insira outro ficheiro");
                    return false;
                }

                System.out.println(Arrays.toString(x));

                for (int i = 1, y = 0; i < x.length; i += 2, y++) {
                    countClasses = i;
                    vetor[y] = Double.parseDouble(x[i]);
                    System.out.print(vetor[y] + " ");
                }

                System.out.println();

                break;
            case "s":
            case "S":
                s = exlinha.split(",|\\=");

                if (s.length > 200) {
                    System.out.println("Ficheiro invalido insira outro ficheiro");
                    return false;
                }

                System.out.println(Arrays.toString(s));

                for (int i = 1, a = 1, y = 0; i < s.length; i += 2, a++, y++) {
                    countClasses = i;
                    matrizLeslie[a][y] = Double.parseDouble(s[i]);
                    System.out.print(matrizLeslie[a][y] + " ");
                }

                System.out.println();

                break;

            case "f":
            case "F":
                f = exlinha.split(",|\\=");

                if (f.length > 200) {
                    System.out.println("Ficheiro invalido insira outro ficheiro");
                    return false;
                }

                System.out.println(Arrays.toString(f));

                for (int i = 1, y = 0; i < f.length; i += 2, y++) {
                    countClasses = i;
                    matrizLeslie[0][y] = Double.parseDouble(f[i]);
                    System.out.print(matrizLeslie[0][y] + " ");
                }

                System.out.println();

                break;
        }
    }
    return true;
}

}

mesmo assim algo nao esta bem nao sei

O caractere “\” tem um significado especial pro Java, por isso vc não pode criar Strings como vc fez: “um\caminho\qualquer”.

Vc precisa fazer “\\” quando quer usar essa barrinha: “um\\caminho\\qualquer”.

No seu caso, troque:

lerficheiro("c:\Users\tiago\IdeaProjects\aprogpl3\src\gd", vetor, matriz);

Por:

lerficheiro("c:\\Users\\tiago\\IdeaProjects\\aprogpl3\\src\\gd", vetor, matriz);

sim eu tinha isso dessa forma ao passar para aqui é que alterou

Entendi. Então explica melhor o seu problema.

se o ficheiro de texto for separado por linhas em branco da erro

Me manda um exemplo deste ficheiro pra eu testar aqui.

s0=0.50, s1=0.80, s2=0.50

x00=20, x01=10, x02=40, x03=30

f0=0.50, f1=2.40, f2=1.00, f3=0.00

s0=0.50, s1=0.80, s2=0.50
x00=20, x01=10, x02=40, x03=30
f0=0.50, f1=2.40, f2=1.00, f3=0.00

se o ficheiro for assim funciona

Ah sim, vc precisa dar um jeito de pular as linhas em branco. Olha, acho que consegui uma solução.

Sabe esse linha aqui:

String exlinha = ler.nextLine();

Então, abaixo dela, adicione isso:

if (exlinha.equals(""))
  continue;

O continue vai fazer o while “pular” sempre que a linha for vazia. Ou seja, se a linha for vazia, o código abaixo do continue não será executado.

sim era isso mesmo , muito obrigado se faltar mais alguma coisa aviso , muito obrigado

s0=0.50, s1=0.80, s2=0.50
x00=20, x01=10, x02=40, x03=30
f0=0.50, f1=2.40, f2=1.00, f3=0.00

agora imaginemos que o x00,x01 nao esta ordenado do genero

s0=0.50, s1=0.80, s2=0.50
x03=20, x02=10, x01=40, x00=30
f0=0.50, f1=2.40, f2=1.00, f3=0.00

como posso organizar enquanto leio ?

Uma possibilidade seria assim:

case "x":
case "X":
  String[] tmp = exlinha.split("[,\\s]+");
  Arrays.sort(tmp);
  x = String.join("=", tmp).split("=");

e em vez de ordenar se der erro ao ler do genero criar um contador que compara o x e se nao for igual da erro

Ih, eu não entendi o que vc quis dizer.

s0=0.50, s1=0.80, s2=0.50
x03=20, x02=10, x01=40, x00=30
f0=0.50, f1=2.40, f2=1.00, f3=0.00

se o ficheiro estiver desorganizado em vez de o ordenar simplesmente verificar que ele nao esta bem e dizer que esta errado

Um jeito seria copiar o array e depois comparar, assim:

case "x":
case "X":
  String[] tmp = exlinha.split("[,\\s]+");
  String[] tmp2 = Arrays.copyOf(tmp, tmp.length);
  Arrays.sort(tmp);

  if (!Arrays.equals(tmp, tmp2))
    System.out.println("Está desorganizado!!!");

  x = String.join("=", tmp).split("=");