Como você pode alterar o tamanho de uma matriz?

Como Você pode alterar o tamanho de uma matriz?

A resposta é um não. Em Java você não pode alterar o tamanho de um arranjo.

Mas antes de explicar por que, precisamos ser claros que isso significa alterar o tamanho de um arranjo.

Vamos ver A imagem a seguir: Diagrama de memória

Fonte: https://overiq.com/c-programming-101/the-realloc-function-in-c/

na imagem Ter no início um arranjo de 5 tipos de elementos integer Mas você quer aumentar 6 espaços de memória no arranjo. Em seguida, altere o tamanho de uma matriz significa simplesmente aumentar ou diminuir o número de espaços de memória que um arranjo possui. Em nosso bloco de memória upstream, o tamanho da matriz do para 11 elementos, no entanto, o mesmo bloco será preservado a memória Como após o último elemento de arranjo, não há espaço de memória ocupado, uma vez que, se isso acontecer, um novo bloco de memória deve ser reservado e, em seguida, os elementos do bloco antigo devem ser copiados para o novo.

. .. Para os raios mencionei todos os itens acima?

Por que alcançar o tamanho de um arranjo é necessário uma função / rotina que pode aumentar ou diminuir a quantidade de elementos de um bloco de memória. Em Java, não há tal método, no entanto, em outras linguagens de programação como linguagem C, se você tiver essa função e é chamada RealLoc.

Por que você não pode alterar o tamanho de uma matriz? / p>

Por que não tem uma função como realloc, caso contrário, se um arranjo puder ser redimensionado.

Eu também enfatizo que muitas pessoas acreditam que o redimensionamento de um arranjo significa criar um novo arranjo e copiar o elementos do arranjo anterior no novo, no entanto, que está incorreto. Um ótimo exemplo é o método redimensionado de C #, alguém pensaria que redimensionar um arranjo, mas na realidade não é assim, faz o mesmo procedimento que eu mencionei acima. O nome do método é enganoso.

Redimensionar um arranjo significa alterar o tamanho do arranjo, mas preservando o mesmo bloco de memória (onde os elementos da matriz são hospedados).

agora, um Solução simples para poder registrar nomes de pessoas inevitáveis do tamanho do arranjo, ele está usando a classe ArrayList e dessa maneira, você pode criar uma lista de tipo .

Por exemplo:

public class Program { public static void main(String args) { Scanner sc = new Scanner(System.in); String namePerson; List<String> listPerson = new ArrayList<String>(); int op; do { System.out.println("Ingrese un nombre:"); namePerson = sc.nextLine(); listPerson.add(namePerson); System.out.println("Desea salir? Presione (-1)"); op = sc.nextInt(); sc.nextLine();//para limpiar el buffer stdin if(op == -1) break; }while(true); for(int i = 0; i != listPerson.size(); ++i) { System.out.println(listPerson.get(i)); } }}

classe ArrayList implementou através de um arranjo vetorial / dinâmico, isto significa , que quando você cria um objeto do tipo ArrayList

Na verdade, o construtor desse tipo é responsável Para criar o arranjo dinâmico com uma capacidade inicial (código fonte do ArrayList) de 10 elementos, isso nos diz que internamente esta classe tem a referência de um arranjo para elementos X, mas não tem nenhum Referência de um objeto (por esse motivo se o método tamanho () será executado, ele deve resultar em 0 elementos).

No entanto, a classe ArrayList não aumenta o tamanho do arranjo dinâmico onde as referências de cada objeto são armazenadas, portanto, quando o número de objetos excede a capacidade máxima da lista, o que acontecerá é que a memória será ser reservado para um novo arranjo, no qual os elementos do bloco antigo serão copiados no novo bloco de memória.

Então, se o seu professor não permitir que você use a classe ArrayList, você pode criar sua própria classe em que é responsável por emular a implementação de um ArrayList.

Por exemplo:

class ArrayPerson{ private String person; private int capacity; private int count; public ArrayPerson() { person = new String; capacity = 10; } public ArrayPerson(int capacity) { this.capacity = capacity; person = new String; } //Obtiene la cantidad actual de objetos reservados en el arreglo public int getCount() { return count; } //Para obtener la referencia donde está el arreglo por completo public String getPersons() { return person; } //Para obtener la referencia de X objeto de tipo String del mismo arreglo public String getPerson(int index) { return person; } //Inserta una referencia de un objeto de tipo String en el arreglo public void add(String refPerson) { ++count; if(count > capacity) { capacity += 10; person = Arrays.copyOf(person, capacity); } person = refPerson; }}

Basicamente esta classe Quando você recebe para instantá-lo, dá a você a oportunidade de executar um construtor parametrizado ou padrão.

Se executamos o construtor parametrizado :

  • criará Um arranjo de objetos com um tamanho que dependerá do valor do parâmetro do construtor.

Se executarmos o construtor padrão (sem parâmetros):

  • Criará um arranjo de objeto com um tamanho padrão (com uma capacidade inicial máxima de elementos 10

agora vem a parte mais interessante, o Método add.Esse método basicamente será responsável por adicionar uma referência (endereço de memória) na posição X da matriz de objeto, no entanto, quando o número de objetos exceder a capacidade máxima de capacidade, uma nova capacidade será calculada e o método CopyOf da classe Arrays e o que este método faz é reservar memória para um novo arranjo de objetos, no qual ele copiará os elementos do bloco antigo no novo bloco de memória e o que esse método retorna é o Referência de um objeto do tipo String Em que a referência dos objetos (com um tamanho de elemento atualizado) será internamente.

A forma para usar esta classe Esteja:

public class Program { public static void main(String args) { Scanner sc = new Scanner(System.in); String namePerson; //Instaciamos la clase ArrayPerson ArrayPerson ap = new ArrayPerson(); int op; do { System.out.println("Ingrese un nombre:"); namePerson = sc.nextLine(); //Añadimos la referencia del objeto al arreglo ap.add(namePerson); System.out.println("Desea salir? Presione (-1)"); op = sc.nextInt(); sc.nextLine();//para limpiar el buffer stdin if(op == -1) break; }while(true); //Recorremos el arreglo con los elementos que tenga registrado el arreglo for(int i = 0; i != ap.getCount(); ++i) { System.out.println(ap.getPerson(i)); } }}

em java você não pode aumentar o tamanho do arranjo, mas se você pode reservar memória para um novo bloco de memória no qual copiamos os elementos do bloco antigo no novo bloco e para não estar fazendo Ou esse mesmo procedimento toda vez que você deseja inserir um novo elemento no arranjo, fazemos isso quando a quantidade de itens excede a capacidade máxima da matriz (como a classe faz ArrayList).

Recomendação:

É sempre bom usar as classes que pertencem à API Java, porque, ele economiza trabalho, no entanto, para fins acadêmicos, não seria errado implementar suas próprias classes.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *