[resolvido] Problema ao executar projeto

Olá a todos.

Sou novo na linguagem e ainda estou aprendendo portando o problema que estou tento pode ser bobo, mas não estou conseguindo resolve-lo sozinho.

Ai vai o código:


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

class ReadAndWrite {
    
    public static void main(String args[])
        throws FileNotFoundException {

        Scanner diskScanner = 
            new Scanner(new File("rawData.txt"));
        PrintStream diskWriter = 
            new PrintStream("cookedData.txt"); 
        double unitPrice, quantity, total;

        unitPrice = diskScanner.nextDouble();
        quantity = diskScanner.nextInt();

        total = unitPrice * quantity;

        diskWriter.println(total);
    } 
}

Ele compila sem problema, mas da o seguinte erro ao executar:

--------------------Configuration: Chapter13_Listing02 - JDK version 1.7.0_03 - --------------------
Exception in thread “main” java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:909)
at java.util.Scanner.next(Scanner.java:1530)
at java.util.Scanner.nextDouble(Scanner.java:2456)
at ReadAndWrite.main(ReadAndWrite.java:17)

Process completed.

Detalhes adicionais:
O arquivo rawData.txt está na mesma pasta do exemplo.
Uso o Jcreator LE para escrever os códigos.

Esse é o mesmo exemplo que vem com o livro (eu nem escrevi esse código, pois ele veio junto com uma pasta de exemplos para download no site do livro).

Peço desculpas pela duvida de novato e agradeço a todos que estiverem dispostos a me ajudar a solucionar o problema.

Obrigado

Por favor, ao postar tópicos, deixe marcações para coisas úteis como [Resolvido] ou o nome de alguma API específica relevante para o problema.

Evite marcar com o óbvio como [Ajuda], [Socorro], [Urgente] ou [Dúvida].

InputMismatchException significa que o dado que está no arquivo não corresponde ao que você pediu.
No caso, o erro ocorreu no nextDouble(), portanto, certifique-se que há um double lá no arquivo mesmo.

Obrigado pelo aviso, mas problema ainda persiste.
Fiz a seguinte alteração.


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

class ReadAndWrite {
    
    public static void main(String args[])
        throws FileNotFoundException {

        Scanner diskScanner = 
            new Scanner(new File("rawData.txt"));
        PrintStream diskWriter = 
            new PrintStream("cookedData.txt"); 
        double unitPrice, quantity, total;

        unitPrice = diskScanner.nextDouble();
        quantity = diskScanner.nextDouble();

        total = unitPrice * quantity;

        diskWriter.println(total);
    } 
}

O codigo do rawData.txt está assim:


19.95 5

Continua compilando sem problema, mas ao executar ocorre o mesmo erro. Alguma outra ideia?

Se o erro era no nextDouble(), como indica a mensagem:

at java.util.Scanner.nextDouble(Scanner.java:2456) at ReadAndWrite.main(ReadAndWrite.java:17)

Por que você achou que iria corrigi-lo alterando a linha do nextInt()?!?

Provavelmente o scanner está lendo as configurações regionais.
Tente alterar o separador de decimal de “.” para “,” - pois é assim que fazemos no Brasil.

Ou então, use o comando

diskScanner.useLocale(Locale.US);

Logo após criar seu Scanner.

Olá amigo, boa noite !!

Seu código está correto, porém você precisa se atentar apenas a um detalhe.

Seu sistema operacional provavelmente está rodando com o idioma (Locale) em português. Ou seja, o comando “nextDouble()” espera um valor com virgula.

Para seu código funcionar é só alterar o padrão do Locale para US ou aplicar virgulas nos valores recuperados.


diskScanner.useLocale( Locale.US );

Abraços,
Felipe Mozena

Essa linha:


diskScanner.useLocale( Locale.US );

Vai em que lugar exatamente no código? Vocês poderiam coloca-la no código do meu programa e mandar aqui? Eu tentei coloca-la em alguns lugares, mas não funcionou… Desculpem eu comecei a ver a linguagem a pouco tempo e sou muito lento com essas coisas.

Obrigado.

Como falei, use logo depois de criar seu scanner:

import java.util.Locale; //Não esqueça de dar import
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;

class ReadAndWrite {
    
    public static void main(String args[])
        throws FileNotFoundException {

        Scanner diskScanner = 
            new Scanner(new File("rawData.txt"));
        diskScanner.useLocale(Locale.US); //Use aqui.
        PrintStream diskWriter = 
            new PrintStream("cookedData.txt"); 
        double unitPrice, quantity, total;

        unitPrice = diskScanner.nextDouble();
        quantity = diskScanner.nextDouble();

        total = unitPrice * quantity;

        diskWriter.println(total);
    } 
}

import java.util.Locale; 
import java.util.Scanner;  
import java.io.File;  
import java.io.FileNotFoundException;  
import java.io.PrintStream;  
  
class ReadAndWrite {  
      
    public static void main(String args[])  
        throws FileNotFoundException {  
  
        Scanner diskScanner =   
            new Scanner(new File("rawData.txt"));  
        diskScanner.useLocale(Locale.US); 
        PrintStream diskWriter =   
            new PrintStream("cookedData.txt");   
        double unitPrice, quantity, total;  
  
        unitPrice = diskScanner.nextDouble();  
        quantity = diskScanner.nextDouble();  
  
        total = unitPrice * quantity;  
  
        diskWriter.println(total);  
    }   
}

--------------------Configuration: Chapter13_Listing02 - JDK version 1.7.0_03 - --------------------
Exception in thread “main” java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:909)
at java.util.Scanner.next(Scanner.java:1530)
at java.util.Scanner.nextDouble(Scanner.java:2456)
at ReadAndWrite.main(ReadAndWrite.java:20)

Process completed.

Mesma coisa.

Volte o quantity para nextInt()

Problema resolvido! Obrigado pela ajuda e pela paciência.