Preguntas sobre programación en Java
Resuelto
azerty0123
Mensajes publicados
3
Estado
Miembro
-
azerty0123 -
azerty0123 -
Traducción al español:
Hola,
Soy novato en informática y en el marco de mi licenciatura hago lenguaje Java.
Antes que nada me gustaría saber qué significa SetN, ya que en un examen tuve el siguiente ejercicio:
Qué muestra el programa Java que contiene estas dos clases durante su ejecución?
Sean las dos clases Java siguientes:
public class Main {
public static void main(String[] args) {
Toto a;
a = new Toto();
a.setN(1);
System.out.println(a.affiche());
a.setN(7);
System.out.println(a.affiche());
a.setN(8);
System.out.println(a.affiche());
a.setN(12);
System.out.println(a.affiche());
a.setN(37);
System.out.println(a.affiche());
}
}
y
public class Toto {
private int n;
public Toto() {
this.n = 0;
}
public void setN(int n) {
this.n = n;
}
public String affiche() {
int i;
i = this.n;
String res = "";
while (i > 0) {
i = j % 8;
res = String.valueOf(i) + res;
j = j / 8;
}
return res;
}
}
También tengo un problema con las clases, no veo muy bien qué son; ¿es el segundo programa una clase?
Esperando una respuesta de su parte, le agradezco infinitamente.
Hola,
Soy novato en informática y en el marco de mi licenciatura hago lenguaje Java.
Antes que nada me gustaría saber qué significa SetN, ya que en un examen tuve el siguiente ejercicio:
Qué muestra el programa Java que contiene estas dos clases durante su ejecución?
Sean las dos clases Java siguientes:
public class Main {
public static void main(String[] args) {
Toto a;
a = new Toto();
a.setN(1);
System.out.println(a.affiche());
a.setN(7);
System.out.println(a.affiche());
a.setN(8);
System.out.println(a.affiche());
a.setN(12);
System.out.println(a.affiche());
a.setN(37);
System.out.println(a.affiche());
}
}
y
public class Toto {
private int n;
public Toto() {
this.n = 0;
}
public void setN(int n) {
this.n = n;
}
public String affiche() {
int i;
i = this.n;
String res = "";
while (i > 0) {
i = j % 8;
res = String.valueOf(i) + res;
j = j / 8;
}
return res;
}
}
También tengo un problema con las clases, no veo muy bien qué son; ¿es el segundo programa una clase?
Esperando una respuesta de su parte, le agradezco infinitamente.
3 respuestas
Los dos archivos son clases (empiezan por la palabra clave "class").
"Ejecutar un programa" es llamar a un método main de una clase.
Aquí, se trata del método main de la clase Main, donde el objeto a es una instancia de la clase Toto, por lo que a.setN es una llamada al método setN definido en la clase Toto...
PD: la próxima vez que hagas copiar-pega de un código, asegúrate de que siga siendo legible, porque con espacios por todas partes y las llaves faltantes, ¡es horrible de leer!
--
La confianza no excluye el control
"Ejecutar un programa" es llamar a un método main de una clase.
Aquí, se trata del método main de la clase Main, donde el objeto a es una instancia de la clase Toto, por lo que a.setN es una llamada al método setN definido en la clase Toto...
PD: la próxima vez que hagas copiar-pega de un código, asegúrate de que siga siendo legible, porque con espacios por todas partes y las llaves faltantes, ¡es horrible de leer!
--
La confianza no excluye el control
Ahhhhh muchas gracias, ahora está más claro para mí.
Pero entonces para n=1, eso quiere decir que j=1, así que i=0 (1%8==0) y por lo tanto que res=0 (porque el valor de i==0 y res =0 al principio)).
Pero en la corrección, el resultado es 1.
Pero entonces para n=1, eso quiere decir que j=1, así que i=0 (1%8==0) y por lo tanto que res=0 (porque el valor de i==0 y res =0 al principio)).
Pero en la corrección, el resultado es 1.
Entonces si hago para n=2, en este caso j=1, entonces i=1 (porque 2%8=1) y por lo tanto res= 1+1 porque res=1 ya que para n=1 res=1.
Para n=3, j=3, por lo que i=1, y res=1+2=3
Para n=4, j=4, por lo que i=1, y res=1+3
para n=5, j=5, por lo que i=1, y res=1+4
Para n=6, j=6 por lo que i=1 y res=1+5
Para n=7, j=7 por lo que i=1, y res=1+6;
Para n=8, j=8, y i=0, y entonces res=0+7;
Pero en la corrección para n=8, res devuelve 10.
Para n=3, j=3, por lo que i=1, y res=1+2=3
Para n=4, j=4, por lo que i=1, y res=1+3
para n=5, j=5, por lo que i=1, y res=1+4
Para n=6, j=6 por lo que i=1 y res=1+5
Para n=7, j=7 por lo que i=1, y res=1+6;
Para n=8, j=8, y i=0, y entonces res=0+7;
Pero en la corrección para n=8, res devuelve 10.
Entonces, si hago lo mismo para n=37:
n=37, j=37, res=" ";;
i=j%8=37%8=5 por lo que res=5+" "=""5"", j=j/8=37/8=4
i=4%8=1 res=1+"5"="15" j=j/8=4/8=0
return res (= "15")
¿Por qué encuentro 15 cuando debería encontrar 45?
Para n=12, j=12, i=12%8=4 por lo que res=4+" "="4" j=12/8=1
i=1%8=1 por lo que res=1+"4"="14" j=1/8=0
returnres (=14)
Ahí obtengo bien el valor correcto, ¿entonces por qué no encuentro 45 para n=37, cuál es mi error?
n=37, j=37, res=" ";;
i=j%8=37%8=5 por lo que res=5+" "=""5"", j=j/8=37/8=4
i=4%8=1 res=1+"5"="15" j=j/8=4/8=0
return res (= "15")
¿Por qué encuentro 15 cuando debería encontrar 45?
Para n=12, j=12, i=12%8=4 por lo que res=4+" "="4" j=12/8=1
i=1%8=1 por lo que res=1+"4"="14" j=1/8=0
returnres (=14)
Ahí obtengo bien el valor correcto, ¿entonces por qué no encuentro 45 para n=37, cuál es mi error?
p u b l i c c l a s s Toto { Aquí definimos la clase que llamamos toto
p r i v a t e i n t n ; Aquí definimos n, pero ¿por qué ponemos private delante?
p u b l i c Toto ( ) {
t h i s . n = 0 ;
Definimos n a 0, si entiendo bien ponemos this.n para asignar un valor a n
}
p u b l i c void s e tN ( i n t n ) { aquí definimos la función SetN
t h i s . n = n ; Redefinimos n como igual a n y no más a 0
}
p u b l i c S t r i n g a f f i c h e ( ) { Función muestra
i n t i ;
i n t j = t h i s . n ;
S t r i n g r e s = " " ; Aquí, ¿por qué ponemos String res y no int res?
wh i l e ( j > 0) {
i = j % 8 ;
El % me da problema, no es división, ¿qué es entonces? por ejemplo 14 % 8 ¿cuánto da?
r e s = S t r i n g . va lueOf ( i ) + r e s ;
¿significa eso res = valor de i + valor de res? Pero res = " " no tiene sentido.
j = j / 8 ;
¿Por qué definir j = j / 8 después de escribir el valor de res, el valor de i depende de j, pero tomamos j como igual a n, y ahora queremos j = j / 8, ya no entiendo bien.
}
r e t u r n r e s ;
}
}
Así que el programa reescrito correctamente.
Ahora entiendo algunas cosas, pero lo que me preocupa es que el programa debe mostrar 1, 7, 10, 14, 45. He puesto en negrita lo que pensé haber entendido y las preguntas que me planteo.
Sería muy amable explicármelo. Creo que podría ayudar mucho.
Muchas gracias :)
es tonto como pregunta, pero en Java ¿qué daría?
"¿por qué ponemos private" : mira qué es la accesibilidad
"se usa this.n para definir un valor de n" : no cualquiera, solo el del objeto actual (this), aquí hacer this.n=0 es exactamente igual que hacer n=0 (this es implícito)
"se redefine n" : no, se modifica su valor, la redefinición es otra cosa (ver la herencia)
"¿por qué ponemos String y no int" : eso es porque ya no queremos un entero, sino una cadena de caracteres (mira los tipos de datos)
"El % me da problema", es el resto de la división entera, así que a%b==a-(a/b)*b, 1%8==7%8==0
res = " " en realidad, solo al inicio, pero luego modificas res, así que ya no es verdad.
"¿Por qué definir j=j/8" : pregúntate qué debe hacer tu programa, probándolo por ejemplo, modificándolo un poco y volviéndolo a probar, añadiendo algunas salidas... Si no modificas j, siempre tendrás los mismos valores i y j en tu bucle while, y tu programa hará siempre lo mismo, sin detenerse (debido a la condición de parada j>0)!"