Array sem definir tamanho, tem como?

12 respostas
P

Boa tarde,
primeiramente gostaria de agradecer a todos que ajudam esse forum!
muito obrigado mesmo.

Vamos la, tenho que fazer um exercicio que transforma dec para binario. O lance eh o seguinte, gostaria que o programa coolocasse numa lista de array os resultados dos mods(%), porem eu tenho que definir um tamanho para o array antes. Soh que ai fica um problema, se ele nao eh usado ele se torna zero e atraplha meu calculo todo . e se o calculo realizado for maior que ele tmb me atraplah todo :T

import java.util.Scanner;


public class Cbin {
private int aux,count=0;
private int[] bin=new int[10];

public void recebeBin(){
	System.out.println("Digite um numero decimal");
	Scanner sc = new Scanner(System.in);
	int i = sc.nextInt();
	
  while(i/2!=0){
		count++;
		 this.aux=i/2;
		 i=this.aux;
		 bin[count]=i%2;  
	}
  
  System.out.println(bin[3]+""+bin[2]+""+bin[1]+""+bin[0]);
  /*
  for(int u=0;u<bin.length;u++){
	  System.out.println(bin[u]);
  }*/
}
}

Desdeja muito obrgado a todos!

12 Respostas

andrepestana

com array não tem como. Use um ArrayList!

List list = new ArrayList(); list.add("xyz"); list.add(42);

T

Primeiramente, você deve saber que um int pode ter até 32 bits, então a definição do seu array tem de conter 32 bits em vez de apenas 10. (Acho que você nunca deve ter testado com um número superior a 1024).

A seguir, para mostrar os bits, eu normalmente mostro todos os bits (mesmo os que vêm à esquerda e são zero). Se não quiser fazer isso, faça uma lógica para achar qual é o primeiro bit não-zero.

Se realmente quer saber quantos bits ocupa um número, desenterre aqueles livros de Matemática que falam sobre logaritmos:

Por exemplo, o logaritmo de 1024 na base 2 é 10 (ou seja, log(1024) / log (2) = 10). Então esse número irá ocupar 10 + 1 = 11 bits.

P

Opa, valeu andre e thingol!
suas mensagens me ajudaram bastante!

o problema que agora ele ta contando apenas 3 casas no array, vou ver o que houve aqui valeu :smiley:

B

Se for sem sinal e começar do zero, sim.

T

Se for sem sinal e começar do zero, sim.

OK.

P

Essa logica estaria certa?

public void ordenaMostra(){ for(int u=bin.size();u>-1;u--){ System.out.print(bin.get(u)); } } }

estava tentando fazer isso, porem ele me retorna esse erro:

<blockquote>Digite um numero decimal

12

Exception in thread “main” java.lang.IndexOutOfBoundsException: Index: 4, Size: 4

at java.util.ArrayList.RangeCheck(Unknown Source)

at java.util.ArrayList.get(Unknown Source)

at Cbin.ordenaMostra(Cbin.java:25)

at Pbin.main(Pbin.java:5)

</blockquote>

Necessito fazer de uma forma parecida como esse pois preciso ordenar os numeros em ordem invertida. Pois eh um exercicio baseado no calculo binario.
Valeu :smiley:

B

comece de bin.size() -1

P

que esquisito!
funcionou mas nao entendia a logica disso :S

o get.size me passa o tamanho total contando com 0 ? isso eh se ele tem 0123 espacos ele me passa que tem 4 espacos e nao 3 certo?

bom de qualquer forma muito obrigado!
ainda nao entendi mas valeu assim mesmo :D:D

B

A única linguagem que me lembro que o índice do último elemento é igual a quantidade de itens é Pascal.

Em Java, pelo menos, os índices começam em 0, e vão até quantidade - 1. E ao contrário como você fez, de qtde - 1 até 0.

P

Realmente agora compreendi o que eu fiz.
ficar o dia todo programando as vezes voce comete cada falha animal xT

valeu!

ralphsilver

pedrolima88:
que esquisito!
funcionou mas nao entendia a logica disso :S

o get.size me passa o tamanho total contando com 0 ? isso eh se ele tem 0123 espacos ele me passa que tem 4 espacos e nao 3 certo?

bom de qualquer forma muito obrigado!
ainda nao entendi mas valeu assim mesmo :D:D

o que acontece é que o size é contado a partir do 1 e a alocação começca do 0… se um vetor tem o tamanho 3 ele aloca a posição 0,1 e 2

claudneto

ralphsilver:
pedrolima88:
que esquisito!
funcionou mas nao entendia a logica disso :S

o get.size me passa o tamanho total contando com 0 ? isso eh se ele tem 0123 espacos ele me passa que tem 4 espacos e nao 3 certo?

bom de qualquer forma muito obrigado!
ainda nao entendi mas valeu assim mesmo :D:D

o que acontece é que o size é contado a partir do 1 e a alocação começca do 0… se um vetor tem o tamanho 3 ele aloca a posição 0,1 e 2

O size não conta a partir do 1…ele conta todos, mas conta com o 0…ou seja…o índice acaba ficando 1 a menos…

array[0] = 0; //índice = 0; posição = 1 array[1] = 1; //índice = 1; posição = 2 array[2] = 2; //índice = 2; posição = 3 array[3] = 3; //índice = 3; posição = 4

Acontece isso pq não existe a posição 0º! Só existe a partir do 1º…

Criado 20 de outubro de 2008
Ultima resposta 20 de out. de 2008
Respostas 12
Participantes 6