Manipulação de matrizes em JAVA

1 resposta
java
G

Bom dia, estou desenvolvendo um sistema bem simples de estoque onde os itens serao armazenados em uma matriz segue codigo:

package main;

import java.io.Console;
import java.util.Arrays;
import java.util.Scanner;

public class IncluirItem{
	public static void main(String[] args) {
		String[][] itens = new String[2][5];
		String[] campos = new String[7];
		int opcao = 0;
		int remover;
		int verificar = 0;
		int adcionar = 0;
		int tamanho = 2;
		
		Scanner sc = new Scanner(System.in);
		
		campos [1] = "Nome";
		campos [2] = "Codigo de barras";
		campos [3] = "quantidade";
		campos [4] = "validade";
		campos [5] = "data de entrada";
		
		do {
			System.out.println("\n\n### Sistema de estoque - simplificado ###");
			System.out.println("=========================================");
			System.out.println("      |     1 - Adcionar itens   |");
			System.out.println("      |     2 - Excluir itens    |");
			System.out.println("      |     3 - Mostrar itens    |");
			System.out.println("      |     0 - Sair             |");
			System.out.println("=========================================\n");
			
			System.out.println("Escolha uma opcao: ");
			opcao = sc.nextInt();
			System.out.print("\n");
			
			switch (opcao) {
			case 1:
				System.out.println("Cadastro de itens: ");
				//Adciona itens 
				for (int i = 0; i <2; i++) {
					System.out.println("Adcionar item? ");
					System.out.println("1 para sim \n2 para nao: ");
					adcionar = sc.nextInt();
					if (adcionar == 1) {
						System.out.printf("%d. item \n", (i+1));
						verificar = verificar + 1;
						for (int j=0; j < 5; j++) {	
							System.out.printf("%s ", campos[j+1]);
							System.out.printf("= ", i,(j+1));
							itens[i][j] = sc.next();
							
						}
						System.out.printf("\n");
					}
					else {
						break;
					}
				}
					
				break;
			case 2:
				//Remove itens
				System.out.println("Exclusao de itens: ");
				if(verificar > 0) {
					for (int i = 0; i <2; i++) {	
						System.out.printf("%d. item \n", (i+1));
						System.out.printf("ID do produto= 00%d \n", (i+1));
						System.out.printf("\n");
					}
				}
				else {
					System.out.println("Nenhum item listado!");
				}
				System.out.println("\nEscolha o numero do item a ser removido: \n");
				remover = sc.nextInt();
				for (int i = 0; i <2; i++) {
					if(remover == 2) {
					itens[i] = itens[i-1];
					}
				}
				break;
			case 3:
				//Mostra itens
				if(verificar > 0) {
					
						for (int i = 0; i <2; i++) {	
							if (verificar == 2) {
							System.out.printf("%d. item \n", (i+1));
							System.out.printf("ID do produto= 00%d \n", (i+1));
							for (int j=0; j < 5; j++) {	
								System.out.printf("%s ", campos[j+1]);
								System.out.printf("= %s \n", itens [i][j]);
							}
							System.out.printf("\n");
						}
						else {
									itens = Arrays.copyOf(itens, tamanho - 1);
									verificar = 0;
									System.out.printf("%d. item \n", (i+1));
									System.out.printf("ID do produto= 00%d \n", (i+1));
									for (int j=0; j < 5; j++) {	
										System.out.printf("%s ", campos[j+1]);
										System.out.printf("= %s \n", itens [i][j]);
									}
									System.out.printf("\n");
									break;
							}
					}
				}
				else {
					System.out.println("Nenhum item listado!");
				}
				
				break;
			default:
				System.out.println("Opção Inválida!");
				break;
			}
		} while(opcao != 0);
	}
}

Minha duvida é a seguinte, eu quero excluir uma posicao da matriz, exemplo: registrei dois itens, na coluna um e coluna dois da matriz e gostaria de remover a coluna um da lista, como realizo essa função, e outra coisa, eu gostaria de quando eu inserisse pela segunda vez algum item a matriz começasse na proxima possicao vazia, atualmente se eu pedir para inserir um novo item a matriz começa da primeira posicao e assim apaga os elementos ja inseridos.

1 Resposta

T

Este é um exercício ou algo que você está estudando por conta, certo? Duas perguntas:

  • você pode usar estruturas como ArrayLists ou tem que fazer tudo usando vetores comuns?
  • em vez dessa complicação toda de usar arrays de string, por que você não cria uma classe Produto e transforma seu vetor/matriz em um vetor de Produto?

Basta mover todos os elementos subsequentes ao elemento a ser removido uma posição para baixo no vetor/matriz. Por exemplo, se a matriz tem 5 elementos e o elemento 3 é removido, você move o elemento 4 para a posição 3 e o elemento 5 para a posição 4.

Use um índice para indicar qual a posição livre atualmente, começando do zero. Se um elemento for inserido, incremente esse índice. Se um elemento for removido, você decrementa esse índice.

Abraço.

Criado 6 de julho de 2020
Ultima resposta 6 de jul. de 2020
Respostas 1
Participantes 2