tenho um vetor de 10 posições, quero passar o conteudo para um outro vetor [6][5] até não sobrar mais posições vazias no vetor bidimensional, tentei de varias formas, me ajudem!
[code]public static final int LINHAS = 6;
public static final int COLUNAS = 5;
private String conteudo[][];
public static final String VAZIO = “V”;
public void limpar() {
for(int i = 0; i < LINHAS; i++)
for(int j = 0; j < COLUNAS; j++)
conteudo[i][j] = VAZIO;
}
public void gerar() {
limpar();
String n = “”;
String test[] = {“1”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”,“10”};
while(eVazio()){
o = 0;
for(int i=0; i < LINHAS; i++){
for(int j=0; j < COLUNAS; j++){
do{
conteudo[i][j] = test[o];
n += conteudo[i][j]+"\n";
o++;
}
while(o<10);
}
}
System.out.println(n);
}
public boolean eVazio()
{
for(int i=0; i<conteudo.length; i++){
for(int j=0; j<conteudo[i].length; j++){
if(conteudo[i][j].equalsIgnoreCase(VAZIO)){
return true;
}
}
}
return false;
} [/code]
Você pode resolver isso facilmente usando um for.
[code]
public class Exemplo {
public static final int LINHAS = 6;
public static final int COLUNAS = 5;
private String conteudo[][] = new String[LINHAS][COLUNAS];
public static final String VAZIO = "V";
public void limpar() {
for (int i = 0; i < LINHAS; i++)
for (int j = 0; j < COLUNAS; j++)
conteudo[i][j] = VAZIO;
}
public void gerar() {
limpar();
String test[] = {"1","2","3","4","5","6","7","8","9","10"};
int linha = 0;
int coluna = 0;
//Percorremos o vetor test
for (int i = 0; i < test.length; i++) {
conteudo[linha][coluna] = test[i];
coluna++; //Pulamos para próxima coluna
if (coluna == COLUNAS) { //Chegamos na última coluna? Pula uma linha.
coluna = 0;
linha++;
}
}
}
public void imprimir() {
System.out.println("Resultado:");
for (int i = 0; i < LINHAS; i++) {
System.out.println();
for (int j = 0; j < COLUNAS; j++) {
System.out.print(conteudo[i][j] + " ");
}
}
}
public static void main(String[] args) {
Exemplo exemplo = new Exemplo();
exemplo.limpar();
exemplo.gerar();
exemplo.imprimir();
}
}[/code]
faz um for pra percorrer o vetor, e utiliza 2 variaveis pra percorrer a matriz.
int linha = 0;
int coluna = 0;
for (int i = 0; i < vetor.length; i++)
{
matriz[linha][coluna] = vetor[i];
coluna++;
if (i % vetor[i].length)
{
linha++;
coluna = 0;
}
}
isso é só uma idéia.
Espero ter ajudado.
Abraços
Ok. Existe outra maneira de resolver esse problema, provavelmente muito mais rápida. Mas é menos trivial.
Envolve usar a função System.arrayCopy, do Java. Essa função copia uma matriz unidimensional dentro de outra.
Como ela usa cópia direta de memória, ela é muito mais rápida do que copiar com o for.
Podemos fazer assim:
[code]public void gerar() {
limpar();
String test[] = {"1","2","3","4","5","6","7","8","9","10"};
int ultIndice = 0; //Marca qual foi o último índice copiado
for (int linha = 0; linha < LINHAS; linha++) {
//Calculamos a posição para iniciar a leitura na matriz original
int posCopy = Math.min(COLUNAS, test.length - ultIndice);
//Fazemos a cópia da linha inteira usando array copy.
System.arraycopy(test, linha*COLUNAS, conteudo[linha], 0, posCopy);
//Calculamos o último índice copiado
ultIndice += posCopy;
//Se já copiamos tudo o que tínhamos para copiar, paramos o loop.
if (ultIndice == test.length)
break;
}
}[/code]
[quote=alanclic]
if (i % vetor[i].length)
[/quote]
Faltou igualar a zero:
if (i % vetor[i].length == 0)
Obs: Num no caso do C++ ou C, isso quase funciona. Bastaria negar a expressão:
if (!(i % vetor[i].length)) //Não funciona em java! Mas em C ou C++, 0 é falso e o resto é verdadeiro!
Ainda sim, como você já está controlando usando variáveis, acho preferível usar um if com ==, como eu fiz ali em cima, ao invés do operador de resto. O código fica mais claro.