Metodo parece certo mas da erro!

23 respostas
H

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

23 Respostas

nakai000

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

A

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.

H
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?

romarcio
horacio:
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?

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.

H

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???

romarcio

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.

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

H

segue a classe conforme pedido!!

/*
 * 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;
    }
}
:D
DavidUser

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???

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");
    }
DavidUser

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!

Eric_Yuzo

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.

Eric_Yuzo

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.

DavidUser

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.
Obrigado pelo esclarecimento Eric e se ele utiliza o modificador default, não existe palavra reservada para esse modificador de acesso?

Eric_Yuzo

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.

H

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?

Anime

Oi horacio,

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

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

romarcio
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?

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.
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);
	}
}

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.

DavidUser

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.

DavidUser

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

adriano_si

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 []

Lucas_Simonini

Exatamente, também recomendo a apostila FJ-11 da Caelum… É não adianta ficarmos explicando essas coisas, ele tem que vir com duvidas que não conseguiu entender mesmo já tendo estudado mais sobre o assunto! E pelamor nome de método NUNCA deve começar com letra maiúscula…

adriano_si

Lucas Simonini:
Exatamente, também recomendo a apostila FJ-11 da Caelum… É não adianta ficarmos explicando essas coisas, ele tem que vir com duvidas que não conseguiu entender mesmo já tendo estudado mais sobre o assunto! E pelamor nome de método NUNCA deve começar com letra maiúscula…

Ops… lhe recomendo tbm a apostila… porque o método em questão é um Construtor… heuehueheueheuehue

Lucas_Simonini

Esse método é o construtor? Acho que não amigo…Estou me referindo a ele… E quando eu disse que NUNCA é maiúsculo, me referia metodos convencionais e não ao Construtor… Construtor tem o mesmo nome da classe que conseqüentemente por padrão é maiúsculo.
Então corrijo o que disse… NUNCA MÉTODOS CONVENCIONAIS DEVEM COMEÇAR COM LETRAS MAIÚSCULAS… isso é padrão e foi assim que eu aprendi.
Equanto a apostila FJ11 eu ja vi, inclusive foi por ela que eu estudei java na Caelum.

A

Bom dia, o construtor possui o mesmo nome da classe, portanto quando você for instanciar um objeto da classe ele chamara automaticamente o construtor, quando você especifica um construtor o padrão deixa de existir, por exemplo se vc especificar um construtor com argumentos quando você tentar instanciar um objeto da classe terá que obrigatória-mente repassar argumentos, a não ser que você faça a sobrecarga deste construtor.

Criado 22 de dezembro de 2010
Ultima resposta 3 de jan. de 2011
Respostas 23
Participantes 9