Contador em java

6 respostas
N

tenho um problema de logica que é o seguinte:

Tenho uma lista de 32.000.00 caras (String). E quero criar uma segunda lista com 8 posiçoes desses caras. Até ai eu consegui

for(int x = 0 ; x < 8 ; x++){ blocoMontado.add(ips.get(x)); }

Onde o ips é a lista com os 30.000 caras.

Result :
Resultado ==> 10.168.0.1
Resultado ==> 10.168.0.2
Resultado ==> 10.168.0.3
Resultado ==> 10.168.0.4
Resultado ==> 10.168.0.5
Resultado ==> 10.168.0.6
Resultado ==> 10.168.0.7
Resultado ==> 10.168.0.8

Ate ai sussa. O problema é que executando o codigo outra vez , eu quero que ele me mostre o proximo bloco de 8 posição nesses 32.0000

Alguem manja como posso fazer isso ?

6 Respostas

C

cara eu nao entendi direito o q vc quer fazer?..

vc quer exibir os primeiros 8… depois os proximos 8 … e assim por diante… de 8 em 8???

L

Também não consegui entender.

O próximo bloco de 8 não vai ser retornado pelo for, com o incremento do x?

M

axo q isso resolve

for(int i = 0; i < 32.000.00; i+= 8){ int cont = 0; while(cont < 8){ blocoMontado.add(ips.get(i)); i++; cont++; } }

N

Eu quero que retorne os proximo 8 caras.

E sim o for que eu montei esta retornando 8 caras , mas os 8 primeiros e eu quero que toda vez que eu passar pelo for ele me retorn assim

8 cara 1 2 3 4 5 6 7 8
proximos caras - 9 10 11 12 13 14 15 16

e assim por diante.

Para simplificar :

Eu tenho uma lista de ips de 30.000 caras , eu preciso colocar um bloco de 8 posiçoes na base desses 30.000 caras.

toda vez que solicitar um novo servico eu preciso colocar mais um bloco de 8 caras que sejam os proximos que ja estao gravados na base

B

Primeiro você tem que saber que IPs são números 32 bits. xxx.xxx.xxx.xxx é só uma convenção para formatá-los (em base 256).

O IP 10.168.0.1 é a mesma coisa que 00001010 10101000 00000000 00000001 em binário, que é o número 178782209 em decimal.

Se a tua máscara de rede é /30, isso quer dizer que você tem 2^(32-30) ips por bloco para trabalhar, ou seja 4. O primeiro ip do bloco é reservado p/ a rede, e o último para o broadcast, deixando você somente com 2 ips liberados.

o primeiro ip do bloco é sempre módulo 2^(32-30), ou seja, o resto da divisão inteira por 4 é zero. O último é quando o resto da divisão é 2^(32-30)-1, ou seja, 3. Daí os blocos sempre começam com 0, 4, 8, 12, e os broadcasts, 3, 7, 11, 15…

Espero que dê p/ trabalhar com isso.

L

Eu não entendi perfeitamente… mais c vc quer, chamar 1 método… e ele executar para os 8 primeiros… e depois quando executar o mesmo método… ele fazer para os proximos 8… vc pode tentar assim

private cursor = 0;

public void proximosOito() {
	if (cursor +8 >= 32000) 
		throw new IndexOutOfBoundsException("Excedeu os 32000");
	for(int x = cursor ; x < cursor +8 ; x++){
		blocoMontado.add(ips.get(x));
	}
	cursor = cursor + 8;
}
Criado 22 de janeiro de 2009
Ultima resposta 23 de jan. de 2009
Respostas 6
Participantes 6