› Foros › PC › Software libre
public class Lab9 {
public static void main(String[] args) {
int opcion;
opcion = mostrarMenuYLeerOpcion();
while (opcion != 6) {
switch (opcion) {
case 1:
rellenarTabla();
break;
case 2:
mostrarContenidoTabla();
break;
case 3:
posicionValorMax();
break;
public static void rellenarTabla(int tablaNumeros[]) {
BufferedReader entrada = new BufferedReader(new InputStreamReader(
System.in));
try {
for (int posicion = 0; posicion < tablaNumeros.length; posicion++) {
System.out.println("Introduce un número");
tablaNumeros[posicion] = Integer.parseInt(entrada.readLine());
}
} catch (IOException ex) {
} catch (NumberFormatException ex) {
}
}
public static void mostrarContenidoTabla(int tablaNumeros[]) {
for (int posicion = 0; posicion < tablaNumeros.length; posicion++) {
System.out.println(tablaNumeros[posicion]);
}
}
public static void rellenarTabla() {
int tablaNumeros[];
tablaNumeros = new int[10];
rellenarTabla(tablaNumeros);
}
FCKU escribió:No te he entendido muy bien, pero si no puedes modificar el trozo de codigo que te dan intuyo que lo que pretenden es que:
1) Te declares un array vacio de 'n' enteros
2) Lo pases por referencia al trozo de codigo que te dan para meterle valores por teclado (puesto que dicha funcion devuelve void)
public static void rellenarTabla() {
int tablaNumeros[];
tablaNumeros = new int[10];
rellenarTabla(tablaNumeros); //Paso por referencia es esto, ¿no?
}
3) Uses el array ya iniciado para el resto de operaciones (mostrar, obtener el numero mayor, etc)
Cuando desde java invocas metodos con atributos estos se pasan por referencia. Esto es, el objeto es unico, lo que pasas es un puntero al objeto, y si lo modificas en el metodo al que invocas dicho objeto quedara modificado al salir de el.
public class Lab9 {
private static final int LONGITUD_ARRAY = 10;
public static void main(String[] args) {
int opcion;
int [] arrayEnteros = new int [LONGITUD_ARRAY];
opcion = mostrarMenuYLeerOpcion();
while (opcion != 6) {
switch (opcion) {
case 1:
arrayEnteros = rellenarTabla(); // ahi inicias el array de enteros
break;
case 2:
mostrarContenidoTabla(arrayEnteros);
break;
case 3:
posicionValorMax(arrayEnteros);
break;
public static int[] rellenarTabla() {
int tablaNumeros[] = new int [LONGITUD_ARRAY];
rellenarTabla(tablaNumeros); //Paso por referencia es esto, ¿no? --> si :)
return tablaNumeros;
}
Por aqui me comentaron que en java no hay punteros (o eso entendi), y no lo he dado, asi que no se que son, de momento.
FCKU escribió:Cuando desde java invocas metodos con atributos estos se pasan por referencia. Esto es, el objeto es unico, lo que pasas es un puntero al objeto, y si lo modificas en el metodo al que invocas dicho objeto quedara modificado al salir de el.
public class Lab9 {
public static void main(String[] args) {
int opcion;
int tablaNumeros[];
tablaNumeros = new int[10]; //Mejor asi o pedir usuario tamaño array?
opcion = mostrarMenuYLeerOpcion();
while (opcion != 6) {
switch (opcion) {
case 1:
rellenarTabla(tablaNumeros);
break;
case 2:
mostrarContenidoTabla(tablaNumeros);
break;
case 3:
posicionValorMax(tablaNumeros);
break;
case 4:
mediaValores(tablaNumeros);
...
bastian escribió:cita de FCKU:
Cuando desde java invocas metodos con atributos estos se pasan por referencia. Esto es, el objeto es unico, lo que pasas es un puntero al objeto, y si lo modificas en el metodo al que invocas dicho objeto quedara modificado al salir de el.
Realmente no es así.
http://javadude.com/articles/passbyvalue.htm
Dagaren escribió:Hombre, es la discusión de siempre. Claro que pasas todo por valor. Cuando pasas un puntero, el puntero lo pasas por valor, pero implicitamente, pasas la variable u objeto a la que apunta por referencia, ya que el puntero es una referencia por definicion.
bastian escribió:Puse ese enlace porque el comportamiento no es el mismo que en C, en el que si pasas un puntero puedes modificarlo (como en el típico ejemplo de la función swap(&a,&b). En Java no, porque pasas una referencia al objeto por valor, es decir OTRA referencia al objeto, distinta de la referencia original. Por tanto si modificas esa referencia en la función, los cambios no se ven reflejados fuera de ella.
Aunque igual depende del programa, que seria mas correcto? Gracias nuevamente.
package laboratorio10;
public class TipoAlumno
{
public int dni;
public String nombre;
public String apellido;
}
package laboratorio10;
public class TipoDireccion {
public String calle;
public int numero;
public int codigoPostal;
public String localidad;
public String pais;
}
package laboratorio10;
public class TipoAlumno
{
public int dni; //¿Porque public? En transparencias no lo indica como public
public String nombre;
public String apellido;
TipoDireccion prueba = new TipoDireccion();
}
Inventado escribió:El caso es que no se si con esa linea al crear un nuevo alumno me creara el TipoDireccion por cada uno creado. ¿seria asi?
Inventado escribió:Lo digo porque en los apuntes esta para crear dandole un nombre (TipoDireccion prueba) y luego con un new (prueba = new TipoDireccion()) pero aparte de no dar error, debe ser una burrada hacer un registro con un nombre especifico dentro de otro registro.
package laboratorio10;
public class TipoAlumno
{
public int dni; //¿Porque public? En transparencias no lo indica como public
public String nombre;
public String apellido;
TipoDireccion prueba = new TipoDireccion();
}
package laboratorio10;
public class TipoAlumno
{
[...]
public TipoDireccion prueba;
public TipoAlumno() {
prueba = new TipoDireccion();
}
}
El problema es que no se como referenciar¿?(no se si referenciar es correcto) por ejemplo la calle.
El pone, por ejemplo, para el nombre : tabla[i].nombre = entrada.readLine();
Entonces, ¿como seria para rellenar, por ejemplo, la calle?
FCKU escribió:¿? No he entendido a lo que te refieres con "hacer un registro con un nombre especifico dentro de otro registro"
package laboratorio10;
public class TipoAlumno { //Esto es un registro
public int dni; //¿Porque public? En transparencias no lo indica como public
public String nombre;
public String apellido;
TipoDireccion prueba;
prueba = new TipoDireccion(); //Esto crearia el registro TipoDireccion con el nombre "prueba" dentro del registro TipoAlumno.
}
FCKU escribió:]
alumno1.prueba.calle = "calle de la direccion del alumno 1"
Mirate el libro que te puse varios comentarios atrás.
Un saludo