Saída de Programa, esclarecimento

class Echo {
    int count = 0;

    void hello() {
	System.out.println("hellooo... ");
    }
}

public class EchoTestDrive {
	public static void main(String[] args) {
		Echo e1 = new Echo();
		Echo e2 = e1;
		int x = 0;
		
		while (x < 4) {
			e1.hello();
			e1.count = e1.count + 1;
			if (x == 3) {
				e2.count = e2.count + 1;
			}

			if (x > 0) {
			e2.count = e2.count + e1.count;
			}
			x = x +1;
		}
		System.out.println(e2.count);
	}
}

a saída é 4x “hellooo…”

E no final printa 24.

Não consigo entender esse 24 na saída. Alguém tem como explicar?

1 curtida

Primeiro:

Coloque seu código nas normas que Java exige, exemplo:

public class Echo 
{
    public Echo() 
    {
        count = 0;
    }
    
    private int count;
    public int getCount() 
    {
        return count;
    }
    
    public void setCount(int count) 
    {
        this.count = count;
    }    
    
    public void hello() 
    {
	System.out.println("hellooo... ");
    }
}

Segundo

No caso especifico você criou um classe Echo e1 e criou outra classe pegando a cópia para a instância de e2, ou seja, tudo que muda em e1 reflete em e2 e vice-versa (referencia).

Código refatorado e padrão.

Echo e1 = new Echo();
Echo e2 = e1;

int x = 0;

while (x < 4) 
{
	
	e1.hello();
	e1.setCount(e1.getCount() + 1);
	
	if (x == 3) 
	{
		e2.setCount(e2.getCount() + 1);
	}

	if (x > 0) 
	{
		e2.setCount(e2.getCount() + e1.getCount());
	}
	
	x = x +1;
}

System.out.println(e2.getCount());

Isso que acontece é que dentro desse While os dados acabam somando e somando e no final dá esse valor 24 se você pudar valores dentro em rodar novamente vai mudar o valor para cima ou para baixo.

Use o breakpoint e debug seu código, verá passo a passo as mudanças dos valores das duas variáveis e1 e e2

1 curtida

Só uma pequena dúvida Moderator_Cia, o Java exige que a chave seja aberta depois dos paranteses de paramentros?

void go() 
{
   //codigo
}

Achei que fosse caso de preferencia pessoal. No NetBeans por exemplo, todas as classes nativas, a chave é aberta logo na mesma linha do paranteses:

void go() {
   //codigo
}

Aprendi assim, acho sem jeito essa outra forma.

2 curtidas

Olá,

Onde podemos encontrar as normas que a Java exige, por favor ?

Pois Code Conventions for the Java TM Programming Language está desatualizado desde 20 de abril de 1999.

Atenciosamente.

Caro @Jonas_B_a_r_r_o_s, você tem razão quando diz que o NETBEANS coloca um padrão de abertura de chaves na mesma linha. Eu particularmente não gosto, eu gosto de linha abre e a linha fecha, eu não sou desenvolvedor JAVA, eu sou desenvolvedor PHP e C# (arquitetura .NET) e fazemos nesse estilo, mas, queria dizer a pessoa que perguntou sobre os encapsulamentos dos campos, não deixar sem o tipo de acesso, que ao meu entender são mais uteis para ele começar com JAVA.

Exite nesse caso especifico de abertura de chaves várias nomenclaturas e vários padrões criados, mas, o importante disso tudo é:

Siga um padrão:

Exemplo: se você utiliza nomenclatura da ferramenta, utilize todo código na mesma nomenclatura, se você abre a chave na próxima linha faça isso em todo seu código. O que presenciamos em código de terceiro, é a falta de padrão, edentação falha etc …

Essa é a minha visão. Obrigado.

1 curtida

Links:

Todos esses links tem referencia a sua pergunta, estude, pesquise mais … !!!