[Resolvido]Matriz Dinamica com uma de suas dimensões fixa!

9 respostas
AAWeihermann

Olá pessoal do GUJ! Estou com um problema em realizar uma pequena matriz dinamica. O que estou querendo realizar é o seguinte:

  • A matriz será do seguinte formato: "int[][] matriz = new int [(aqui havera um numero fixo, exemplo 3)][(E aqui eu gostaria que fosse de modo dinamico, como se fosse um Arraylist aqui, é possivel?)]

Aguardo respostas… =P

9 Respostas

E
int x = ...;
int[][] matriz = new int[3][x];

Qual é a dificuldade? O único problema é que matrizes não são ArrayLists, e na hora que você definiu que x é 100 (por exemplo), a matriz continuará a ser 3 por 100 durante toda a sua vida útil, a menos que você fique alocando linhas com tamanhos diferentes de 100 depois da criação da matriz.

E

De modo geral, a menos que você saiba o que está fazendo, matrizes multidimensionais não são soluções adequadas para problemas do dia-a-dia.

Como você deve ter percebido, a maior dimensão que você consegue usar em uma matriz é 3 (por exemplo, um workbook do Excel. )

AAWeihermann

A ideia é boa, mas x indicado seria uma constante, certo? gostaria que no momento que eu colocar um objeto dentro da matriz sofra mudança na segunda dimensão.

Ex.:

No inicio a matriz é 3/0, assim que for adicionado um objeto, ela deve sofrer uma mudança para 3/1, quando adicionar outro objeto, vire 3/2, e assim por diante.
E depois quando remover algum objeto, ela deve diminuir. No momento ela esta 3/2, quando retirar um objeto, deve ficar 3/1.

drigo.angelo

Até onde eu sei não tem como fazer isso em Java.

Talvez faça um array de objetos do tipo ArrayList ou algo assim, ex:

ArrayList<int>[] = new ArrayList[3]();
E

Sei - você quer criar uma matriz esparsa, é isso?

Nesse caso, é melhor estudar como é a melhor forma de acessar e criar matrizes esparsas. Dica: não é através de matrizes multidimensionais, que não são a forma mais adequada de fazer isso em Java.

Procure por “matriz esparsa java” ou “sparse matrices Java”.

Um exemplo : veja esta resposta aqui no Stack overflow:

Veja a resposta com 20 pontos - ela é uma resposta muito boa.

drigo.angelo

Ou para fazer desse jeito que você está falando você teria que criar outra matriz, do tamanho que você quer, copiar os valores da primeira + o valor novo para essa nova matriz e então destruir a primeira.

Mas isso tem vários problemas como complexidade (e consequentemente manutenibilidade) e performance. A não ser que você esteja em um ambiente com muitíssimo pouca memória (e talvez ainda assim) eu diria que não vale a pena fazer isso.

Qual o contexto desse problema? Talvez possamos pensar em alguma solução melhor.

E

Um exemplo de matriz esparsa é realmente uma planilha Excel. Como você deve ter descoberto, uma planilha Excel pode ter milhões de linhas e milhares de colunas, mas você nunca usa todas elas. Se uma célula está vazia, ela realmente não ocupa espaço.

AAWeihermann

Muito Obrigado entanglement, e drigo.angelo. A resposta de voces ja estão dando uma ajuda em como posso resolver esta questão. Vou pesquisar mais sobre a matriz esparsa e voces conseguiram captar um pouco da ideia, a planilha excel é um bom exemplo =).

drigo.angelo: Sou iniciante com programação Java, sou aluno de Sistemas de Informação e ainda estou começando (2º Período). Para aperfeiçoar as hailidades em programação, estou desenvolvendo um jogo simples de RPG, onde há historia, combates, historias, combates, e … por ai vai, Hahaha. E minha duvida surgiu, como vou fazer uma mochila no qual seja divido por categorias, porém não precise criar uma matriz de valores estraordinários… Por exemplo, 1000, ou algo desse genero.

E

No seu caso (mochila) a estrutura de dados mais adequada provavelmente não será uma matriz (como eu disse, normalmente só se usam matrizes em certos casos), e sim um Map.

Criado 11 de julho de 2013
Ultima resposta 12 de jul. de 2013
Respostas 9
Participantes 3