Metodo parece certo mas da erro!

pessoal, to no netbeans e montei esse metodo, mas ele fica dando erro

o erro é: “missing return statement”

que caca que eu fiz???
Valeu a ajuda, pessoal!!!
Grande abraço a todos!!
Horácio

Seu método pede que você retorne um int,
mas você não esta retornando nada…

se você não quiser retornar nada é só troca o int
por void assim

public void Inf()…

ou retorna um int no seu método

Boa noite, a excessão está ocorrendo pois este método deve ter um retorno do tipo int, para isto basta colocar

return <O que é para retornar>;

ou na declaração do método tire o int, e coloque void, fazendo com que a função não tenha retorno.

 public Inf() {
        if (dia < 10) {
           //
            System.out.println("ja passamos o dia 10");
        } else {
             System.out.println("estamos antes do dia 10");
        }
    }

eu deixei como publica mesmo…e funcionou…mas tá certo, ou é melhor lançar um void???o que vocês acham?

[quote=horacio] [code]
public Inf() {
if (dia < 10) {
//
System.out.println(“ja passamos o dia 10”);
} else {
System.out.println(“estamos antes do dia 10”);
}
}

[/code]
eu deixei como publica mesmo…e funcionou…mas tá certo, ou é melhor lançar um void???o que vocês acham?[/quote]

Todo método deve ter um retorno, mesmo que ele seja do tipo void.

O único método que não tem retorno de nenhum tipo é o construtor da classe.
Se sua classe se chama Inf, então vai funcionar, pq o compilador vai interpretar o método como sendo o construtor da classe, mas se sua classe não se chama Inf, então não será possível a compilação da classe.

tá…tanto a classe quanto o construtor chamam Inf…esse contrutor tem um retorno do tipo public…para testar tirei o public e rodou…mas tá certo então, não é? (o funcionamento em si, prova isso, mas já vi muitacoisa funcionar bem inicialmente e depois pifar…rsrs)

pessoal, outra coisa, abusando um pouco da boa vontade…
voltando ao metodo

   public Inf() {
        if (dia < 10) {
           //
            System.out.println("ja passamos o dia 10");
        } else {
             System.out.println("estamos antes do dia 10");
        }
    }

o if/else não tá funcionando direito… sempre mostra “ja passamos o dia 10” o que tá errado???

Veja bem, usar ou não public, não tem nada haver com tipo de retorno.

public ou sem public(conhecido como default) são modificadores de acesso.

Posta toda a sua classe para ver o que vc está fazendo.

Como eu já disse, sem um tipo de retorno(void, int, String, char entre outros) e o mesmo nome da classe é construtor.

[quote]tanto a classe quanto o construtor chamam Inf…esse contrutor tem um retorno do tipo public[/quote] public como eu já disse não é retorno e modificador de acesso.

segue a classe conforme pedido!!

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package olamundo;

public class Inf {

public int dia;

public Inf() {
    if (dia > 10) {
       //
        {System.out.println("ja passamos o dia 10");}
    } else {
        {System.out.println("estamos antes do dia 10");}
}
}

public int getDia() {
    return dia;
}

public void setDia(int dia) {
    this.dia = dia;
}

}
[/code]
:smiley:

[quote=horacio]tá…tanto a classe quanto o construtor chamam Inf…esse contrutor tem um retorno do tipo public…para testar tirei o public e rodou…mas tá certo então, não é? (o funcionamento em si, prova isso, mas já vi muitacoisa funcionar bem inicialmente e depois pifar…rsrs)

pessoal, outra coisa, abusando um pouco da boa vontade…
voltando ao metodo

   public Inf() {
        if (dia < 10) {
           //
            System.out.println("ja passamos o dia 10");
        } else {
             System.out.println("estamos antes do dia 10");
        }
    }

o if/else não tá funcionando direito… sempre mostra “ja passamos o dia 10” o que tá errado???[/quote]

O acesso do método é [color=blue]public[/color] (como todo construtor deve ser) , o nome do método construtor sempre é igual o nome da classe lembre de como se instância a classe:

Inf instancia = new Inf();

Inf() é o método construtor;
quando não se coloca nenhum tipo de acesso a esquerda do método ele toma como padrão o acesso [color=blue]protected[/color], que significa que só é acessível dentro do mesmo pacote.

e a forma correta do if/else é:

   public Inf() {
        if (dia > 10)
            System.out.println("ja passamos o dia 10");
        else if (dia < 10)
             System.out.println("estamos antes do dia 10");
        else
             System.out.println("estamos no dia 10");
    }

lembre-se que o [color=blue]else[/color] significa [color=red]senão[/color] então se o dia não é maior que 10 ou ele é menor que 10 ou igual a 10!

Quando não se especifica um modificador de acesso, é usado o modifcador default, que indica visibilidade apenas dentro do pacote, como você disse. Porém o modificador protected, além de dar visibilidade dentro do pacote, dá visibilidade para as classes filhas, mesmo que estejam em outros pacotes.

horacio,

O construtor é executado quando usamos new para instanciar um objeto.

Inf objeto = new Inf(); // Sempre que um objeto Inf for instanciado, o construtor será executado.Basicamente, ele serve para construir o objeto, portanto é interessante inicializar as variáveis de instância, mas não realizar uma tarefa, como verificar se a data é menor que tal dia e exibir ao usuário. Para esta executar tarefas, existem os métodos.

Quando não se especifica um modificador de acesso, é usado o modifcador default, que indica visibilidade apenas dentro do pacote, como você disse. Porém o modificador protected, além de dar visibilidade dentro do pacote, dá visibilidade para as classes filhas, mesmo que estejam em outros pacotes.[/quote]
Obrigado pelo esclarecimento Eric e se ele utiliza o modificador default, não existe palavra reservada para esse modificador de acesso?

Não tem uma palavra reservada para ele. Ficou estranho por eu ter dito “usar o modificador default”. Na verdade, o acesso default é apenas a ausência de um modificador: http://download.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

O que ocorre é que por “default” (padrão) os métodos, atributos, etc, possuem visibilidade apenas dentro do pacote onde está a classe. Se quiser mudar este comportamento, pode usar um modificador de acesso (public, protected ou private). No caso da classe (com exceção das classes internas), só é permitido o acesso default ou o uso do modificador public.

em primeiro lugar, obrigado pelas resposta, pessoal!!!
seguinte, eu não entendi uma coisa:

qual a diferença de um construtor para um metódo???
por exemplo

public teste(){
operações lógicas e afins
}

isso é um construtor…e um metodo???desculpem a tremenda ignorância do que vou perguntar, mas os dois não são a mesma coisa?

Oi horacio,

Da uma olhada aqui:http://www.tiexpert.net/programacao/java/metodo-construtor.php

http://www.tiexpert.net/programacao/java/classes-abstratas.php

[quote]qual a diferença de um construtor para um metódo???
por exemplo

public teste(){
operações lógicas e afins
}

isso é um construtor…e um metodo???desculpem a tremenda ignorância do que vou perguntar, mas os dois não são a mesma coisa?[/quote]

Bom, o método construtor serve para você ter acesso a variáveis de instância e a métodos através de uma instância da classe. Dentro da própria classe você tem acesso a todas as variáveis e a todos os métodos e por tanto, não precisa usar o construtor para isso. Porém, se dentro da classe você tentar usar algum método ou variável de instância a partir de um método statico, então você vai precisar de uma instância da classe, e esse acesso acontece graças ao construtor.

Por isso não se usa lógica em construtores, e sim em métodos.

[code]
public class OlaMundo {
//variavel de instancia
private int dia;

//construtor padrão
public OlaMundo() {
}

//construtor sobrecarregado 
public OlaMundo(int dia) {
	this.dia = dia;
}

//método
public void testaDia(int dia) {
	if (dia > 10) {
		System.out.println("ja passamos o dia " + dia);
	} else if (dia < 10)  
		System.out.println("estamos antes do dia " + dia);  
	else {
		System.out.println("estamos no dia " + dia);  
	} 
}

//método statico
public static void main(String[] args) {
	//dentro de um método estático, precisamos de uma instancia da classe
	//para ter acesso a seus membros e atributos que não são estaticos
	
	//Criando a instancia pelo construtor padrão
	OlaMundo o1 = new OlaMundo();
	o1.testaDia(10);
	//como dia não foi inicializada, vai exibir seu valor padrão que para int é zero
	System.out.println("Hoje é dia " + o1.dia);
	
	//Criando a instancia pelo construtor sobrecarregado
	//passa para a variavel dia um valor direto pelo construtor.
	OlaMundo o2 = new OlaMundo(20);
	System.out.println("Hoje é dia " + o2.dia);
}

}[/code]

Seria interessante você procurar um bom livro sobre java para ler e tentar entender os conceitos do java.
Use a cabeça Java ou Java como programar, são 2 bons livros.

Um construtor é um método especial que constrói um objeto da classe e só pode ser chamado usando do operador [color=blue]new[/color], toda classe criada é um tipo para objeto e possui um método construtor, quando o método construtor não é escrito o compilador toma como padrão um método construtor vazio.
A sintaxe de um método construtor é de ter o mesmo nome da classe e não possui retorno, cada classe só possui um método construtor, valendo o uso de sobrecarga de método.

Um método é uma “ação” que pode ser executada por uma classe, você pode ter diversos métodos em uma classe com vários tipos de acesso e retorno, por exemplo:

Você tem uma classe chamada “Operacoes” que pode possui métodos soma, subtrai, divide, multiplica, etc…; mas que possui um único método construtor de nome Operacoes sem retorno que só pode ser chamado quando utiliza o operador [color=blue]new[/color] que reserva espaço de memória e retorna um endereço para o objeto do tipo Operacoes.

Recomendo a apostila da Caelum fj 11… leia com atenção e paciência.

AÊ… Post sensato, era o que era pra ter sido feito desde o início…

Dá pra perceber que nosso amigo tá MUITO zerado, mas que ele é um cara esforçado… Pow, dá um material pra ele ler e depois só vem com as dúvidas, agora fica cada um querendo explicar pra ele a sua maneira o que é um construtor, tipo de retorno, modificador de acesso… Aí é cruel, além de não aprender nada, o fórum tbm nem é pra isso…

Dá próxima vez que virem alguém com essas dúvidas, favor indicar logo a apostila ou um bom livro, porque essas dúvidas são um sinal de que nem o básico ele leu ainda…

Abs []