Java - Cosas muy simples

 
Vista:
sin imagen de perfil
Val: 27
Ha aumentado su posición en 4 puestos en Java (en relación al último mes)
Gráfica de Java

Cosas muy simples

Publicado por Marco (14 intervenciones) el 01/12/2018 20:23:22
Buenas, hice una pregunta hace unos días y me ayudaron, ya más o menos lo tengo lo que pasa es que soy incapaz de crear objetos y ponerle los puntos.

Lo que tengo que hacer es:
Implementar una clase Punto, con dos atributos que contienen la coordenada X e Y.
• Tendrá los siguientes métodos:
desplazarXY, que suma a X e Y los dos valores recibidos.
desplazarX, que suma a X el valor recibido.
desplazarY, que suma a Y el valor recibido.
getX y getY que devuelve el valor del atributo correspondiente.
setX y setY, que cambia el atributo al valor que se le pase como parámetro.
toString, que devuelve un String con la cadena que queremos que se muestre.
sonIguales, que devuelve true si dos puntos están en las mismas coordenadas.
copia, que devuelve un nuevo punto con las mismas coordenadas que el original.

La cosa es que me he dado cuenta de que al parecer hay que hacer3 objetos punto, 1 con las cordenadas x,y otro con las cordenadas que le ponemos en el set y el tercero sería la copia, la cosa es que no tengo ni idea de como crear un punto asignandole las cordenadas x,y, pensé que sería "Punto p1 = New Punto(x,y);" pero no, prácticamente la idea es en el sonIguales comparar punto1 con punto2 y en copiar crear punto3 que sea idéntico a punto1.

Os mando una captura de lo que he hecho.
5c008cd7483f8-s_s_s
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.316
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Cosas muy simples

Publicado por Kabuto (919 intervenciones) el 01/12/2018 22:17:30
Hola.

Tu clase Punto no ha de tener ningún método main(). Tan solo ha representar un Punto en un espacio bidimensional.
Los atributos X e Y, NO SON PUNTOS, son las posiciones que ocupa el Punto en un hipotético eje de coordenadas.
Quizás esta imagen te ayude a entenderlo mejor:

image002

Para indicar donde está un Punto en un entorno bidimensional, necesitas indicar dos valores:
- su posicion en el eje X (el horizontal)
- su posicion en el eje Y (el vertical)

Así que estos son los únicos dos atributos que necesitas para tu clase Punto:
1
2
3
4
public class Punto {
 
	int x;
	int y;

OK, pasemos al constructor, o constructores.... porque a esta clase perfectamente podríamos ponerle dos constructores.
Uno que no reciba parametros e inicialice el punto en la posicion: 0, 0
Y otro, que sí reciba como parámetros unos valores para adjudicar a los atributos X e Y. De hecho, este constructor nos va a simplificar el método copia() que tenemos que elaborar posteriormente.

Podemos sin problema ponerle los dos constructores y luego usar el que nos de la gana para construir objetos Punto:

1
2
3
4
5
6
7
8
9
public Punto() {
		x = 0;
		y = 0;
	}
 
	public Punto(int x, int y) {
		this.x = x;
		this.y = y;
	}

Vale, los métodos.
Los que has puesto están bién, menos el de comparar Puntos, porque no tenías muy claro que es un Punto y que son las posiciones de un Punto.

Pero primero vamos a comentar un detalle del método que pide crear una cadena.
En el enunciado te dicen que lo llames toString(). Esto no es por capricho, esto es porque TODAS las clases en Java heredan de la superclase Object un método llamado toString() destinado precisamente a lo que nos piden: construir y devolver un String que represente los datos de nuestra clase.

Este método, somos libres de usarlo o ignorarlo, sin embargo es buena costumbre utilizarlo cuando necesitemos disponer de esta función que nos piden.
Para utilizarlo, basta con sobreescribirlo(override) para que construya el String a nuestro gusto:
1
2
3
4
@Override
	public String toString() {
		return "Posicion X = " + x + " Posicion Y = " + y;
	}


Ok, ahora vamos a ver el método sonIguales().
La intención de este método es que reciba otro objeto Punto y se compare con este objeto Punto en cuestión.
La comparación se hace mirando si los atributos X e Y de este Punto, coinciden con los del "Otro Punto".
En caso de coincidir, significa que son iguales, porque estarían situados en la misma posición del hipotético eje de coordenadas.
Si no coinciden, son distintos.
ESto lo podemos hacer así:

1
2
3
4
5
6
public boolean sonIguales(Punto otroPunto) {
		if (this.x == otroPunto.getX() && this.y == otroPunto.getY())
			return true;
		else
			return false;
	}

Hay que mencionar que, igual que con el método toString(), todas las clases heredan también de la superclase Object otro método llamado equals() destinado a ser sobreescrito para hacer esto mismo, para que nuestra clase sepa compararse con objetos de la misma clase y decidir si son iguales o no.

Puesto que el enunciado dice que lo llamemos sonIguales(), pues eso hacemos e ignoramos el método equals(). Pero lo normal, lo acostumbrado, sería utilizar equals() para realizar esta función.

Ahora el método copia(). Sencillísimo, nos valemos del constructor con parámetros para retorna un nuevo objeto con los mismos valores que el objeto actual.

1
2
3
public Punto copia() {
		return new Punto(x, y);
	}

Y bueno, con esto ya tendríamos la clase Punto preparada.

Ahora solo quedaría, preferiblemente en una clase separada llamada TestPunto o lo que sea, poner un main(), crear tres o cuatro objetos Punto y poner a prueba los metodos sonIguales(), to String(), copia(), etc....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 27
Ha aumentado su posición en 4 puestos en Java (en relación al último mes)
Gráfica de Java

Cosas muy simples

Publicado por Marco (14 intervenciones) el 02/12/2018 19:05:31
Hola, he hecho tal y como dices pero la copia me salta un error ( El constructor int, int esta indefinidio), y si puede responderme 2 dudas que tengo.
¿Como puedo guardar el valor de x e y en un objeto? de este modo meto el x e y en un objeto y en el otro objeto meto 2.
Yo lo que hizo usted en el segundo constructor lo hice en un método, ya que el primer método pone "desplazarXY, que suma a X e Y los dos valores recibidos. " así que supuse que era mejor así.

pspsps
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.316
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Cosas muy simples

Publicado por Kabuto (919 intervenciones) el 02/12/2018 22:05:55
El metodo copia() te da error porque no has puesto el segundo constructor que te dije.

Lo que hace el segundo constructor, no tiene absolutamente nada que ver con lo que hace el método desplazarXY()

El primer y segundo constructor, lo que hacen es construir un objeto. Cada uno lo hace de un modo distinto, pero en definitiva, ambos construyen objetos (por eso se llaman constructores)
El segundo constructor recibe directamente unos valores para configurar X e Y.
El primero no recibe datos, así que pone X e Y a valor 0

desplazarXY() lo que hace es modificar los atributos de un objeto que ya está construido. Recibe unos valores para sumarserlo a los valores que tenga previamente X e Y.

Si creamos otra clase con main para testear la clas Punto, podemos ver como responden sus funcionalidades. Por ejemplo:

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
public class TestPunto {
 
	public static void main(String[] args) {
 
		Punto punto1 = new Punto(); //Constructor sin parametros
		Punto punto2 = new Punto(0,0); //Constructor con parametros
 
		System.out.println("Punto1: " + punto1.toString());
		System.out.println("Punto2: " + punto2.toString());
 
		System.out.println("\nComparamos puntos....");
		if (punto1.sonIguales(punto2))
			System.out.println("Los puntos son iguales");
		else
			System.out.println("Los puntos son distintos");
 
		System.out.println("\nDesplazamos el Punto 1...");
		punto1.desplazarXY(2, 4);
		System.out.println("Punto1: " + punto1.toString());
 
		System.out.println("\nComparamos puntos....");
		if (punto1.sonIguales(punto2))
			System.out.println("Los puntos son iguales");
		else
			System.out.println("Los puntos son distintos");
 
 
		System.out.println("\nCopiamos el Punto 1 en Punto 2");
		punto2 = punto1.copia();
 
		System.out.println("\nComparamos puntos....");
		if (punto1.sonIguales(punto2))
			System.out.println("Los puntos son iguales");
		else
			System.out.println("Los puntos son distintos");
 
	}
 
}

Esto nos da este resultado por consola:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Punto1: Posicion X = 0 Posicion Y = 0
Punto2: Posicion X = 0 Posicion Y = 0
 
Comparamos puntos....
Los puntos son iguales
 
Desplazamos el Punto 1...
Punto1: Posicion X = 2 Posicion Y = 4
 
Comparamos puntos....
Los puntos son distintos
 
Copiamos el Punto 1 en Punto 2
 
Comparamos puntos....
Los puntos son iguales
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