Erro Impressão

8 respostas
Smokerox
Ola galera, sou novo no forum e no java, gostaria de passar aqui minhas duvidas e erros recentes do qual eu não estou entendendo o problema. Segue o Código fonte:
package Livros;

import java.util.Scanner;

public class exe {

	public static void main(String[] args){
		
		Scanner entrada = new Scanner(System.in);
		
		Livraria vetorLivro[] = new Livraria[1];
		Livraria livro = new Livraria();
		
		
		for(int i = 0; i<vetorLivro.length; ++i){
			livro = new Livraria();
			
			System.out.println("Digite o nome do Autor:");
			livro.setAutor(entrada.next());
			System.out.println("Qual o numero de paginas:");
			livro.setNumeroDePaginas(entrada.nextInt());
			System.out.println("Qual o titulo do livro:");
			livro.setTitulo(entrada.next());
			System.out.println("Valor de venda:");
			livro.setPrecovenda(entrada.nextDouble());
			System.out.println("Qual a quantidade no estoque:");
			livro.setQuantestoque(entrada.nextInt());
			
			vetorLivro[i] = livro;
			
		}
		
		System.out.print(livro);
		
	}

}

Erro mencionado:
[color=red] Exception in thread "main" java.util.IllegalFormatConversionException: d != java.lang.String
at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source)
at java.util.Formatter$FormatSpecifier.printInteger(Unknown Source)
at java.util.Formatter$FormatSpecifier.print(Unknown Source)
at java.util.Formatter.format(Unknown Source)
at java.util.Formatter.format(Unknown Source)
at java.lang.String.format(Unknown Source)
at Livros.Livros.toString(Livros.java:40)
at Livros.Livraria.toString(Livraria.java:33)
at java.lang.String.valueOf(Unknown Source)
at java.io.PrintStream.print(Unknown Source)
at Livros.exe.main(exe.java:33)[/color]

Programa usado "Eclipse".
Total de classes: 2
Class Livro
Class Livraria extends Livro

Alguem pode me falar o que é esse problema, pelo que eu entendi é algo referente ao formato/tipo.

8 Respostas

maschiojv

Olá Smokerox,

já que vc é novo em java… : a mensagem de erro geralmente traz informações sobre o erro!! :shock:

por exemplo…

Exception in thread main java.util.IllegalFormatConversionException: d != java.lang.String

at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source)

at java.util.Formatter$FormatSpecifier.printInteger(Unknown Source)

at java.util.Formatter$FormatSpecifier.print(Unknown Source)

at java.util.Formatter.format(Unknown Source)

at java.util.Formatter.format(Unknown Source)

at java.lang.String.format(Unknown Source)

at Livros.Livros.toString(Livros.java:40)      <<<----- aqui diz que o erro passou pela classe Livros, na linha 40 do método toString()  <img src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14/assets/72x72/s.pngmiley.png?v=9" title=":smiley:" class="emoji" alt=":smiley:">

at Livros.Livraria.toString(Livraria.java:33)

at java.lang.String.valueOf(Unknown Source)

at java.io.PrintStream.print(Unknown Source)

at Livros.exe.main(exe.java:33)

sabendo disso, vc poderia ter postado a classe livros, mas como pelo visto vc nao leu a mensagem, acho que agora vc pode dar uma olhada na classe Livros e ver se resolve o problema, se não conseguir poste a classe e veremos qual é a zica.

Smokerox

Mais eu já visualizei a classe e o metodo toString mais nada identifiquei
Olhe a classe:

package Livros;

public class Livraria extends Livros{
	
	private double precovenda;
	private int quantestoque;
	
	public Livraria() {
		// constructor default
	}
	
	public Livraria(String autor, int numeroDePaginas, String titulo, double precovenda, int quantestoque){
		
		super(autor, numeroDePaginas, titulo);
		this.precovenda = precovenda;
		this.quantestoque = quantestoque;		
	}
	
	public double getPrecovenda() {
		return precovenda;
	}
	public int getQuantestoque() {
		return quantestoque;
	}
	public void setPrecovenda(double precovenda) {
		this.precovenda = precovenda;
	}
	public void setQuantestoque(int quantestoque) {
		this.quantestoque = quantestoque;
	}
	
	public String toString() {
		return String.format("%s\nPreco de Venda: %f\nQuantidade Estoque: %d",super.toString(),getPrecovenda(),getQuantestoque());
	}
}

Classe Livros:

package Livros;

public class Livros {
	
	private String autor;
	private int numeroDePaginas;
	private String titulo;
	
	public Livros() {
		// constructor default
	}
	
	public Livros(String autor, int numeroDePaginas, String titulo)
	{
		this.autor = autor;
		this.numeroDePaginas = numeroDePaginas;
		this.titulo = titulo;
	}
	
	public String getAutor() {
		return autor;
	}
	public int getNumeroDePaginas() {
		return numeroDePaginas;
	}
	public String getTitulo() {
		return titulo;
	}
	public void setAutor(String autor) {
		this.autor = autor;
	}
	public void setNumeroDePaginas(int numeroDePaginas) {
		this.numeroDePaginas = numeroDePaginas;
	}
	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}
	
	public String toString() {
		return String.format("Autor do livros: %s\nTitulo do livro: %s\nNumero de paginas: %d",getAutor(),getNumeroDePaginas(),getTitulo());
	}

}
Smokerox

So acontece esses erros quando meus projetos são com vetores :frowning:
Alguem pode me dizer o que esta avendo com o código…

B

Simples, você está misturando entrada.next com entrada.nextInt, usando entradas do teclado. Isso não funciona no Windows devido ao padrão de término de linhas. Não é um bug.

Solução: use somente entrada.next, e converta dos dados para outros tipos com Integer.parseInt e Double.parseDouble

Smokerox

E como ficaria amigo...
Seria algo do tipo:

String aux = entrada.next();
...
...

livro.setPrecovenda(Double.parseDouble(aux));
Smokerox
Outra forma:
package Livros;

import java.util.Scanner;

public class exe {

	public static void main(String[] args){
		
		
		Scanner entrada = new Scanner(System.in);
		
		Livraria vetorLivro[] = new Livraria[1];
		Livraria livro = new Livraria();
		
		for(int i = 0; i<vetorLivro.length; ++i){
			livro = new Livraria();
			
			System.out.println("Digite o nome do Autor:");
			livro.setAutor(entrada.next());
			System.out.println("Qual o numero de paginas:");
			livro.setNumeroDePaginas(Integer.parseInt(entrada.next()));
			System.out.println("Qual o titulo do livro:");
			livro.setTitulo(entrada.next());
			System.out.println("Valor de venda:");
			livro.setPrecovenda(Double.parseDouble(entrada.next()));
			System.out.println("Qual a quantidade no estoque:");
			livro.setQuantestoque(Integer.parseInt(entrada.next()));
			
			vetorLivro[i] = livro;
			
		}
		
		System.out.print(livro);
		
	}

}

Erro:
[color=red]Exception in thread "main" java.util.IllegalFormatConversionException: d != java.lang.String
at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source)
at java.util.Formatter$FormatSpecifier.printInteger(Unknown Source)
at java.util.Formatter$FormatSpecifier.print(Unknown Source)
at java.util.Formatter.format(Unknown Source)
at java.util.Formatter.format(Unknown Source)
at java.lang.String.format(Unknown Source)
at Livros.Livros.toString(Livros.java:40)
at Livros.Livraria.toString(Livraria.java:33)
at java.lang.String.valueOf(Unknown Source)
at java.io.PrintStream.print(Unknown Source)
at Livros.exe.main(exe.java:33) [/color]

Os valores estão sendo gravados normalemente só que quando vai imprimir no ultimo system.out da esse erro.
Ajuda aew galera.

Smokerox

Ainda não consegui resolver alguem tem uma ideia do que pode ser isso.

edit 20/10

Mal não tinha percebido que postei duas classes iguais.
Pronto agora a classe livro já esta no post anterior.

maschiojv

Fio… o problema é, como eu já disse, na classe Livros. Posta ela ai.

Criado 14 de outubro de 2009
Ultima resposta 19 de out. de 2009
Respostas 8
Participantes 3