[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?)]
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
entanglement
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>[]=newArrayList[3]();
E
entanglement
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
entanglement
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
entanglement
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.