how to use arraylist to set values from another class

0

I have a program that I have been modifying step by step to get data in an arraylist from another class. Something similar to how it is done with the get and set methods for attributes. However I fail to post the information in this arraylist. Can someone help me?

Product.java

import java.util.*;
public class Producto {
    private String categoria;
    private String categoriaMarca;
    ArrayList<String> categoriaProductos = new ArrayList<String>();
    public Producto(String categoria, String categoriaMarca) {
        this.categoria = categoria;
        this.categoriaMarca = categoriaMarca;
    }
    public String getCategoria() {
        return categoria;
    }
    public String getCategoriaMarca() {
        return categoriaMarca;
    }
    public String toString() {
        return "Categoria: "+this.getCategoria() + " /  Marca: " + this.getCategoriaMarca();
    }
    public void categoriaProductos() {
        categoriaProductos.add("Categoria: "+this.getCategoria() + " /  Marca: " + this.getCategoriaMarca());
    } 
} 

Application.java

import java.util.Scanner;
import java.util.*;
public class Aplicacion {
    public void catalogo() {
        Scanner scan = new Scanner(System.in);
        ArrayList<Producto> cProductos = new ArrayList<Producto>();
        ArrayList<Producto> catalogo = new ArrayList<Producto>();
        String categoria, producto, resp1;
        for(int i=0; i<2; i++) {
            System.out.println("Escriba la categoría del producto: ");
            categoria = scan.nextLine();
            System.out.println("Ingrese el producto: ");
            producto = scan.nextLine();
            catalogo.add(new Producto(categoria, producto)); 
        }
    }
    public void cProductos() {
        Scanner sca = new Scanner(System.in);
        ArrayList<Producto> cProductos = new ArrayList<Producto>();
        String resp1;
        System.out.println("Para ver el catálogo de productos, presione C ");
        resp1 = sca.nextLine(); 
        do {
            for (int f = 0; f < cProductos.size(); f++) {
                System.out.println(cProductos.get(f));
            }
        } while (resp1 == "C") ;
    }
    public static void main(String[] arg) {
        Aplicacion app1;
        app1 = new Aplicacion();
        app1.catalogo();
        app1.cProductos();
    }
}
    
asked by virtual8870 28.11.2017 в 16:42
source

1 answer

1

Hello I should tell you as a comment but the problem is basically the definition of how you want things to work. I recommend you take a look at the object-oriented design pattern and that you can separate the functionalities so that when programming the code is easier and cleaner to perform.

The solution of what you need is the following: Product Class:

import java.util.ArrayList;

public class Producto {
    private String categoria;
    private String categoriaMarca;

    ArrayList<String> categoriaProductos = new ArrayList<String>();

    public Producto(String categoria, String categoriaMarca) {
        this.categoria = categoria;
        this.categoriaMarca = categoriaMarca;
    }
    public String getCategoria() {
        return categoria;
    }
    public String getCategoriaMarca() {
        return categoriaMarca;
    }

    public void setCategoria(String categoria) {
        this.categoria = categoria;
    }

    public void setCategoriaMarca(String categoriaMarca) {
        this.categoriaMarca = categoriaMarca;
    }

    public ArrayList<String> getCategoriaProductos() {
        return categoriaProductos;
    }

    public String toString() {
        return "Categoria: "+this.getCategoria() + " /  Marca: " + this.getCategoriaMarca();
    }
    public void categoriaProductos() {
        categoriaProductos.add("Categoria: "+this.getCategoria() + " /  Marca: " + this.getCategoriaMarca());
    }

Application Class:

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    ArrayList<Producto> catalogo = new ArrayList<Producto>();

    public static void main(String[] args) {
        Main app1 = new Main();
        app1.catalogo();
        app1.cProductos();
    }

    public void catalogo() {
        Scanner scan = new Scanner(System.in);
        //ArrayList<Producto> cProductos = new ArrayList<Producto>();

        String categoria, producto/*, resp1*/;

        for(int i=0; i<2; i++) {
            System.out.println("Escriba la categoría del producto: ");
            categoria = scan.nextLine();
            System.out.println("Ingrese el producto: ");
            producto = scan.nextLine();
            //catalogo.add(new Producto(categoria, producto));
            if (catalogo.isEmpty()){
                catalogo.add(new Producto(categoria,producto));
                catalogo.get(0).categoriaProductos();
            }else{
                catalogo.get(0).setCategoria(categoria);
                catalogo.get(0).setCategoriaMarca(producto);
                catalogo.get(0).categoriaProductos();
            }

        }
    }
    public void cProductos() {
        Scanner sca = new Scanner(System.in);
        //ArrayList<Producto> cProductos = new ArrayList<Producto>();
        String resp1;
        System.out.println("Para ver el catálogo de productos, presione C ");
        resp1 = sca.nextLine();

        do {
            for (int f = 0; f < catalogo.size(); f++) {
                //System.out.println(catalogo.get(f));//esto solo retorna lo ultimo que guardaste

                for (int p = 0; p<catalogo.get(f).getCategoriaProductos().size(); p++) {
                    System.out.println(catalogo.get(f).getCategoriaProductos().get(p));
                }

            }
            //Esto es para ponerle fin al ciclo de lo contrario quedaria infinito
            System.out.println("Para ver el catálogo de productos, presione C ");
            resp1 = sca.nextLine();
        } while (resp1.equals("C"));//texto en java se compara con equals
    }
}
    
answered by 28.11.2017 / 19:39
source