Java - cambiar los metodos for de como aesta a normal

 
Vista:

cambiar los metodos for de como aesta a normal

Publicado por carlos (25 intervenciones) el 19/01/2019 01:21:10
Buenas tengo que hacer unos ejercicios, un amigo me ha ayudado el problema es que el hace los for de una manera muy exatrña metiend dos puntos en medio por ejemplo for (Cliente cliente : clientes) {
entonces yo os dejo el eneunciado del ejercicio y los codigo que tengo y haber si porfavor me lo podeis simplifica los for (i=0; i<numelementos; i++) Suponiendo que es un for para recorrer un Array yo necesito la forma normal de los puntos y coma. primero porque me lo piden y 2º para enterarme porque si no nose como se hace
.
El problema esta en la clase inmobiliaria en los For. Por favor corregirme sobre lo ya escrito no me pongais otros codigo porque estoy emepzando y me pierdo
na empresa inmobiliaria tiene unas serie de clientes, los cuales pueden tener en venta una o más viviendas. Los datos que maneja en cada caso son:

Para las viviendas se guardan los datos de dirección del inmueble, código postal, tipo (casa, piso, local comercial, cochera), metros cuadrados y precio de venta. La empresa suponemos que tendrá un máximo de 100 clientes.
Para los clientes se guardan los datos de Nombre y apellidos, DNI, dirección, teléfono, localidad, código postal y la relación de las viviendas que tiene en venta, cuyo número será de un máximo de 10.
Crea una aplicación, modularizada adecuadamente, que permita, mediante un menú de aplicación, realizar las siguientes tareas:

Dar de alta clientes, con sus inmuebles asociados.
Buscar un cliente dado su DNI y, en caso de ser encontrado, mostrar sus datos e inmuebles en venta.
Borrar un cliente dado su DNI.
Listar los datos de aquellos clientes que tengan en venta inmuebles para un código postal dado, mostrando, a su vez, los datos de dichos inmuebles. Se deberá tabular correctamente este listado.
Salir de la aplicación.

os copio los datos clase clientes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
public class Cliente {
 
    private String nombre;
    private String apellidos;
    private String DNI;
    private String direccion;
    private String telefono;
    private String localidad;
    private String codigoPostal;
    private Vivienda viviendaVenta[];
    private int numElementos;
    private int maxViviendas;
 
    public Cliente(String nombre, String apellidos, String DNI, String direccion, String telefono, String localidad, String codigoPostal, Vivienda[] viviendaVenta, int numElementos, int maxViviendas) {
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.DNI = DNI;
        this.direccion = direccion;
        this.telefono = telefono;
        this.localidad = localidad;
        this.codigoPostal = codigoPostal;
        this.viviendaVenta = viviendaVenta;
        this.numElementos = numElementos;
        this.maxViviendas = 10;
    }
 
    public Cliente() {
        this.nombre = "";
        this.apellidos = "";
        this.DNI = "";
        this.direccion = "";
        this.telefono = "";
        this.localidad = "";
        this.codigoPostal = "";
        this.viviendaVenta = new Vivienda[maxViviendas];
        this.numElementos = 0;
        this.maxViviendas = 0;
    }
 
    public String getNombre() {
        return nombre;
    }
 
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
 
    public String getApellidos() {
        return apellidos;
    }
 
    public void setApellidos(String apellidos) {
        this.apellidos = apellidos;
    }
 
    public String getDNI() {
        return DNI;
    }
 
    public void setDNI(String DNI) {
        this.DNI = DNI;
    }
 
    public String getDireccion() {
        return direccion;
    }
 
    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }
 
    public String getTelefono() {
        return telefono;
    }
 
    public void setTelefono(String telefono) {
        this.telefono = telefono;
    }
 
    public String getLocalidad() {
        return localidad;
    }
 
    public void setLocalidad(String localidad) {
        this.localidad = localidad;
    }
 
    public String getCodigoPostal() {
        return codigoPostal;
    }
 
    public void setCodigoPostal(String codigoPostal) {
        this.codigoPostal = codigoPostal;
    }
 
    public Vivienda[] getViviendaVenta() {
        return viviendaVenta;
    }
 
    public void setViviendaVenta(Vivienda[] viviendaVenta) {
        this.viviendaVenta = viviendaVenta;
    }
 
    public int getNumElementos() {
        return numElementos;
    }
 
    public void setNumElementos(int numElementos) {
        this.numElementos = numElementos;
    }
 
    public int getMaxViviendas() {
        return maxViviendas;
    }
 
    public void setMaxViviendas(int maxViviendas) {
        this.maxViviendas = maxViviendas;
    }
 
    @Override
    public String toString() {
        return "Clientes{" + "nombre=" + nombre + ", apellidos=" + apellidos + ", DNI=" + DNI + ", direccion=" + direccion + ", telefono=" + telefono + ", localidad=" + localidad + ", codigoPostal=" + codigoPostal + ", viviendaVenta=" + viviendaVenta + ", numElementos=" + numElementos + ", maxViviendas=" + maxViviendas + '}';
    }
 
    /* comprobamos que hay sitio en en array, si hay se insertamos los datos y
    por cada vivienda que introduzcamos la variable numElementpos aumentara
    en uno */
    public void insertarVivienda(Vivienda v) {
        if (viviendaVenta[viviendaVenta.length - 1] == null) {
            viviendaVenta[numElementos + 1] = v;
            numElementos++;
        }
    }
}

clase vivienda
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
public class Vivienda {
 
    private String direccion;
    private String códigoPostal;
    private String tipo;
    private int metrosCuadrados;
    private int precioVenta;
 
    /* entiendo que una vivienda no te cuesta 30.000´25€ te cuesta numeros enteros y
    los metros cruadros lo mismo una vivienda no tiene 80´5 metros cuadrados o 80 o 81
        o eso creo*/
    public Vivienda(String direccion, String códigoPostal, String tipo, int metrosCuadrados, int precioVenta) {
        this.direccion = direccion;
        this.códigoPostal = códigoPostal;
        this.tipo = tipo;
        this.metrosCuadrados = metrosCuadrados;
        this.precioVenta = precioVenta;
    }
 
    public Vivienda() {
        this.direccion = "";
        this.códigoPostal = "";
        this.tipo = "";
        this.metrosCuadrados = 0;
        this.precioVenta = 0;
    }
 
    public String getDireccion() {
        return direccion;
    }
 
    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }
 
    public String getCódigoPostal() {
        return códigoPostal;
    }
 
    public void setCódigoPostal(String códigoPostal) {
        this.códigoPostal = códigoPostal;
    }
 
    public String getTipo() {
        return tipo;
    }
 
    public void setTipo(String tipo) {
        this.tipo = tipo;
    }
 
    public int getMetrosCuadrados() {
        return metrosCuadrados;
    }
 
    public void setMetrosCuadrados(int metrosCuadrados) {
        this.metrosCuadrados = metrosCuadrados;
    }
 
    public int getPrecioVenta() {
        return precioVenta;
    }
 
    public void setPrecioVenta(int precioVenta) {
        this.precioVenta = precioVenta;
    }
 
    @Override
    public String toString() {
        return "Vivienda{" + "direccion=" + direccion + ", c\u00f3digoPostal=" + códigoPostal + ", tipo=" + tipo + ", metrosCuadrados=" + metrosCuadrados + ", precioVenta=" + precioVenta + '}';
    }
 
}

clase inmobiliaria
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
public class Inmobiliaria {
    private Cliente clientes[];
    private int numElementos;
    private int maxClientes;
 
    public Inmobiliaria(Cliente[] clientes, int numElementos, int maxClientes) {
        this.clientes = clientes;
        this.numElementos = numElementos;
        this.maxClientes = 100;
    }
     public Inmobiliaria(){
         clientes = new Cliente[maxClientes];
         numElementos = 0;
         maxClientes = 0;
     }
 
    public Cliente[] getClientes() {
        return clientes;
    }
 
    public void setClientes(Cliente[] clientes) {
        this.clientes = clientes;
    }
 
    public int getNumElementos() {
        return numElementos;
    }
 
    public void setNumElementos(int numElementos) {
        this.numElementos = numElementos;
    }
 
    public int getMaxClientes() {
        return maxClientes;
    }
 
    public void setMaxClientes(int maxClientes) {
        this.maxClientes = maxClientes;
    }
    /* comprobamos que hay sitio en en array, si hay se insertamos los datos y
    por cada cliente que introduzcamos la variable numElementpos aumentara
    en uno */
    public void agregarCliente(Cliente c) {
        if (clientes[clientes.length - 1] == null) {
            clientes[numElementos + 1] = c;
		numElementos++;
        }
    }
 
    public Cliente encontrarPorDNI(String dni) {
        for (int i = 0; i < numElementos; i++) {
			if (dni.equals(clientes[i].getDNI()))
				return clientes[i];
		}
		return null;
    }
 
    public Cliente encontrarPorCp(int codigoPostal) {
        Cliente lista[] = new Cliente[numElementos];
 
		for (int i = 0; i < numElementos; i++) { --> recorremos el array
                       if (codigoPostal == v.getCódigoPostal()) { ..> si el codigo postal concuerda
			for (int j=0; j<*aqui no se que debo poner**;j++) { /*   recorrer el array que hay en la clase clientes para ver las viviendas que tiene
					return lista; -->  en teoria Listar los datos de aquellos clientes que tengan en venta inmuebles para un código postal dado, mostrando, a su vez, los datos de dichos inmuebles. Se deberá tabular correctamente este listado.
 
en la practica no se como hacer que un metodo devuelva 2 cosas
				}
			}
		}
		return null;
	}
    }
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

cambiar los metodos for de como aesta a normal

Publicado por Kabuto (1381 intervenciones) el 19/01/2019 14:44:11
Hola.
Primero quiero intentar aclararte en que consisten esos "for raros" que tu mencionas.

Supón que tenemos un array de nombres, por ejemplo...

1
String[] arrayConNombres;

Si queremos recorrerlo entero, de principio a fin, podemos usar un bucle for "normal". Ya que de forma sencilla nos va incrementando una variable que podemos usar como indice para señalar cada elemento del array.
Tan solo tenemos que indicarle hasta que valor queremos que incremente la variable, en este caso, le diremos que se detenga cuando hay alcanzado un valor igual a la longitud de nuestro array
Ejemplo:

1
2
3
4
for (int i = 0; i < arrayConNombres.length; i++)
{
    System.out.println("Nombre en la posicion " + i + ": " + arrayConNombres[i]);
}

Sin embargo, esto se puede hacer un poquito más simple usando lo que se llama un "for each", o como tú los llamas, un "for raro" ;-)
Estos for hacen prácticamente lo mismo, solo que no necesitamos declarar una varaible para usar como indice.
A este for lo que le damos es una variable del mismo tipo que los elementos del array que vamos a recorrer, y el solo se encargará de recorrer el array completo, metiendo cada elemento que encuentre en la variable que le hemos dicho.
Ejemplo:

1
2
3
4
for (String nombreTemporal: arrayConNombres)
{
    System.out.println("Nombre: " + nombreTemporal);
}

Usar un "for each" es cómodo cuando tenemos que recorrer un array de principio a fin porque su declaración es más simple.

Sin embargo, el "for normal" ofrece más posibilidades. Con un "for normal" podemos recorrer solo la mitad del array, o hacer que solo recorrar los elementos en las posiciones pares del array, o reutilizar la variable que usamos como indice para otras tareas, tal y como he hecho en el primer ejemplo que la he usado para indicar en pantalla en que posicion del array se encuentra el nombre que muestro en pantalla....

Así que elegir uno u otro, depende de si necesitamos hacer un recorrido del array completo y simple, o si en cambio necesitamos hacer algo un poco más avanzado.



Sobre como completar tu método este:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public Cliente encontrarPorCp(int codigoPostal) {
Cliente lista[] = new Cliente[numElementos];
 
for (int i = 0; i < numElementos; i++) { --> recorremos el array
if (codigoPostal == v.getCódigoPostal()) { ..> si el codigo postal concuerda
for (int j=0; j<*aqui no se que debo poner**;j++) { /* recorrer el array que hay en la clase clientes para ver las viviendas que tiene
return lista; --> en teoria Listar los datos de aquellos clientes que tengan en venta inmuebles para un código postal dado, mostrando, a su vez, los datos de dichos inmuebles. Se deberá tabular correctamente este listado.
 
en la practica no se como hacer que un metodo devuelva 2 cosas
}
}
}
return null;
}


Se supone que tienes que buscar clientes que coincidan con el codigo postal indicado y mostrar en pantalla sus datos. Así que habrá que recorrer el array de clientes declarado en la clase Inmobiliaria:

1
2
3
clase inmobiliaria
public class Inmobiliaria {
private Cliente clientes[];

Tal y como has declarado el método, parece que vas a retornar un único Cliente:
1
public Cliente encontrarPorCp(int codigoPostal) {

Pero no es eso lo que necesitas, de hecho, en principio no necesitas retornar nada. Te basta con que este método muestre en pantalla los datos de los clientes que coindicen con el CP, así que este método se puede declarar como "void" (no retorna nada) y que se encargue de mostrar en pantalla los datos.

Por cierto, en la clase cliente, el atributo CodipoPostal está declarado como tipo String. Así que el valor que pasamos entre paréntesis a este método, también ha de ser de tipo String, no de tipo int.


Te dejo como podría ser con un "for normal":

1
2
3
4
5
6
7
8
9
10
public void encontrarPorCp(String codigoPostal)
{
    for (int i = 0; i < clientes.length; i++)
    {
        if (clientes[i].getCodigoPostal().equals(codigoPostal))
        {
            //Aquí mostramos con System.out.print() datos del cliente y los datos de sus viviendas
        }
    }
}

Y aquí lo mismo, con un "for each":

1
2
3
4
5
6
7
8
9
10
public void encontrarPorCp(String codigoPostal)
{
    for (Cliente cli: clientes)
    {
        if (cli.getCodigoPostal().equals(codigoPostal))
        {
            //Aquí mostramos con System.out.print() datos del cliente y los datos de sus viviendas
        }
    }
}

EL proceso de búsqueda de clientes coincidentes es muy sencillo, lo único laborioso es mostrar sus datos: nombre, apellidos, etc.. y el de sus viviendas. Y además hacerlo tabulado para que quede un poco elegante.

Por cierto, ¿que pasa si no se encuentra ningún cliente que coincida con ese código postal?
El método no mostrará nada en pantalla, absolutamente nada... y eso no mola. El método debería informar si no ha encontrado nada, y para ello podemos añadir un variable boolean para controlar este asunto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void encontrarPorCp(String codigoPostal)
{
    boolean clientesEncontrados = false; //Si al final del metodo, sigue con valor false, habrá que informar de que no hay clientes con este CP
 
    for (int i = 0; i < clientes.length; i++)
    {
        if (clientes[i].getCodigoPostal().equals(codigoPostal))
        {
            clientesEncontrados = true; //Se ha encontrado al menos un cliente que listar en pantalla.
 
            //Aquí mostramos con System.out.print() datos del cliente y los datos de sus viviendas
        }
    }
 
    //Bucle for ha terminado, debemos comprobar si se encontraron clientes que listar en pantalla o no
    if (clientesEncontrados == false)
    {
        System.out.println("No se encontraron clientes que coincidan con el Codigo Postal: " + codigoPostal);
    }
}


Bueno, con esto creo que queda claro como ayudarnos con los distintos bucles for.

Apenas he mirado el resto del código que has puesto, si tienes más dudas sobre otro aspecto, preguntalo por aquí.
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

cambiar los metodos for de como aesta a normal

Publicado por Carlos (25 intervenciones) el 19/01/2019 15:02:12
Vale pero tiene un problema cada cliente tiene un array de propiedades hasta 10creo entonces no se si ese método muestra los datos de ese array
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

cambiar los metodos for de como aesta a normal

Publicado por Kabuto (1381 intervenciones) el 19/01/2019 19:54:44
Ese método encuentra clientes que coincidan con el código postal indicado. Punto.

Una vez encontrados, hay que mostrar los datos. Y sí, cada cliente tiene un array con objetos de la clase Vivienda. Así que para mostrar esas viviendas, se necesitará un segundo bucle que recorra dichas Viviendas.

Este segundo bucle for se podría poner anidado dentro del bucle que recorre clientes.
Además tanto la clase Cliente como la clase Vivienda, tienen sobreescrito el método toString(), así que mostrar dichos datos se hace rápido.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public void encontrarPorCp(String codigoPostal)
{
    boolean clientesEncontrados = false; //Si al final del metodo, sigue con valor false, habrá que informar de que no hay clientes con este CP
 
    for (int i = 0; i < clientes.length; i++)
    {
        if (clientes[i].getCodigoPostal().equals(codigoPostal))
        {
            clientesEncontrados = true; //Se ha encontrado al menos un cliente que listar en pantalla.
 
            //Mostramos datos del cliente
            System.out.println(clientes[i].toString())
 
            //Y ahora listamos sus viviendas. Para ello debemos recoger su array de Viviendas y recorrerlo con otro bucle
            System.out.println("\nEste cliente posee las siguientes viviendas:\n");
            Vivienda[] listaViviendas = clientes[i].getViviendasVenta();
            for (int j = 0; j < listaViviendas.length; j++)
            {
                System.out.println(listaViviendas[j].toString())
            }
        }
    }
 
    //Bucle for ha terminado, debemos comprobar si se encontraron clientes que listar en pantalla o no
    if (clientesEncontrados == false)
    {
        System.out.println("No se encontraron clientes que coincidan con el Codigo Postal: " + codigoPostal);
    }
}

Luego ya sería cuestión tal vez de retocar los métodos .toString() de estas clases para que los datos se presenten lo más legibles posibles en pantalla.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar