Comandos - JAVA - Dúvidas - 03.08

Bom dia,

Galera sou novo no GUJ, estou postando pela primeira vez aqui no forum, pelo que estou vendo a aliança aqui é bem forte, e com isso estou precisando da ajuda de vocês;

Estou começando o basico do basico em Java, e aos poucos estão surgindo dúvidas, poderim me ajudar…

Como e qual maneira eu posso aplicar os comandos abaixo;

  1. Double;

  2. Boolean;

  3. Long;

  4. Byte;

Galera também estou com dúvida, por que tenho que aplicar uma casting do lado da variavel, existem regras na hora da aplicação???

Fico Grato pela atenção.

Tenha um bom dia!!!


Alexandre Dantas

Double, Boolean, Byte e Long são classes empacotadoras de primitivos (Wrappers(acho que é assim que escreve)).
em Java você possui os tipos primitivos byte, char, short, int, long, float, double e boolean e para cada tipo existe uma classe empacotadora Byte, Character, Short, Integer, Long, Float, Double e Boolean.

Em Java tirando os primitivos e as Interfaces acredito que pode-se dizer que tudo são objetos (me corrijam se estiver errado :)) e quando você possui uma variavel de um tipo primitivo e nescessita usa-la como objeto é ai que os Wrappers então (veja collections depois)

...
int numero = 10; //Declara uma variavel do tipo int
List lista = new ArrayList(); //Cria uma ArrayList
lista.add(numero); //Adiciona o valor 10 ao ArrayList; porem o método add so aceita objetos e não primitivos, ai                //entra o Boxing

Exemplo Casting

[code]
int inteiro = 10; //declara um inteiro
short numero = (short)inteiro;
[/code/]

Descupe-me mas estou morrendo de sono agora e tenho de ir me deitar, qualquer coisa amanhã respondo com mais tempo mais pesquise sobre Boxing, UnBoxing, Wrappers, tipo primitivos, tipos por referencia e Casting

Leia também esse tópico:
http://www.guj.com.br/posts/preList/98808/532303.java#532303

Vocês são estudam no mesmo colégio? São da mesma sala?

[quote=dark_creator]Double, Boolean, Byte e Long são classes empacotadoras de primitivos (Wrappers(acho que é assim que escreve)).
em Java você possui os tipos primitivos byte, char, short, int, long, float, double e boolean e para cada tipo existe uma classe empacotadora Byte, Character, Short, Integer, Long, Float, Double e Boolean.

Em Java tirando os primitivos e as Interfaces acredito que pode-se dizer que tudo são objetos (me corrijam se estiver errado :)) e quando você possui uma variavel de um tipo primitivo e nescessita usa-la como objeto é ai que os Wrappers então (veja collections depois)

...
int numero = 10; //Declara uma variavel do tipo int
List lista = new ArrayList(); //Cria uma ArrayList
lista.add(numero); //Adiciona o valor 10 ao ArrayList; porem o método add so aceita objetos e não primitivos, ai                //entra o Boxing

Exemplo Casting

int inteiro = 10; //declara um inteiro
short numero = (short)inteiro;

Descupe-me mas estou morrendo de sono agora e tenho de ir me deitar, qualquer coisa amanhã respondo com mais tempo mais pesquise sobre Boxing, UnBoxing, Wrappers, tipo primitivos, tipos por referencia e Casting[/quote]

Creator… Valeu Brother…!! pela ajuda.!!

Realmente está um pouco difícil para interpretar o contexto, pois comecei a faculdade no começo do ano, terminei o básico em C++, primeiro semestre… Irei me esforçar… quero aprender JAVA!!! ^^

Brother, vou dar uma lida nos assuntos que me referiu… Estou estudando pela apostila do Colégio CAELUM,
pois dizem que é uma ótima escola voltada no ensino de JAVA.

Brown, no tópico acima citado, por que quando aplicou o Short, você indicou o Short novamente do lado da variável… é regra isso?

Eu também estava montando um programinha simples usando IF e ELSE, queria saber aonde eu errei… pois não estou conseguindo compilar…!!

Programa abaixo.

public class Aula02 {
		public static void main(String[] args) {
		
		// Declarando a idade
					
     	int idade=15;
     	
     	if (idade < 18);
     		{
     		System.out.println ("Pode Entrar");
     		}	
     	else
             { 
     		System.out.println ("Não entra *Maior de Idade* ");
             }		
	}
     	     	
}

… ! Não consegui Compilar (ECLIPSE) por causa do ElSE, agora não sei por que, pois acho que está normal.

Caso poder me dar uma dica, agradeço.

Grato pela atenção.


Alexandre Dantas

[quote=ViniGodoy]Leia também esse tópico:
http://www.guj.com.br/posts/preList/98808/532303.java#532303

Vocês são estudam no mesmo colégio? São da mesma sala?[/quote]

Vini… Valeu !! ^^

Obtive dificuldade na compreenção… =P Acho que eu tenho que estudar muito muito ainda!!!

Qual é a função do [b]ArrayList;[/b] List<Integer>; ??? O que eles fazem ???

Não consegui compilar suas linhas de comando o qual referiu para o nosso amigo Ediel, tentei
compilar no Eclipse, eu criei um .class, fiz errado nesse passo… tenho que criar um class ou um
interface…?

COMANDO QUE VOCÊ SE REFERIU EM OUTRO TÓPICO.

import java.util.ArrayList;  
   
   public class BoxingEquality {  
     public static void main(String[] args) {  
        int i = 2;  
        int j = 2;  
        ArrayList <Integer> list = new ArrayList<Integer>();  
        list.add(i);  
        list.add(j);  
        System.out.printf("It is %b that i ==j.\n",  
                          (i==j)); //(1)  
        System.out.printf("It is %b that " +  
                          "list.get(0) == list.get(1).\n",  
                          list.get(0)==list.get(1)); //(2)  
        System.out.printf("It is %b that " +  
                       "list.get(0).equals(list.get(1)).",  
                       list.get(0).equals(list.get(1))); //(3)  
      }  
   }   

============================================================
EU CRIEI DESTA FORMA -

public class TesteForun {

	public static void main(String[] args) {
		
		 import java.util.ArrayList;  
		   
		   public class BoxingEquality {  
		     public static void main(String[] args) {  
		        int i = 2;  
		        int j = 2;  
		        ArrayList <Integer> list = new ArrayList<Integer>();  
		        list.add(i);  
		        list.add(j);  
		        System.out.printf("It is %b that i ==j.\n",  
		                          (i==j)); //(1)  
		        System.out.printf("It is %b that " +  
		                          "list.get(0) == list.get(1).\n",  
		                          list.get(0)==list.get(1)); //(2)  
		        System.out.printf("It is %b that " +  
		                       "list.get(0).equals(list.get(1)).",  
		                     list.get(0).equals(list.get(1))); //(3)  
		
	}

}

Eu queria ver o que o seu programa fazia, mas não consegui obter sucesso!!! =/ provavelmente fiz algo errado.

Acho que estou com muitas dúvidas né !! ^^… Mais quero programar em Java se deus quizer!!!..

Valeu Vini, abraço.

Grato pela atenção,


Alexandre Dantas

Pessoal, cade vocês ? Podem me ajudar…

Please…

Oi, nós estavamos aproveitando o nosso domingo! :shock:
Que falta de educação é essa? Ficar insistindo é muito pouco ético, fazer postagens só para o seu tópico voltar ao topo da lista também.
Por favor, não repita atitudes como essa.
:wink:

Então, você criou um arquivo chamado BoxingEquality.java? Todo arquivo java deve ter o mesmo nome da classe. Faça isso e só então cole o código que eu postei no outro artigo.

Note que no exemplo que eu postei já existe um main. Se quiser fazer na sua própria classe, recorte só o corpo do main e cole no seu main. Colocar imports e definir outra classe dentro do main não vai dar certo mesmo.

A classe ArrayList é uma lista de objetos. Tal como um array, mas dinâmico (você não precisa se preocupar com o tamanho dele). Você verá isso ao estudar o tópico collections.

Agora… me diz uma coisa. Pelo seu grau de conhecimento, você estava mesmo perguntando sobre:

  1. Double;
  2. Boolean;
  3. Long;
  4. Byte;

Ou você queria dizer:

  1. double;
  2. boolean;
  3. long;
  4. byte;

Estou sentindo que era sobre o segundo caso. Note que as letras maiúsculas no início de cada palavra fazem toda diferença. A primeira lista se refere a classes do Java, que são usadas para representar valores numéricos. A segunda lista representa os tipos primitivos, que são tipos de variável que contém os valores básicos, e onde podemos fazer operações como soma, subtração, multiplicação, E, OU, etc…

Oi, nós estavamos aproveitando o nosso domingo! :shock:
Que falta de educação é essa? Ficar insistindo é muito pouco ético, fazer postagens só para o seu tópico voltar ao topo da lista também.
Por favor, não repita atitudes como essa.
:wink:

Então, você criou um arquivo chamado BoxingEquality.java? Todo arquivo java deve ter o mesmo nome da classe. Faça isso e só então cole o código que eu postei no outro artigo.

Note que no exemplo que eu postei já existe um main. Se quiser fazer na sua própria classe, recorte só o corpo do main e cole no seu main. Colocar imports e definir outra classe dentro do main não vai dar certo mesmo.

A classe ArrayList é uma lista de objetos. Tal como um array, mas dinâmico (você não precisa se preocupar com o tamanho dele). Você verá isso ao estudar o tópico collections.[/quote]

Vini, desculpe pelo transtorno… Realmente tomei uma atitute incoerente…e totalmente indevida. Valeu pela dica!!! Desculpe atrapalhar seu domingão também poxa…!!!

Referente ao erro de compilação, agora consegui notar aonde foi meu error!!! Valeu ! ^^

Referente ao assunto acima, realmente não sabia que tinha diferença entre MIUSCULOS e MINUSCULOS… A dúvida é, sobre o segundo…o qual citou, estou estudando Variaveis primitivas e Controle de fluxo, ou seja,
a dúvida é como aplicar estes comandos…

1) double;
2) boolean;
3) long;
4) byte;

Qual a maneira que eu uso eles, para soma?subtração?Qual sentido?..

Ex. do que estou querendo dizer é…

For -> Ele faz Loop

Do while -> Enquanto uma condição não for verdadeira ele repete o laço.

Tenha um bom começo de semana…

Grato pela atenção,


Alexandre Dantas.

A regra do casting é simples. Você sempre precisará fazer cast de um tipo mais preciso para um menos preciso.
Ou seja:

long -> int -> short -> byte

ou de um tipo com casa decimal para um sem casa decimal:
double -> long, int, short ou byte
float -> long, int, short ou byte

Isso porque nesse tipo de conversão existe chance de você perder dados. Aí ocorre coisas esquisitas como essa aqui:
http://www.guj.com.br/posts/list/98657.java

No sentindo inverso, não há necessidade de conversão. Afinal, você não perde dados tornando sua variável mais precisa.

Quanto a somas, qual é a sua dúvida?
Você pode fazer soma normalmente:

int x = 10 + 5; int y = x + x; int z = (y * 2) / x;
Tome cuidado com os tipos literais. Por exemplo, o valor 10, na equação acima é do tipo inteiro. O java é esperto o suficiente para te poupar do cast em atribuições diretas:
byte x = 10; //Ok, ao invés de inteiro, esse 10 é byte mesmo.

Quando uma expressão mistura mais de um tipo, o cast é feito aumaticamente para o tipo mais preciso. Se houver um número de ponto flutuante (double ou float), o cast é feito para o tipo de ponto flutuante.

Tome cuidado que o simples fato de você dividir não provoca casts. Então, a conta abaixo pode causar surpresa em alguns iniciantes:

double x = 9 / 2; System.out.println(x); //Imprime 4.0

9 é inteiro. 2 é inteiro. Não houve cast no resultado e, por ser inteiro, perdeu as casas demais. Contas de inteiros são admitidas pela linguagem. Para contornar o problema, faça o seguinte:

double x = 9.0 / 2; //Agora 9 é um double. 2 será promovido para double e o resultado será double.

Ou:

double x = 9 / 2.0; //Agora 2 é um double. 9 será promovido para double e o resultado será double.

Ou ainda:

double x = 9.0 / 2.0; //Ok, ambos double. Resultado double.

Cara, não entendi. Qual é o seu problema com o for e com o while?

Acho que o problema com o for e o while é que não devem ter aprendido fluxogramas na escola.

Parecem coisas jurássicas, os fluxogramas, mas são muito úteis para explicar as coisas.

Se aprendermos fluxogramas, descobriremos que tudo é uma variação de "if" e "goto" - já que é assim que funciona o computador.

Acho que primeiramente deveria ser ensinado o "if", o "switch", então o "do/while" (que é relativamente fácil de representar em fluxogramas"), então o "while" (que é um pouco mais difícil de representar), e por fim o "for", que é uma espécie de "while" metido a besta.

Se bem que, pelo meu estilo de pensamento, preferiria primeiramente aprender o "for" (com os parâmetros padrão, do tipo "for (int i = 1; i <= 10; ++i)" ), depois o "if", e então o "do/while" e por fim o "while", que acho terrivelmente difícil de entender logo de cara.

[quote=ViniGodoy]A regra do casting é simples. Você sempre precisará fazer cast de um tipo mais preciso para um menos preciso.
Ou seja:

long -> int -> short -> byte

ou de um tipo com casa decimal para um sem casa decimal:
double -> long, int, short ou byte
float -> long, int, short ou byte

Isso porque nesse tipo de conversão existe chance de você perder dados. Aí ocorre coisas esquisitas como essa aqui:
http://www.guj.com.br/posts/list/98657.java

No sentindo inverso, não há necessidade de conversão. Afinal, você não perde dados tornando sua variável mais precisa.

Quanto a somas, qual é a sua dúvida?
Você pode fazer soma normalmente:

int x = 10 + 5; int y = x + x; int z = (y * 2) / x;
Tome cuidado com os tipos literais. Por exemplo, o valor 10, na equação acima é do tipo inteiro. O java é esperto o suficiente para te poupar do cast em atribuições diretas:
byte x = 10; //Ok, ao invés de inteiro, esse 10 é byte mesmo.

Quando uma expressão mistura mais de um tipo, o cast é feito aumaticamente para o tipo mais preciso. Se houver um número de ponto flutuante (double ou float), o cast é feito para o tipo de ponto flutuante.

Tome cuidado que o simples fato de você dividir não provoca casts. Então, a conta abaixo pode causar surpresa em alguns iniciantes:

double x = 9 / 2; System.out.println(x); //Imprime 4.0

9 é inteiro. 2 é inteiro. Não houve cast no resultado e, por ser inteiro, perdeu as casas demais. Contas de inteiros são admitidas pela linguagem. Para contornar o problema, faça o seguinte:

double x = 9.0 / 2; //Agora 9 é um double. 2 será promovido para double e o resultado será double.

Ou:

double x = 9 / 2.0; //Agora 2 é um double. 9 será promovido para double e o resultado será double.

Ou ainda:

double x = 9.0 / 2.0; //Ok, ambos double. Resultado double.

Cara, não entendi. Qual é o seu problema com o for e com o while?[/quote]

Vini, valeu !!! =P

Gostei da dica, achei bem interessante o problema do nosso amigo na conversão…
pois você explicou com numeros binários!! que showw ! =P Legal.

Então, Valeu pela dica, mais é assim o double faz a mesma função que o Float ?

Enquanto ao For e IF os dois comando eu aprendi… Rs!!! Eu estava querendo dizer um exemplo de como poderia me explicar os assuntos, pois eu não estava achando outra maneira de explicar ^^

Ex. o BOOLEAN é parecido com o que ?

BYTE faz o que? Tem qual função no prgrama…

com o LONG você quiz dizer o que ? que tanto faz eu usar o int; short; byte a função é a mesma?

Nossa, o sono está pegando, rs ! Vamos dormir que amanhã tem mais!! rs ! boa noite Viny se cuida.

Valeuuuuuuu ! abraços.


Alexandre Dantas

[quote=thingol]Acho que o problema com o for e o while é que não devem ter aprendido fluxogramas na escola.

Parecem coisas jurássicas, os fluxogramas, mas são muito úteis para explicar as coisas.

Se aprendermos fluxogramas, descobriremos que tudo é uma variação de "if" e "goto" - já que é assim que funciona o computador.

Acho que primeiramente deveria ser ensinado o "if", o "switch", então o "do/while" (que é relativamente fácil de representar em fluxogramas"), então o "while" (que é um pouco mais difícil de representar), e por fim o "for", que é uma espécie de "while" metido a besta.

Se bem que, pelo meu estilo de pensamento, preferiria primeiramente aprender o "for" (com os parâmetros padrão, do tipo "for (int i = 1; i <= 10; ++i)" ), depois o "if", e então o "do/while" e por fim o "while", que acho terrivelmente difícil de entender logo de cara.
[/quote]

Thingol, boa noite!!!

Valeu por responder no tópico… ^^

Referente a dúvida, FOR e WHILE, uff graças a deus eu consegui fexar na facul… rs !! Thin eu não faltei em aula de fluxo grama não!! rs, pois Isso eu aprendi … ^^ Eu citei aquilo representando uma explicação… Do while e while for, eu sei… estou com dúvidas como eu posso usar aqueles comando… qual sentido em uma operação,
qual melhor forma de aplicala…

Tenha uma boa noite!!! se cuida grande abraço.


Alexandre Dantas

As variáveis tem um tamanho na memória. Esse tamanho, diz o quão grandes ou pequenos os valores das variáveis podem ser.

Uma variável byte, por exemplo, ocupa um único byte, (surpresa!!!), ou seja, oito bits. Por isso seus valores variam de -128 até 127 (eleve 2 a 8 e subtraia 1 = 255). É impossível guardar um valor fora desse intervalo em um único byte.

Uma variável short tem 16 bits, logo seus valores variam de 2^16-1=-32.768 até 32.767.
Um int, 32 bits, os valores variam de -2.147.483.648 até 2.147.483.647.
E um long tem 64 bits, os valores variam de 18.446.744.073.709.551.616 até 18.446.744.073.709.551.617.

No caso do double e do long, é basicamente a mesma coisa. O double tem o dobro de tamanho que um long, por isso, terá uma precisão muito maior, por suportará mais casas decimais.

A escolha dos tamanhos das variáveis tem algumas consequências:

  1. Afeta a precisão dos seus resultados e os intervalos máximos e mínimos que o seu programa trabalha;
  2. Envolve o consumo de memória do seu programa. Embora isso geralmente não seja um problema, exceto em aplicações muito específicas, como jogos de computadores;
  3. Pode ter impacto na performance do seu programa. Geralmente, variáveis com o tamanho da palavra do seu processador (32 bits na maior parte dos computadores, embora estão se tornando comuns os micros de 64), são processadas mais rapidamente.

A recomendação geral é que vc escolha int e double. Mas é muito bom saber que outros tipos existem. Aliás, alguns tipos também são adequados em situações específicas:

long -> Quando trabalhamos com o tempo em milisegundos;
byte[] -> Em manipulação de dados no formato binário;
float -> Em aplicações de computação gráfica. Usa-se para representar cores, posição dos vértices de uma figura, normais de luz, etc.

Entre outros exemplos…

[quote=ViniGodoy]As variáveis tem um tamanho na memória. Esse tamanho, diz o quão grandes ou pequenos os valores das variáveis podem ser.

Uma variável byte, por exemplo, ocupa um único byte, (surpresa!!!), ou seja, oito bits. Por isso seus valores variam de -128 até 127 (eleve 2 a 8 e subtraia 1 = 255). É impossível guardar um valor fora desse intervalo em um único byte.

Uma variável short tem 16 bits, logo seus valores variam de 2^16-1=-32.768 até 32.767.
Um int, 32 bits, os valores variam de -2.147.483.648 até 2.147.483.647.
E um long tem 64 bits, os valores variam de 18.446.744.073.709.551.616 até 18.446.744.073.709.551.617.

No caso do double e do long, é basicamente a mesma coisa. O double tem o dobro de tamanho que um long, por isso, terá uma precisão muito maior, por suportará mais casas decimais.

A escolha dos tamanhos das variáveis tem algumas consequências:

  1. Afeta a precisão dos seus resultados e os intervalos máximos e mínimos que o seu programa trabalha;
  2. Envolve o consumo de memória do seu programa. Embora isso geralmente não seja um problema, exceto em aplicações muito específicas, como jogos de computadores;
  3. Pode ter impacto na performance do seu programa. Geralmente, variáveis com o tamanho da palavra do seu processador (32 bits na maior parte dos computadores, embora estão se tornando comuns os micros de 64), são processadas mais rapidamente.

A recomendação geral é que vc escolha int e double. Mas é muito bom saber que outros tipos existem. Aliás, alguns tipos também são adequados em situações específicas:

long -> Quando trabalhamos com o tempo em milisegundos;
byte[] -> Em manipulação de dados no formato binário;
float -> Em aplicações de computação gráfica. Usa-se para representar cores, posição dos vértices de uma figura, normais de luz, etc.

Entre outros exemplos…[/quote]

Vini, mais uma vez agradeço pelas dicas… ótima dica!!! parabéns…

Eu vou dar uma estudada, pois ainda quero mexer com Java ^^, acho que não será impossivel !!!

Nossa, realmente está bem legal a função que me passou do Double e diferenças entre eles… bem explicado…
Eu não manjo ainda… As aplicações e sua diferença, mais quem sabe mais pra frente !!! ^^

Vini, você tem hotmail ? Desculpe más não sei se fazer esta pergunta no forum é proibido.
Por favor, caso for, me corrija…

Grato pela atenção, tenha um boa noite!!! Está ficando tarde já ! rs !

Abraços…


Alexandre Dantas