Construtor

8 respostas
M

Ae galera, preciso de uma ajuda!
estou construindo uma classe e produz os seguintes erros:

InvoiceTest.java:13: cannot find symbol

symbol: constructor Invoice(java.lang.String)

location: class Invoice

Invoice numero = new Invoice( 01 );

InvoiceTest.java:14: cannot find symbol

symbol: constructor Invoice(java.lang.String)

location: class Invoice

Invoice descricao = new Invoice( 4 );

InvoiceTest.java:15: cannot find symbol

symbol: constructor Invoice(java.lang.String)

location: class Invoice

Invoice quantidade = new Invoice( 5 );

InvoiceTest.java:16: cannot find symbol

symbol: constructor Invoice(double)

location: class Invoice

Invoice preco = new Invoice( 900.00 );

A classe Invoice é a seguinte:

public class Invoice
{

private String itemNumero;
private String itemDescricao;
private int itemQuantidade;
private double itemPreco;

public Invoice( String numero, String descricao, int quantidade, double preco )
{
	numero = "0";	
	descricao = "0";
	quantidade = 0;
	preco = 0.00;
}

public void setItemNumero( String numero )
{
	itemNumero = numero;
}

public String getItemNumero()
{
	return itemNumero;
}

public void setItemDescricao( String descricao )
{
	itemDescricao = descricao;
}

public String getItemDescricao()
{
	return itemDescricao;
}

public void setItemQuantidade( int quantidade )
{
	itemQuantidade = quantidade;
}

public int getItemQuantidade()
{
	return itemQuantidade;
}

public void setItemPreco( double preco )
{
	itemPreco = preco;
}	

public double getItemPreco()
{
	return itemPreco;
}

public void valor(double itemValor)
{
	itemValor = itemQuantidade * itemPreco;	
	
	if ( itemValor < 0 )
	{
		itemValor = 0;

	}			
}

public double getInvoiceAmount(double itemValor)
{
	return itemValor;
}

}

E a classe InvoiceTest é:

import java.util.Scanner;

public class InvoiceTest

{

private String numero;

private String descricao;

private int quantidade;

private double preco;
public static void main( String args[] )
{
	
	Invoice numero = new Invoice( "01" );
	Invoice descricao = new Invoice( "4" );
	Invoice quantidade = new Invoice( "5" );
	Invoice preco = new Invoice( 900.00 );

	Scanner input = new Scanner( System.in );

	String itemNumero;
	String itemDescricao;
	int itemQuantidade;
	double itemPreco;
	
	System.out.print( "Digite o numero do produto: " );
	itemNumero = input.nextLine();
	System.out.print( "Digite a descricao do produto: " );
	itemDescricao = input.nextLine();
	System.out.print( "Digite a quantidade: " );
	itemQuantidade = input.nextInt();
	System.out.print( "Digite o preco do produto: " );
	itemPreco = input.nextDouble();

	System.out.printf( "\nO numero do produto e: %s\n", numero.getItemNumero() );
	System.out.printf( "\nA descricao do produto e: %s\n", descricao.getItemDescricao() );
	System.out.printf( "\nO numero do produto e: %i\n", quantidade.getItemQuantidade() );
	System.out.printf( "\nO numero do produto e: %f\n", preco.getItemPreco() );

}

}

8 Respostas

T

se tens o construtor criado assim public Invoice( String numero, String descricao, int quantidade, double preco )

tens k criar uma instancia passando todos os parametros…

public static void main( String args[] )

{

Invoice in = new Invoice(01,4,5,900.00);



.

}

Testa assim :wink:

M

Obrigado, consegui compilar o programa;
mas na execução ele gerou um erro:

C:\Arquivos de programas\Java\jdk1.5.0_09\bin>java InvoiceTest

Digite o numero do produto: 02

Digite a descricao do produto: azul

Digite a quantidade: 1

Digite o preco do produto: 80.00

Exception in thread main java.util.InputMismatchException

at java.util.Scanner.throwFor(Scanner.java:819)

at java.util.Scanner.next(Scanner.java:1431)

at java.util.Scanner.nextDouble(Scanner.java:2335)

at InvoiceTest.main(InvoiceTest.java:29)

qual seria a solução?

E

“mando82”:
Obrigado, consegui compilar o programa;
mas na execução ele gerou um erro:

C:\Arquivos de programas\Java\jdk1.5.0_09\bin>java InvoiceTest

Digite o numero do produto: 02

Digite a descricao do produto: azul

Digite a quantidade: 1

Digite o preco do produto: 80.00

Exception in thread main java.util.InputMismatchException

at java.util.Scanner.throwFor(Scanner.java:819)

at java.util.Scanner.next(Scanner.java:1431)

at java.util.Scanner.nextDouble(Scanner.java:2335)

at InvoiceTest.main(InvoiceTest.java:29)

qual seria a solução?


O erro ocorreu porque você inseriu um número de ponto flutuante usando o ponto como separador decimal. Embora seja o certo usá-lo como separador decimal no código fonte, em tempo de execução deve ser usada a vírgula. Sendo assim, ao aparecer a mensagem "Digite o preco do produto: ", ao invés de digitar 80.00, digite 80,00.

P.S.: Observei que você estava dentro do diretório bin do JDK, no entanto isto não é necessário para executar o comando java. Basta você configurar a variável de ambiente PATH que você poderá executar este, e outros comandos, como o javac, estando em qualquer diretório no Prompt de Comando.

M

Ah sim, mas continua gerando o seguinte erro:

C:\Arquivos de programas\Java\jdk1.5.0_09\bin>java InvoiceTest

Digite o numero do produto: 02

Digite a descricao do produto: azul

Digite a quantidade: 1

Digite o preco do produto: 80.00

Exception in thread main java.util.InputMismatchException

at java.util.Scanner.throwFor(Scanner.java:819)

at java.util.Scanner.next(Scanner.java:1431)

at java.util.Scanner.nextDouble(Scanner.java:2335)

at InvoiceTest.main(InvoiceTest.java:29)

e, para configurar a variável de ambiente Path, já configurei mas não adiantou, gerou esse erro:

C:\Documents and Settings\MaNDo>javac Invoice.java InvoiceTest.java
error: cannot read: Invoice.java
1 error

E

“mando82”:
Ah sim, mas continua gerando o seguinte erro:

C:\Arquivos de programas\Java\jdk1.5.0_09\bin>java InvoiceTest

Digite o numero do produto: 02

Digite a descricao do produto: azul

Digite a quantidade: 1

Digite o preco do produto: 80.00

Exception in thread main java.util.InputMismatchException

at java.util.Scanner.throwFor(Scanner.java:819)

at java.util.Scanner.next(Scanner.java:1431)

at java.util.Scanner.nextDouble(Scanner.java:2335)

at InvoiceTest.main(InvoiceTest.java:29)

e, para configurar a variável de ambiente Path, já configurei mas não adiantou, gerou esse erro:

C:\Documents and Settings\MaNDo>javac Invoice.java InvoiceTest.java
error: cannot read: Invoice.java
1 error


Se possível coloque a linha 29 da classe InvoiceTest, ou até mesmo ela toda, assim dá pra identificar melhor o erro. E em relação ao outro problema, acho que você não conseguiu usar o comando javac no diretório C:\Documents and Settings\MaNDo porque provavelmente o arquivo Invoice.java não está neste diretório ou não existe.

M

obrigado, ai vai a classe InvoiceTest:

import java.util.Scanner;

public class InvoiceTest

{

private String numero;

private String descricao;

private int quantidade;

private double preco;
public static void main( String args[] )
{
	
	Invoice invoice = new Invoice( "01","4", 5, 900.00 );

	Scanner input = new Scanner( System.in );

	String itemNumero;
	String itemDescricao;
	int itemQuantidade;
	double itemPreco;
	
	System.out.print( "Digite o numero do produto: " );
	itemNumero = input.nextLine();
	System.out.print( "Digite a descricao do produto: " );
	itemDescricao = input.nextLine();
	System.out.print( "Digite a quantidade: " );
	itemQuantidade = input.nextInt();
	System.out.print( "Digite o preco do produto: " );
	itemPreco = input.nextDouble();

	System.out.printf( "\nO numero do produto e: %s\n", invoice.getItemNumero() );
	System.out.printf( "\nA descricao do produto e: %s\n", invoice.getItemDescricao() );
	System.out.printf( "\nO numero do produto e: %i\n", invoice.getItemQuantidade() );
	System.out.printf( "\nO numero do produto e: %f\n", invoice.getItemPreco() );

}

}

E

“mando82”:
obrigado, ai vai a classe InvoiceTest:

import java.util.Scanner;

public class InvoiceTest
{
private String numero; // Campo não utilizado
private String descricao; // Campo não utilizado
private int quantidade; // Campo não utilizado
private double preco; // Campo não utilizado

public static void main( String args[] )
{
	
	Invoice invoice = new Invoice( "01","4", 5, 900.00 );

	Scanner input = new Scanner( System.in );

	String itemNumero;
	String itemDescricao;
	int itemQuantidade;
	double itemPreco;
	
	System.out.print( "Digite o numero do produto: " );
	itemNumero = input.nextLine();
	System.out.print( "Digite a descricao do produto: " );
	itemDescricao = input.nextLine();
	System.out.print( "Digite a quantidade: " );
	itemQuantidade = input.nextInt();
	System.out.print( "Digite o preco do produto: " );
	itemPreco = input.nextDouble();

	System.out.printf( "\nO numero do produto e: %s\n", invoice.getItemNumero() );
	System.out.printf( "\nA descricao do produto e: %s\n", invoice.getItemDescricao() );
	System.out.printf( "\nO numero do produto e: %i\n", invoice.getItemQuantidade() );
	System.out.printf( "\nO numero do produto e: %f\n", invoice.getItemPreco() );

}

}


Esta classe está meio estranha. Existem campos que não estão sendo utilizados, você solicita a entrada dos dados, mas não atribui os dados recebidos aos campos do objeto criado, e utiliza o especificador de formato %i, que até onde eu sei não existe. De qualquer forma eu testei aqui a parte que está dando problema com você e funcionou normalmente. Tem certeza que você usou a virgula como separador decimal após a mensagem "Digite o preco do produto: ". Exemplo:

Digite o numero do produto: “02”
Digite a descricao do produto: “azul”
Digite a quantidade: 1
Digite o preco do produto: 80,00

M

Eu vou explicar melhor o problema:

preciso criar uma classe “Invoice” para representar a fatura de uma loja de informática. Devo criar quatro variáveis de instancia - o número (tipo String), a descrição (tipo String), a quantidade comprada de um item (tipo int) e o preço por item (tipo double). Porém não consigo criar um construtor que inicialize as 4 variáveis de instância. Alem disso, o problema pede que forneça um metodo set e um get para cada variável de instancia e um metodo (getInvoiceAmount) que calcula o valor da fatura (multiplica a quantidade pelo preço por item) e depois retorna o valor como double. Se o valor não for positivo, ele deve ser configurado como 0. Se o preço por item não for positivo, ele deve ser configurado como 0.0. E tambem criar um aplicativo de teste “InvoiceTest” para demonstrar as capacidades da classe “Invoice”.
Eu criei elas e colei no início do tópico.

Criado 9 de dezembro de 2006
Ultima resposta 11 de dez. de 2006
Respostas 8
Participantes 3