elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Pasar un arreglo desde el main a un metodo en una clase
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Pasar un arreglo desde el main a un metodo en una clase  (Leído 5,441 veces)
rgomez9119

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Pasar un arreglo desde el main a un metodo en una clase
« en: 31 Octubre 2016, 18:30 pm »

Hola a todos,

Estoy aprendiendo JAVA en ECLIPSE NEON y tengo una duda para poder resolver un ejercicio.

Main:

Código:
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:

Código:
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:
Código:
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 Desconectado

Mensajes: 3.411


ASMático


Ver Perfil WWW
Re: Pasar un arreglo desde el main a un metodo en una clase
« Respuesta #1 en: 31 Octubre 2016, 19:19 pm »

Código:
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:

Código
  1. public class Clase {
  2.  
  3.    public static int numStatic;
  4.  
  5.    public int num;
  6.  
  7. }

Puedes hacer:
Código
  1. Clase objeto = new Clase();
  2.  
  3. objeto.num = 5;
  4.  
  5. // O
  6.  
  7. Clase.numStatic = 10;

NO puedes hacer:
Código
  1. Clase objeto = new Clase();
  2.  
  3. objeto.numStatic = 5;
  4.  
  5. // NI
  6.  
  7. 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.

Código
  1. Clase objeto1 = new Clase();
  2. Clase objeto2 = new Clase();
  3.  
  4. objeto1.num = 5;
  5. objeto2.num = 7;
  6.  
  7. Clase.numStatic = 10;

Ahí habrá 3 valores diferentes:
Código:
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.


Citar
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 Desconectado

Mensajes: 17


Ver Perfil
Re: Pasar un arreglo desde el main a un metodo en una clase
« Respuesta #2 en: 31 Octubre 2016, 19:26 pm »

Gracias por la explicacion. Entiendo mejor.

Acerca de:
Código:
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 Desconectado

Mensajes: 3.411


ASMático


Ver Perfil WWW
Re: Pasar un arreglo desde el main a un metodo en una clase
« Respuesta #3 en: 31 Octubre 2016, 19:33 pm »

Gracias por la explicacion. Entiendo mejor.

Acerca de:
Código:
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.

Código
  1. Centralita a = new centralita();
  2. 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 Desconectado

Mensajes: 17


Ver Perfil
Re: Pasar un arreglo desde el main a un metodo en una clase
« Respuesta #4 en: 31 Octubre 2016, 21:46 pm »

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 Desconectado

Mensajes: 3.411


ASMático


Ver Perfil WWW
Re: Pasar un arreglo desde el main a un metodo en una clase
« Respuesta #5 en: 31 Octubre 2016, 23:12 pm »

Si haces diferentes ArrayList, tendrás esos ArrayList en cada objeto centralita.

Código
  1. Centralita a = new Centralita();
  2. Centralita b = new Centralita();
  3. a.llamadasProvinciales
  4. b.llamadasProvinciales

Sería correcto. Cada centralita tendría sus propias llamadas, independientes de las otras.
En línea

rgomez9119

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: Pasar un arreglo desde el main a un metodo en una clase
« Respuesta #6 en: 1 Noviembre 2016, 02:23 am »

Hola,
una pregunta mas.

En las clases LlamadaProvincial y LlamadaLocal tengo el metodo:

Código:
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
Código:
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:
Código:
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
Código:
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
Código:
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
Código:
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
Código:
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 Desconectado

Mensajes: 3.411


ASMático


Ver Perfil WWW
Re: Pasar un arreglo desde el main a un metodo en una clase
« Respuesta #7 en: 1 Noviembre 2016, 13:24 pm »

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:
Código
  1. public double calcularPrecio(ArrayList<Llamada> llamadas)
  2. {
  3.  
  4. }

Y luego:

Código
  1. objeto.calcularPrecio(centralita.llamadasLocales);
En línea

rgomez9119

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: Pasar un arreglo desde el main a un metodo en una clase
« Respuesta #8 en: 2 Noviembre 2016, 03:00 am »

En la clase LLamadaLocal y Provincial no me sale ningun get para poder obtener la duracion.

LlamadaLocal
Código:
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 Desconectado

Mensajes: 3.411


ASMático


Ver Perfil WWW
Re: Pasar un arreglo desde el main a un metodo en una clase
« Respuesta #9 en: 2 Noviembre 2016, 10:30 am »

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.
Código
  1. Llamada llamada = llamadas.get(2); // Ese 2 lo cambias por el índice que quieras
  2. llamada. etc;
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
acceder desde el main a un metodo de otra clase
Java
alzehimer_cerebral 6 7,219 Último mensaje 5 Octubre 2009, 18:22 pm
por alzehimer_cerebral
Ejercutar main desde otro main. « 1 2 »
Programación C/C++
arcanu 10 4,291 Último mensaje 10 Septiembre 2010, 20:13 pm
por arcanu
¿Como llamar al metodo de una clase sin pasar por su constructor?
Java
GaudyG 5 6,486 Último mensaje 14 Junio 2011, 00:22 am
por Stoya
Llamar metodo de una clase desde otra en asp.net
Desarrollo Web
jabedoya 0 1,278 Último mensaje 26 Mayo 2014, 18:56 pm
por jabedoya
Ayuda: pasar por parametro de un metodo a una clase
Programación C/C++
Akumadie 1 763 Último mensaje 29 Noviembre 2016, 15:55 pm
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines