Autor Tema: Java crear clases que representen un Vector y operaciones de un vector código  (Leído 4843 veces)

catlovervalss

  • Sin experiencia
  • *
  • Mensajes: 2
    • Ver Perfil
Me presento como estudiante de informatica, en este momento estoy aprendiendo a realizar vectores y se me está dificultando quisiera ayuda. Tengo la siguiente tarea:
 
Debe realizar un programa que consta de tres clases, Vector, OperacionesVector y PrincipalVector.

En la clase Vector se crea el vector de tipo entero, debe haber un método constructor que recibe como parámetro el tamaño del vector. Además, debe terner los métodos:

•   llenarVector: recibe el valor que se va a almacenar y la posición.
•   buscarValor: recibe un valor y devuelve la posición.
•   devolverValor: recibe una posición y devuelve el valor.

En la clase OperacionesVector, se deben crear 4 instancias de la clase vector (vectorA, vectorB, vectorC y vectorD)  los cuales debe ser del mismo tamaño, por lo que en la clase OperacionesVector, usted debe solicitar al usuario que digite el tamaño de los vectores (se solicita únicamente una vez, pues es el mismo tamaño para los cuatro vectores) y pasarlos como parámetros a la clase Vector, posteriormente en esta misma clase debe realizar un método “llenarVector” en donde con la utilización de un mismo For usted debe solicitar al usuario los datos de los  vectores A y B (VectorA y VectorB) para irlos llenando de una vez.

En la clase OperacionesVector debe confeccionar un método “sumarVectores” que le permita sumar el elemento uno del VectorA con el elemento uno del VectorB y así sucesivamente hasta llegar al último elemento de los vectores, este método debe  almacenar el resultado de la suma del elemento del vector A y B en el VectorC en la posición correspondiente, e imprimir al final el vector resultante.

En la clase OperacionesVector además debe crear un método “multiplicarVector” que haga lo siguiente: debe tomar cada elemento del VectorC y multiplicarlo por el elemento de la posición anterior del mismo VectorC y el resultado guardarlo en el VectorD, e imprimir al final el vector resultante (VectorD). En el caso del primer elemento del VectorC, debe multiplicarlo por si mismo.

Todos los métodos deben ser llamados desde la clase pruebaVector mediante las referencias e instancias correspondientes a la clase Vector.

Debe crear un método que devuelva el número mayor y la posición en la que se encuentra dentro del VectorA.

Debe crear un método que devuelva el número menor y la posición en la que se encuentra dentro del VectorA.

Por último debe crear un método que se encargue de ordenar de menor a mayor todos los elementos  del VectorB, e imprimir el Vector una vez que se han ordenado los valores del vector.

Apenas llevo la clase vector pero tengo problemas si alguna persona está dispuesta ayudarme le agradecería y pasó el codigo para que lo vea. Gracias
« Última modificación: 05 de Septiembre 2016, 14:37 por Alex Rodríguez »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re:Vectores en Java
« Respuesta #1 en: 28 de Agosto 2016, 00:01 »
Hola y bienvenido.

Este foro es para presentaciones, te sugiero que publiques tu duda en esta sección.

El ejercicio que te han propuesto parece lioso porque el enunciado es extenso y pide muchas cosas, pero en realidad no es tan complicado.

Eso sí, hay que ir por partes y de momento céntrate solo en crear la clase Vector.

Crea un nuevo tema en la otra sección y publica ahí el código que lleves escrito para la clase Vector y especifica qué problemas estás encontrando.
Tras eso, le podremos meter mano a las siguientes clases.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

catlovervalss

  • Sin experiencia
  • *
  • Mensajes: 2
    • Ver Perfil
Vectores en Java #2
« Respuesta #2 en: 30 de Agosto 2016, 01:22 »
Código: [Seleccionar]
import javax.swing.JOptionPane;

public class Vector
{
  private int vector [];
  private int posicion;
 
  public Vector (int cantElementos) //Constructor
  {
    vector= new int [cantElementos];
  }
       public void llenarVector()
  {
    for(int i=0;i<vector.length; i++)
    {
      vector[i] = Integer.parseInt(JOptionPane.showInputDialog("Digite el valor "+(i+1)));
    }
  }
  public void buscarValor(int valorDado)
  {
    int posicion=-1;
  for(int i=0;i<vector.length; i++)
    {
  valorDado = Integer.parseInt(JOptionPane.showInputDialog("Digite el valor que desea buscar?"));
      if(vector[i]==valorDado)
      {
      posicion=i+1;
      JOptionPane.showMessageDialog(null,"El valor "+valorDado+" está en la posición "+posicion);
    }
      else
      {
     JOptionPane.showMessageDialog(null,"El valor "+valorDado+" no está en el vector");   
      }
   }     
  }
  public void buscarPosicion (int posicionDada)
  {
    int posicion=-1;
    for(int i=0;i<vector.length;i++)
    {
     posicionDada = Integer.parseInt(JOptionPane.showInputDialog("Digite la posición que desea buscar?"));
     if(i==posicionDada)
     {
       JOptionPane.showMessageDialog(null,"En la posicion"+posicionDada+" está el número"+vector[i]); 
      }
     else
     {
       JOptionPane.showMessageDialog(null,"La posición está fuera del rango del vector");
     }
    }
  }
 
  public void imprimir()
  {
    for(int i=0;i<vector.length; i++)
    {
      System.out.println(" "+vector[i]);
    }
  }
}


Este es mi codigo de la clase vector, ,me presenta problemas con los metodos, eliminar, buscar un valor, reemplazar o buscar una posición pues soy nueva en este tema. Gracias por la ayuda,
« Última modificación: 30 de Agosto 2016, 21:22 por Alex Rodríguez »

DRANXZ88

  • Avanzado
  • ****
  • Mensajes: 356
    • Ver Perfil
Re:Vectores en Java #2
« Respuesta #3 en: 30 de Agosto 2016, 03:34 »
Si vas a escribir en el foro te recomiendo que lea este link donde esta la regla del foro.
https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0
Si sos nuevo y quiere recibir ayuda mas rápido publica en esta sección del foro porque vos esta publicando en la sección de presentación.
https://www.aprenderaprogramar.com/foros/index.php?board=1.0

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Vectores en Java
« Respuesta #4 en: 30 de Agosto 2016, 21:28 »
Hola catlovervalss, para escribir en los foros es necesario que sigas las indicaciones que se dan en https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0 y que escribas en el foro adecuado. Voy a mover este tema al foro "Aprender a programar desde cero".

Por favor no crees nuevos temas si vas a responder a algo. Si vas a responder, hazlo sobre el tema ya creado.

Por contra, si vas a hablar de algo distinto, crea un nuevo tema.

Si no respetas las indicaciones que te damos podrás ser bloqueado por un administrador.

Saludos

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re:Vectores en Java #2
« Respuesta #5 en: 31 de Agosto 2016, 12:12 »
Este es mi codigo de la clase vector, ,me presenta problemas con los metodos, eliminar, buscar un valor, reemplazar o buscar una posición pues soy nueva en este tema. Gracias por la ayuda,

Hola...
Primero, el atributo "posicion" creo que no es necesario. Se puede hacer todo lo que se pide sin su ayuda.

Segundo, no hay ningún método eliminar().... ni podría haberlo ya que no podemos eliminar elementos de un vector una vez creado. Podemos cambiar el valor de los elementos, pero no añadir o eliminar. (Para esto se usan clases más avanzadas como los ArrayList)
Lo de cambiar el valor, podría ser lo del método reemplazar().... pero en el enunciado que pusiste no veo que esto se esté pidiendo.

Sobre el método buscarValor()
Código: [Seleccionar]
public void buscarValor(int valorDado)
  {
    int posicion=-1;
  for(int i=0;i<vector.length; i++)
    {
  valorDado = Integer.parseInt(JOptionPane.showInputDialog("Digite el valor que desea buscar?"));
      if(vector[i]==valorDado)
      {
      posicion=i+1;
      JOptionPane.showMessageDialog(null,"El valor "+valorDado+" está en la posición "+posicion);
    }
      else
      {
     JOptionPane.showMessageDialog(null,"El valor "+valorDado+" no está en el vector");   
      }
   }     
  }

Si lo declaras así...
Citar
public void buscarValor(int valorDado)
...implica que cuando en el código hagamos la llamada a este método, obligatoriamente habrá que pasarle un valor entero, ya que hemos indicado que tiene un parámetro llamado "valorDado", es decir, el valor que queremos buscar.
Esto sería una forma válida de hacerlo, pero dentro del método resulta que estamos pidiendo de nuevo ese valor mediante diálogos de texto.
Por lo tanto es incongruente, así que hay que elegir de una manera u otra. Si vamos a usar diálogos texto para pedir el valor, lo mejor es declarar el método sin indicar parámetros y dentro del método, declarar una nueva variable para recoger el valor que introduzca el usuario mediante los diálogos:

Citar
public void buscarValor()
{
      int valorDado;

Luego, la línea:
Citar
int posicion=-1;

Hemos dicho que el atributo posicion no lo vamos a necesitar, asi que esta línea se puede borrar.
De hecho, lo que en realidad estabas haciendo en esa línea era declarar una nueva variable llamada "posicion", que nada tiene que ver con el atributo llamado "posicion".
Se llaman igual, pero son dos elementos distintos y Java los diferencia perfectamente.
En cuando pones int delante de una variable (int, o byte, o char, o float, o lo que sea...) la estás declarando como nueva, sin que tenga nada que ver con cualquier otra variable ya creada.
Si quisieramos haber utilizado el atributo "posicion" de la clase Vector, te habría bastado con poner su nombre tal cual:
Citar
posicion=-1;
O también para asegurarte y que quede bien clarito que te estás refiriendo al atributo de clase y no a otra variable, se puede usar también la palabra "this"
Citar
this.posicion=-1;
Pero en cualquier caso, no necesitamos este atributo para nada...así que simplemente eliminamos dicha línea.

Ahora viene el bucle for
Código: [Seleccionar]
for(int i=0;i<vector.length; i++)
    {
  valorDado = Integer.parseInt(JOptionPane.showInputDialog("Digite el valor que desea buscar?"));
      if(vector[i]==valorDado)
      {
      posicion=i+1;
      JOptionPane.showMessageDialog(null,"El valor "+valorDado+" está en la posición "+posicion);
    }
      else
      {
     JOptionPane.showMessageDialog(null,"El valor "+valorDado+" no está en el vector");   
      }
   }   

El for en principio está bien declarado, que vaya desde el principio hasta el final del vector ya que querremos buscar el valor que nos indique el usuario. Usaremos la variable "contador" del bucle for (la variable "i") como indice para señalar cada elemento del vector. Por eso no necesitamos ningún atributo "posicion".

Pero hay un error de lógica, estamos pidiendo al usuario el valor a buscar DENTRO del bucle for.
Esto implica que vamos a pedir este valor tantas veces como mida el vector. Si el vector tiene dos elementos, lo pediremos dos veces.
Si tiene 100 elementos, pediremos el valor 100 veces....
Esto no es nada lógico. Lo que queremos es pedir el valor UNA sola vez, y luego buscar en el vector a ver si existe.
Por lo tanto, la línea donde pedimos el valor a buscar, tiene que ir antes del bucle for

Código: [Seleccionar]
valorDado = Integer.parseInt(JOptionPane.showInputDialog("Digite el valor que desea buscar?"));
for(int i=0;i<vector.length; i++)
    {
      if(vector[i]==valorDado)
      {
      posicion=i+1;
      JOptionPane.showMessageDialog(null,"El valor "+valorDado+" está en la posición "+posicion);
    }
      else
      {
     JOptionPane.showMessageDialog(null,"El valor "+valorDado+" no está en el vector");   
      }
   }

Ok, ya tenemos el valor y ahora recorremos el vector, elemento a elemento, a ver si coincide con el valorDado.
Vamos a eliminar las líneas en donde estábamos usando la variable/atributo "posicion" y a modificar el código para hacer lo mismo, pero sin este atributo.
Código: [Seleccionar]
valorDado = Integer.parseInt(JOptionPane.showInputDialog("Digite el valor que desea buscar?"));
for(int i=0;i<vector.length; i++)
    {
      if(vector[i]==valorDado)
      {
      JOptionPane.showMessageDialog(null,"El valor "+valorDado+" está en la posición "+(i+1));
    }
      else
      {
     JOptionPane.showMessageDialog(null,"El valor "+valorDado+" no está en el vector");   
      }
   }

Ahora parece que está todo correcto, PERO, si ejecutasemos este programa nos encontraríamos con un comportamiento extraño.
El bucle for, no se va a detener si encuentra una coincidencia en el vector con el elemento dado, seguirá buscando.
De hecho, tal y como está escrito, nos enseñará un mensaje por cada elemento del vector, pues cada vez que compara lanza un mensaje u otro.
Si tuvieramos 50 elementos en el vector y el valor que hemos introducido coincide con dos de ellos, este programa nos mostraría 50 mensajes: 2 diciendo que ha encontrado coincidencia y otros 48 diciendo que no se encuentra el valor dado.
Pruébalo para que veas como ocurre esto. (No hace falta 50 elementos, hazlo con 5 ó 10 como mucho...)

Este comportamiento no es lógico y hay que modificarlo. Y para modificarlo, antes tenemos que decidir qué queremos que haga este método.

¿Queremos que el bucle se detenga en cuánto encuentre una coincidencia y deje de buscar?De este modo no sabremos si otros elementos del vector también coinciden.

¿O queremos que siga buscando y nos siga avisando si encuentra más coincidencias? Porque el valor dado podría coincidir con varios elementos del vector y de este modo tendremos un mensaje por cada coincidencia.

¿O queremos que solo salga un único mensaje cuando termine de buscar, pero informando de todas las posiciones que coinciden con el valor dado, ya sea 1 posicion, 5 o las que sean....

El enunciado no especifica esto y por lo tanto podemos escoger nosotros cómo queremos hacerlo.
A mi me gusta más la última opción, un único mensaje final con todas las coincidencias que se hayan podido encontrar. (tu luego elige la posibilidad que prefieras)


Para hacer esto, podemos crear una variable de tipo String donde cada vez que encontremos una coincidencia, le añadimos la posición donde se ha encontrado el valor dado.
Y así al final de todo, cuando el bucle termine, mostramos este String en pantalla con todas las coincidencias.
Ponemos ya el código completo:
Código: [Seleccionar]
public void buscarValor()
{
    int valorDado = Integer.parseInt(JOptionPane.showInputDialog("Digite el valor que desea buscar?"));
    String resultado = "El valor " + valorDado + " se ha encontrado en posiciones: ";
    for(int i=0;i<vector.length; i++)
    {
        if(vector[i]==valorDado)
        {
    resultado += (i+1) + " ";//Concatenamos posicion encontrada y un espacio en blanco por si se concatenan más valores
}
    }
    JOptionPane.showMessageDialog(null, resultado);
  }

Y con este código, ya deberíamos obtener un único mensaje con todas las posibles posiciones donde hayamos encontrado el valor, ya sea solo 1 vez, o 5 o 100000 veces...
Pero aún queda un detalle...¿qué pasa si no encontramos ninguna coincidencia?
Si esto ocurre, saldrá en pantalla el contenido del String resultado pero sin ninguna posicion que mostrar, y esto no queda elegante....
Tendríamos que preparar un segundo mensaje para este caso y mostrar un mensaje u otro según si se encontró alguna coincidencia o no.

Código: [Seleccionar]
public void buscarValor()
{
    int valorDado = Integer.parseInt(JOptionPane.showInputDialog("Digite el valor que desea buscar?"));
    String resultado = "El valor " + valorDado + " se ha encontrado en posiciones: ";
    for(int i=0;i<vector.length; i++)
    {
        if(vector[i]==valorDado)
        {
    resultado += (i+1) + " ";//Concatenamos posicion encontrada y un espacio en blanco por si se concatenan más valores
}
    }
    if (...)
        JOptionPane.showMessageDialog(null, resultado);
    else
         JOptionPane.showMessageDialog(null,"El valor "+valorDado+" no está en el vector");
  }

Con este if, según si se cumple una condición o no, mostraremos un mensaje u otro.
¿Y qué condición se ha de cumplir? Esto de momento te lo dejo para que lo pienses tú, a ver que se te ocurre...a ver de que manera puedes controlar el hecho de si se ha encontrado algo, o no se ha encontrado nada.
Puede que necesites añadir más lineas u otras variables de apoyo...

Sobre el siguiente método, el de buscarPosicion(), tu código tiene más o menos problemas que el anterior: se usa una variable/atributo "posicion" que no es necesaria, indicamos que el método recibe como parámetro la posición a buscar pero luego igualmente la pedimos al usuario con un diálogo de texto, y dicha petición está dentro del bucle y por lo tanto la petición se repetirá muchas veces, cuando solo queremos pedir el dato una única vez.

Intenta corregirlo con lo que he explicado y comparte por aquí de nuevo tu código y tus dudas.
Un saludo.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".