Autor
|
Tema: Pasar un arreglo desde el main a un metodo en una clase (Leído 10,696 veces)
|
rgomez9119
Desconectado
Mensajes: 17
|
Hola a todos, Estoy aprendiendo JAVA en ECLIPSE NEON y tengo una duda para poder resolver un ejercicio. Main: public class Main {
public static void main(String[] args) { Centralita callcenter = new Centralita(); LlamadaProvincial p1 = new LlamadaProvincial ("8299333777", "8095551111", 43, 1); Centralita.registrarLlamada(p1); }
} clase Centralita: import java.util.ArrayList;
public class Centralita { public static ArrayList<Llamada> llamadas = new ArrayList<Llamada>(); private int cont; // TotalLlamadas private int acum; // TotalFacturado public int getTotalLlamadas() { return cont; } public double getTotalFacturado() { return acum; } public static void registrarLlamada(Llamada llamadas) { cont++; acum++; }
} 1. En el Main: LlamadaProvincial p1 = new LlamadaProvincial ("8299333777", "8095551111", 43, 1); Centralita.registrarLlamada(p1);estoy tratando de pasar "p1" al metodo registrarLlamada() que esta en la clase Centralita. Pero me sale error. 2. En el metodo: public static void registrarLlamada(Llamada llamadas) estoy pasandole el arreglo correctamente?.Llamada = tipo de dato (otra clase que tengo) llamadas = nombre del arreglo 3. Cual es la forma correcta de pasarle datos a un metodo en otra clase?. Que estoy haciendo mal? 4. El uso de public y static es obligatorio para que el metodo y el arreglo sean visibles en el main?. Espero puedan ayudarme, a lo mejor son dudas fáciles para ustedes pero, para mi es un dolor de cabeza. Saludos.
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
public class Main {
public static void main(String[] args) { Centralita callcenter = new Centralita(); LlamadaProvincial p1 = new LlamadaProvincial ("8299333777", "8095551111", 43, 1); Centralita.registrarLlamada(p1); }
} Si quieres registrar llamadas dentro de la centralita callcenter, entonces deberás poner: callcenter.registrarLlamada(p1);Bien, eso no te funcionará, porque registrarLlamada es static. Tendrías que quitarle el static. Probablemente, no quieras ningún static en esa clase ("llamadas" tampoco debería ser static) Un miembro static "pertenece a la clase, no al objeto". Por ejemplo: public class Clase { public static int numStatic; public int num; }
Puedes hacer: Clase objeto = new Clase(); objeto.num = 5; // O Clase.numStatic = 10;
NO puedes hacer: Clase objeto = new Clase(); objeto.numStatic = 5; // NI Clase.num = 10;
¿Razón? objeto.numStatic: Como dijimos, un miembro static pertenece a la clase en sí. Por tanto, no al objeto. Clase.num: Por otra parte, un miembro no-static existe en cada objeto, pero no existe en la clase. Clase objeto1 = new Clase(); Clase objeto2 = new Clase(); objeto1.num = 5; objeto2.num = 7; Clase.numStatic = 10;
Ahí habrá 3 valores diferentes: objeto1.num == 5 objeto2.num == 7 Clase.numStatic == 10 Las funciones son más de lo mismo. Un método static se invoca con "Clase.metodo()". Dentro de la función static, tendrás acceso a los miembros static (numStatic, por ejemplo). Un método no-static se invoca con "objeto.metodo()". Dentro de la función no-static, tendrás acceso a los miembros no-static (los del objeto). Además, puedes acceder a los miembros static como lo harías normalmente ("Clase.miembro"). Si algo no te quedó claro, pregúnta de nuevo, especificando el qué. Haciendo esos cambios, debería funcionarte correctamente. Si no lo hace, coloca aquí el código, el error y la línea del error. 4. El uso de public y static es obligatorio para que el metodo y el arreglo sean visibles en el main?. Si es public, podrás llamar o utilizar objetos desde fuera de la clase. Si es private, solo desde dentro. Si es protected, desde dentro y desde las clases que hereden de ella.
|
|
« Última modificación: 31 Octubre 2016, 19:22 pm por ivancea96 »
|
En línea
|
|
|
|
rgomez9119
Desconectado
Mensajes: 17
|
Gracias por la explicacion. Entiendo mejor. Acerca de: public static ArrayList<Llamada> llamadas = new ArrayList<Llamada>(); Debo remover el static tambien?, como se manejan los array con static, estoy confundido, cuando debo usar static en un arreglo y cuando no.
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Gracias por la explicacion. Entiendo mejor. Acerca de: public static ArrayList<Llamada> llamadas = new ArrayList<Llamada>(); Debo remover el static tambien?, como se manejan los array con static, estoy confundido, cuando debo usar static en un arreglo y cuando no. Arreglo o no arreglo, tipo nativo u objeto, no importa. Las reglas son las mismas. Centralita a = new centralita(); Centralita b = new Centralita();
¿Quieres que cada centralita tenga sus propias llamadas? Si lo haces no-static, cada centralita tendrá su array de llamadas. Si lo haces static, solo habrá 1 array de llamadas global. Si la respuesta es sí, quita el static.
|
|
|
En línea
|
|
|
|
rgomez9119
Desconectado
Mensajes: 17
|
A ver si entendi bien:
public static ArrayList<Llamada> llamadas = new ArrayList<Llamada>();
solo existira este arreglo de forma permanente para todo el programa y para Centralita.
Si hago:
public ArrayList<Llamada> llamadas = new ArrayList<Llamada>();
Puedo crear cuantos arraylist sean necesarios, por ejemplo puedo crear:
public ArrayList<Llamada> llamadasProvinciales = new ArrayList<Llamada>();
public ArrayList<Llamada> llamadasLocales = new ArrayList<Llamada>();
y poder trabajar con ambos, enviandolos a los metodos de la clase Centralita, etc..
??
El ejercicio es pedir la hora de llamada, dependiendo de la hora, las LlamadasProvinciales tienen diferente precio, o sea, debo preguntar por un "int" y guardarlos en el array.
Las LlamadasLocales no necesitan, o sea, no debo pedir por un "int", para esto pense hacer otro arreglo para tener ambas cosas separadas y poder contabilizas las llamadas y sumar el costo total mas facilmente.
No se si es la mejor forma, aun sigo aprendiendo esto de clases, etc...
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Si haces diferentes ArrayList, tendrás esos ArrayList en cada objeto centralita. Centralita a = new Centralita(); Centralita b = new Centralita(); a.llamadasProvinciales b.llamadasProvinciales
Sería correcto. Cada centralita tendría sus propias llamadas, independientes de las otras.
|
|
|
En línea
|
|
|
|
rgomez9119
Desconectado
Mensajes: 17
|
Hola, una pregunta mas. En las clases LlamadaProvincial y LlamadaLocal tengo el metodo: public double calcularPrecio() { } Como puedo hacer para enviar el arreglo a ese metodo, en ambas clases, determinar si la llamada es Provincial o Local para hacer el calculo del costo de la llamada, cada clase tiene su precio. Ejemplo: Main public class Main {
public static void main(String[] args) { Centralita callcenter = new Centralita(); LlamadaProvincial llamadaEntranteProvincial1 = new LlamadaProvincial ("8299333777", "8095551111", 43, 1); callcenter.registrarLlamada(llamadaEntranteProvincial1); LlamadaLocal llamadaEntranteLocal1 = new LlamadaLocal ("8299333777", "8093330000", 13); callcenter.registrarLlamada(llamadaEntranteLocal1); }
}
Como envio eso a los metodos, juntos o separados para hacer el calculo. Estoy perdido, manejarse entre clases es un poco problemático al inicio del aprendizaje. Te muestro el codigo que tengo hasta ahora.Main: import java.util.ArrayList;
public class Centralita { private ArrayList<Llamada> llamadasProvinciales = new ArrayList<Llamada>(); private ArrayList<Llamada> llamadasLocales = new ArrayList<Llamada>(); private int cont; // TotalLlamadas private int acum; // TotalFacturado public int getTotalLlamadas() { return cont; } public double getTotalFacturado() { return acum; } public void registrarLlamada(LlamadaProvincial llamadaEntranteProvincial) { cont++; llamadasProvinciales.add(llamadaEntranteProvincial); } public void registrarLlamada(LlamadaLocal llamadaEntranteLocal) { cont++; llamadasLocales.add(llamadaEntranteLocal); }
}
Centralita import java.util.ArrayList;
public class Centralita { private ArrayList<Llamada> llamadasProvinciales = new ArrayList<Llamada>(); private ArrayList<Llamada> llamadasLocales = new ArrayList<Llamada>(); private int cont; // TotalLlamadas private int acum; // TotalFacturado public int getTotalLlamadas() { return cont; } public double getTotalFacturado() { return acum; } public void registrarLlamada(LlamadaProvincial llamadaEntranteProvincial) { cont++; llamadasProvinciales.add(llamadaEntranteProvincial); } public void registrarLlamada(LlamadaLocal llamadaEntranteLocal) { cont++; llamadasLocales.add(llamadaEntranteLocal); }
}
LlamadaLocal public class LlamadaLocal extends Llamada {
private final double precio = 0.15; public LlamadaLocal(String numOrigen, String numDestino, int duracion) { super(numOrigen, numDestino, duracion); }
public double calcularPrecio() { } public String toString() { } }
LlamadaProvincial public class LlamadaProvincial extends Llamada { private final double precio1 = 0.20; private final double precio2 = 0.25; private final double precio3 = 0.30; private int franja;
public LlamadaProvincial(String numOrigen, String numDestino, int duracion, int franja) { super(numOrigen, numDestino, duracion); this.franja = franja; } public int getFranja() { return franja; }
public void setFranja(int franja) { this.franja = franja; } public double calcularPrecio() { } public String toString() { }
}
Llamada public class Llamada { private String numOrigen; private String numDestino; private int duracion; public Llamada(String numOrigen, String numDestino, int duracion) { super(); this.numOrigen = numOrigen; this.numDestino = numDestino; this.duracion = duracion; } public String getNumOrigen() { return numOrigen; }
public String getNumDestino() { return numDestino; }
public int getDuracion() { return duracion; }
}
Me siento perdido, espero puedas ayudarme y no sea mucha molestia. Estoy aprendiendo. Todo es mas facil en C o C++ , esto de clases me parte el caco...
|
|
« Última modificación: 1 Noviembre 2016, 02:26 am por rgomez9119 »
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
En C++ también hay clases. Incluso diría que es más complejo su manejo jaja No estoy seguro de qué quieres hacer, pero a la pregunta "Cómo enviar un ArrayList como parámetro", es exactamente igual que pasar cualquier otro objeto: public double calcularPrecio(ArrayList<Llamada> llamadas) { }
Y luego: objeto.calcularPrecio(centralita.llamadasLocales);
|
|
|
En línea
|
|
|
|
rgomez9119
Desconectado
Mensajes: 17
|
En la clase LLamadaLocal y Provincial no me sale ningun get para poder obtener la duracion. LlamadaLocal import java.util.ArrayList;
public class LlamadaLocal extends Llamada {
private final double precio = 0.15; public LlamadaLocal(String numOrigen, String numDestino, int duracion) { super(numOrigen, numDestino, duracion); }
public double calcularPrecio(ArrayList<Llamada> llamadasLocales) { acum += llamadasLocales[b].NADA![/b] } public String toString() { } }
Que tengo mal?, por qué los get no me salen visibles?. Los get estan en la clase Llamada. Arriba te puse el codigo. Espero que me ayudes.
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
llamadas es un Arraylist. Tendrás que acceder primero a los métodos de ArrayList para obtener la llamada que quieras. O hacer un for por cada llamada. Llamada llamada = llamadas.get(2); // Ese 2 lo cambias por el índice que quieras llamada. etc;
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
acceder desde el main a un metodo de otra clase
Java
|
alzehimer_cerebral
|
6
|
8,883
|
5 Octubre 2009, 18:22 pm
por alzehimer_cerebral
|
|
|
Ejercutar main desde otro main.
« 1 2 »
Programación C/C++
|
arcanu
|
10
|
7,100
|
10 Septiembre 2010, 20:13 pm
por arcanu
|
|
|
¿Como llamar al metodo de una clase sin pasar por su constructor?
Java
|
GaudyG
|
5
|
7,759
|
14 Junio 2011, 00:22 am
por Stoya
|
|
|
Llamar metodo de una clase desde otra en asp.net
Desarrollo Web
|
jabedoya
|
0
|
2,606
|
26 Mayo 2014, 18:56 pm
por jabedoya
|
|
|
Ayuda: pasar por parametro de un metodo a una clase
Programación C/C++
|
Akumadie
|
1
|
2,482
|
29 Noviembre 2016, 15:55 pm
por ivancea96
|
|