Porque declarou assim?

19 respostas
faicoxim
class dado
{
	public static void main (String args[])
	{
		int da = -1;
	
		for (int i=0; i<=6; i++)
		{
			for (int a=0; a<=6; a++)
			{
				da = (int)(1+Math.random()*9);
				
			}
			System.out.println(i + "=" + da);
		}
	}
}

Porque foi declarado da como -1

da = -1;

porque -1??????

19 Respostas

Lavieri
faicoxim:
class dado
{
	public static void main (String args[])
	{
		int da = -1;
	
		for (int i=0; i<=6; i++)
		{
			for (int a=0; a<=6; a++)
			{
				da = (int)(1+Math.random()*9);
				
			}
			System.out.println(i + "=" + da);
		}
	}
}

Porque foi declarado da como -1

da = -1;

porque -1??????

pergunta a quem fez o codigo!!! ahuahua

provavelmente pq o cara queria ter certeza que o valor iria ser alterado, e iniciou com um valor que tem certeza que nunca vai ocorrer, com -1 no caso. esse da pelo que vi, é uma variável que fica mudando de valor

nextuser

por nada

tinorberto

ele apenas inicializou a variavel como ele queria inicializar com um valor diferente de 0 pois 0 representa uma face do dado ele optou por -1 , mas isso não interfere em nada pois seu valou e modificado

dionat4n

Fui eu quem fiz isso no outro tópico.

Coloquei -1 para inicializar a variável pois as IDEs avisam ou dão erro quando uma variável a ser utilizada, ainda não inicializada que pode não ser atribuída.

Poderia ser atribuído qualquer valor na verdade. -1 é um número default para boa parte dos programadores para informar que o número não foi inicializado ou que está com algum erro, mas depende da aplicação, como sempre.

Lavieri
dionat4n:
Fui eu quem fiz isso no outro tópico.

Coloquei -1 para inicializar a variável pois as IDEs avisam ou dão erro quando uma variável a ser utilizada, ainda não inicializada que pode não ser atribuída.

Poderia ser atribuído qualquer valor na verdade. -1 é um número default para boa parte dos programadores para informar que o número não foi inicializado ou que está com algum erro, mas depende da aplicação, como sempre.

neste código em particular não faria diferença alguma não inicializar ali

class dado  
{  
    public static void main (String args[])  
    {  
        int da;  
      
        for (int i=0; i<=6; i++)  
        {  
            for (int a=0; a<=6; a++)  
            {  
                da = (int)(1+Math.random()*9);  
                  
            }  
            System.out.println(i + "=" + da);  
        }  
    }  
}
funciona perfeitamente ^^
jcmird

ISSO TÁ COM CARA DE POG (PROGRAMAÇÃO ORIENTADA A GAMBIARRA)
AHUAHAUAHA

dionat4n

Com certeza, apenas falei o que o sujeito queria, e já dei uma dica de programação, que é sempre inicializar variáveis com valores.

R

Não faz diferença alguma, pois o valor da variavel é setado antes de ser ligo, realmente nao faz diferença o valor inicial da variavel nesse caso…

dionat4n

Provando que a IDE (NetBeans) dá erro ou um warning quando a variável pode não ser inicializada:

Como vocês podem ver, a IDE não compila o código assim para bytecode!

Marcio_Nogueira

Quando não inicializamos uma variável do tipo int, por padrão em tempo de execução é atribuido o valor padrão ou seja 0. :wink:

B

Isso só vale para atributos. Variáveis locais sempre tem que ser inicializadas explicitamente.

dionat4n

Isso só vale para atributos. Variáveis locais sempre tem que ser inicializadas explicitamente.

É vero.

Lavieri

dionat4n:
Provando que a IDE (NetBeans) dá erro ou um warning quando a variável pode não ser inicializada:

Como vocês podem ver, a IDE não compila o código assim para bytecode!

realmente no mesmo escopo não compila… mais isso é pura burrice do compilador que não encherga que dentro do for a variável vai inicializar

B

Tá mais pra burrice do programador que não consegue seguir as regras de construção de uma linguagem.

Variáveis não existem fora do escopo delas, e o escopo delas começa no momento que são declaradas e vai até quando o bloco de código onde ela foi declarada termina.

Se elas continuassem a existir fora do escopo, o lixo em memória nunca seria recolhido.

R

bah, nao resisti, mas tá feio esse “compilador que não encherga”…

flww

Lavieri
Bruno Laturner:
Tá mais pra burrice do programador que não consegue seguir as regras de construção de uma linguagem.

Variáveis não existem fora do escopo delas, e o escopo delas começa no momento que são declaradas e vai até quando o bloco de código onde ela foi declarada termina.

Se elas continuassem a existir fora do escopo, o lixo em memória nunca seria recolhido.

não não... vc não entendeu, por exemplo
public class T {
	public static void main(String[] args) {
		int da;
		int teste = (int)Math.random()*10;
		if (teste > 5)
			da=1;
		else
			da=2;
		System.out.println(da);
	}
}
esse código compila ne ?? e ta claro, afinal a variável foi inicializada, ou no IF ou no ELSE .... e o compilador tem inteligencia suficiente para enchergar isso agora esse código abaixo não compila, pq o compilador não consegue enchergar que o else if ali abrange todas as possibilidades....
public class T {
	public static void main(String[] args) {
		int da;
		int teste = (int)Math.random()*10;
		if (teste > 5)
			da=1;
		else if (teste <= 5)
			da=2;
		System.out.println(da);
	}
}
assim como ele não ve que o código abaixo inicializa o DA sempre mesmo este estando dentro de um for, simplismente pq ele não interpreta o que ta dentro do () para saber c vai entrar ou não no escopo, mais a verdade é que sempre entra
public class T {
	public static void main(String[] args) {
		int da;
        for (int a=0; a<=6; a++){    
            da = (int)(1+Math.random()*9);    
                
        }    
        System.out.println(i + "=" + da);    
    }
}
dionat4n

O compilador tem que ser inteligente até certo ponto, porque o nível de complexidade é muito alto, quanto mais complexo mais suscetível a erro e mais demorado, ainda mais “just-in-time” como as IDEs fazem atualmente. Quem já fez a cadeira de compiladores na faculdade sabe do que eu estou falando.

M

Bruno Laturner:
Tá mais pra burrice do programador que não consegue seguir as regras de construção de uma linguagem.

Variáveis não existem fora do escopo delas, e o escopo delas começa no momento que são declaradas e vai até quando o bloco de código onde ela foi declarada termina.

Se elas continuassem a existir fora do escopo, o lixo em memória nunca seria recolhido.

:lol:

// sem mais comentários...
B

Bons exemplos Lavieri, entendi o que quis dizer.

Como o dionat4n disse, o compilador tem que ser inteligente até certo ponto, e mais, tem que ser inteligente com todos os tipos códigos que poderem ser compilados nele.

Eu diria que os desenvolvedores que fizeram o compilador até pensaram em testar todas as saídas possíveis de uma determinado caminho do programa, mas provavelmente não colocaram na versão final por causa do custo-benefício dele: o processo de compilação ficaria muito mais lerdo.

Quanto ao escopo, ainda tenho a mesma opinião. Ele precisa ser checado antes de outras checagens mais avançadas(e custosas). É mais fácil, é mais barato, e em todas as vezes gera um código correto. Então não adianta executar a análise de fluxo de execução se o programa não passou no teste de escopo primeiro.

Bem, se o compilador não é tão inteligente, por sorte temos outros programas que fazem esse tipo de análise mais avançado e custoso. Dê uma olhada no FindBugs, PMD, JLint.

Criado 12 de janeiro de 2009
Ultima resposta 13 de jan. de 2009
Respostas 19
Participantes 10