Problema com Scanner

Eai galera. To com um problemão aqui, to brigando com um Scanner do java há semanas e não consigo resolver meu problema… Bateu o desespero e vim aqui :sweat_smile:

Esse é o código:

public static void atribuicao (double[][] f, String[] g) {
for (int x = 0; x < g.length; x++) {
Scanner sc = new Scanner(System.in).useLocale(Locale.US);
g[x] = sc.nextLine();
for (int y = 0; y < 14; y++) {
f[x][y] = sc.nextDouble(); // Insere os pesos de cada criterio para avaliação
}
}
}

Senta que lá vem história… Meu programa todo mesmo tem 94 linhas. Ele funciona perfeitamente, eu compilo e executo, insiro as entradas manualmente e sucesso. Porém quando eu uso como entrada um arquivo txt, pelo comando java Main <entrada.txt ele da o erro:

Exception in thread “main” java.util.NoSuchElementException: No line found

  •    at java.util.Scanner.nextLine(Unknown Source)*
    
  •    at EpTeste.atribuicao(EpTeste.java:66)*
    
  •    at EpTeste.main(EpTeste.java:17)* // Aqui é a linha onde eu invoquei o método
    

Se eu utilizo um if (sc.hasNextLine()) {} ele simplesmente me retorna false e nem executa a linha 66 e acontece um erro diferente, dessa vez na linha 69, problema na leitura do double:

Exception in thread “main” java.util.NoSuchElementException

  •    at java.util.Scanner.throwFor(Unknown Source)*
    
  •    at java.util.Scanner.next(Unknown Source)*
    
  •    at java.util.Scanner.nextDouble(Unknown Source)*
    
  •    at EpTeste.atribuicao(EpTeste.java:69)*
    
  •    at EpTeste.main(EpTeste.java:17)*
    

Já tentei bastante coisa pra resolver esse segundo problema, como por exemplo ler o double como String, mas mesmo assim da problema. Vou ficar mt feliz se alguém me ajudar =)

Obrigado!

Posta o código onde está sendo utilizado o scanner para abrir o arquivo.
você está utilizando alguma IDE ou console do Java?

Então, eu não utilizo nenhum scanner para abrir o arquivo. Eu uso o comando no CMD java Main <entrada.txt e ele já pega os dados.

O nextDouble não consome a quebra de linha.
Troque isso:

f[x][y] = sc.nextDouble();

Por isso:

f[x][y] = Double.parseDouble(sc.nextLine());

Opa, vamos fazer um teste, lá no primeiro for coloca a quantidade de linhas no lugar de g.length.
Outra coisa, declare o Scanner fora do laço, já passei por erros por causa disso.