Dúvida com variáveis

9 respostas
LecoArax

Pessoal,

Estou com um erro nesta linha:

if (NOME_PRODUTO != null && QTE_PRODUTO != null && VALOR_PRODUTO != null){

QTE_PRODUTO é inteiro e VALOR_PRODUTO é float. Acho que não está aceitando o null.

Alguém pode me orientar?

Obrigado
Leandro

9 Respostas

E

Um valor primitivo não pode ser null. Um java.lang.Float pode ser null, mas um float não.

A propósito, o uso de float (ou seu irmão, o java.lang.Float) é expressamente não-recomendado. Use o double ou o java.math.BigDecimal. Use float apenas em casos bastante especiais (por exemplo, para usar em alguns casos em Java2D).

LecoArax

Entendi, mas como então eu declaro um inteiro nulo e um double nulo?

Obrigado

esmiralha

Double e float tem o mesmo problema de perda de precisão quando são usados para representar valores monetários. Se tem preguiça de criar uma classe Dinheiro, use BigDecimal, int ou long. Se usar int ou long você estará representando centavos ao invés de Reais. Lembre-se disso quando for escrever na tela.

O ideal é deixar de preguiça e encapsular essa bagaça toda em uma classe Dinheiro.

E

Pois é, use o encapsulamento - como eu falei, primitivos não podem ser null, apenas os wrappers.

Entretanto, você provavelmente está tentando usar JDBC, não? Nesse caso, não se esqueça que há um método chamado wasNull. Por exemplo, digamos que você tenha um campo que você quis ler com getDouble(). Mas getDouble() retorna 0 se o valor lido for, na verdade, SQL NULL. Então você ainda precisa chamar isNull. Você pode encapsular isso. Veja como:

public static Double getDouble (ResultSet rs, String columnName) {
    double d = rs.getDouble (columnName);
    if (rs.wasNull()) return null;
    else return Double.valueOf (d); 
}
LecoArax

Vou tentar aqui. Estou trabalhando com JDBC. Vou ver se consigo entender o que vc me explicou.

Muito obrigado!

Leandro

entanglement:
Pois é, use o encapsulamento - como eu falei, primitivos não podem ser null, apenas os wrappers.

Entretanto, você provavelmente está tentando usar JDBC, não? Nesse caso, não se esqueça que há um método chamado wasNull. Por exemplo, digamos que você tenha um campo que você quis ler com getDouble(). Mas getDouble() retorna 0 se o valor lido for, na verdade, SQL NULL. Então você ainda precisa chamar isNull. Você pode encapsular isso. Veja como:

public static Double getDouble (ResultSet rs, String columnName) {
    double d = rs.getDouble (columnName);
    if (rs.wasNull()) return null;
    else return Double.valueOf (d); 
}

LecoArax

Aproveitando, por que eu tenho que verificar se os campos de um formulário em uma página web são nulos antes de ir para a minha classe que tem o método de inserir no banco de dados, por exemplo?

obrigado

E

Porque você deve inserir apenas dados “limpos” e devidamente validados no banco de dados. Vai que alguma combinação dos campos nulos ou sujos acaba não sendo bloqueada por algum dos constraints da tabela…
EDIT - Agora entendi: de quem é a responsabilidade por verificar se os dados estão coerentes? Eu diria que a responsabilidade deve ser compartilhada - a página deve checar algumas coisas fáceis (como por exemplo se um dado numérico é mesmo numérico, ou se uma data que deveria ser preenchida foi preenchida) mas outras coisas devem ser rechecadas na sua classe que tem o método de inserção. É que pode ser que os dados não venham exatamente pela sua página mas por outro caminho, e é sempre bom checar tudo.

LecoArax

entendi, obrigado :smiley:

agora vou quebrar a cabeça para entender o que vc me explicou de encapsulamento… :shock:

entanglement:
Porque você deve inserir apenas dados “limpos” e devidamente validados no banco de dados. Vai que alguma combinação dos campos nulos ou sujos acaba não sendo bloqueada por algum dos constraints da tabela…
EDIT - Agora entendi: de quem é a responsabilidade por verificar se os dados estão coerentes? Eu diria que a responsabilidade deve ser compartilhada - a página deve checar algumas coisas fáceis (como por exemplo se um dado numérico é mesmo numérico, ou se uma data que deveria ser preenchida foi preenchida) mas outras coisas devem ser rechecadas na sua classe que tem o método de inserção. É que pode ser que os dados não venham exatamente pela sua página mas por outro caminho, e é sempre bom checar tudo.

joesmith

Ola pessoal… sou novo por aqui e sou novo em java tambem.

gostaria de saber se alguem me ensina a usar o guj pra postar uma divida… não sei fazer ainda (sou totalmente novato).

e gostaria de pedir ajuda no codigo abaixo:
public class BooleanScanner {

public static void main(String[] args) {
    Scanner entrada = new Scanner(System.in);
	boolean s  = true;   
	System.out.println("s para sim e n para não");
	s = entrada.hasNext(); 
	
	if (!s){
		System.out.println(" pode entar");    //PORQUE QUE AS RESPOSTAS ESTAO SEMPRE SAINDO "NON PODE ENTRAR?" 
                                                                           // EU QUERO QUE O CODIGO VERIFICA A SITUAÇAÕ.... SERA QUE EU VO TER QUE 
                                                                         // CRIAR OUTRA VARIAVEL?
		
	}else 
		System.out.println("non pode entar");
	}}
Criado 2 de novembro de 2010
Ultima resposta 2 de nov. de 2010
Respostas 9
Participantes 4