Suma de vector

Iniciado por eduardoemen, 8 Septiembre 2013, 22:45 PM

0 Miembros y 1 Visitante están viendo este tema.

eduardoemen

Hola, si alguien puede ayudarme por favor, ingreso varios números en dos textfields (X y Y) y los guardo todos en un vector. Quisiera realizar operaciones entre esos números, por ejemplo sumar sólo las X, sumar sólo las Y, elevar a la potencia sólo las X, multiplicar el primer valor de las X con el primero de las Y y así sucesivamente. Todo esto ya lo he hecho pero sin arreglos y con código para ejecutar en la consola, ahora quisiera hacerlo con vectores ( para no escribir 20 veces todo ) y en una GUI.

import java.util.Vector;

public class CoeficienteArray extends javax.swing.JFrame {
      Vector <clientes> vecClientes= new Vector <clientes>();
    /**
     * Creates new form CoeficienteArray
     */
    public CoeficienteArray() {
        initComponents();
    }

   

    private void btninsertarActionPerformed(java.awt.event.ActionEvent evt) {                                           
         
         int x1=Integer.parseInt(x.getText());
         int y1=Integer.parseInt(y.getText());
         
         clientes objCliente=new clientes();
         
         objCliente.setInteligencia(x1);
         objCliente.setRendimiento(y1);
         
         vecClientes.addElement(objCliente);
         for (int i=0; i<vecClientes.size();i++){
         
          tablaUsuario.setValueAt(vecClientes.elementAt(i).getInteligencia(),i,0);
          tablaUsuario.setValueAt(vecClientes.elementAt(i).getRendimiento(),i,1);
             
         }
           this.x.setText("");
           this.y.setText("");
           
        }          Aquí viene main.......


Esta es la clase clientes.java que crea objCliente en el código de más arriba :         
public class clientes {
  /*String nombre;
  String apellido;*/
  int inteligencia;
  int rendimiento;
  void cliente(){
     
  }
  /*void setNombre(String n){
      nombre=n;
  }*/
   void setRendimiento(int y){
      rendimiento=y;
  }
    void setInteligencia(int x){
      inteligencia=x;
  }
  /*String getNombre(){
      return nombre;
  }*/
  int getRendimiento(){
      return rendimiento;
  }
  int getInteligencia(){
      return inteligencia;
  }
}
                       

       Si alguien me puede ayudar por favor, gracias de antemano y un saludo

Alien-Z

#1
¿No consigues obtener los elementos que has introducido en el vector o cuál es tu duda exactamente?.

Para consultarlos utiliza la operación get(i) donde i es la posición del vector a la que quieres acceder. Por ejemplo:

Código (java) [Seleccionar]
vecClientes.get(5); //Devuelve el quinto cliente del vector
vecClientes.get(3).setInversion(1050.8); //Utilizamos la operación "setInversion()" del tercer cliente pasándole como parámetro "1050.8"
verCliente.get(3).varPublica; //Accedemos a la variable "varPublica" del sexto cliente


Aqui tienes todas las operaciones que puedes utilizar:
- Java 6: http://docs.oracle.com/javase/6/docs/api/java/util/Vector.html
- Java 7: http://docs.oracle.com/javase/7/docs/api/java/util/Vector.html

Un saludo.

eduardoemen

Vale muchas gracias, voy a mirar con calma lo que me dices. El problema que tengo es que quiero hacer lo mismo que he hecho para consola pero con arrays y en una GUI. Por ejemplo:package coeficiente;
import java.util.*;
public class Coeficiente {
public static void main(String[] args) {
        Scanner sc = new Scanner (System.in);
        int i,j;
        int vectorx[ ];
        vectorx=new int [10];
       
        int vectory[ ];
        vectory= new int [10];
       
       
        for (i=0; i<10;i++){
            System.out.print ("Introduce numero x: ");
            vectorx=sc.nextInt();
        }
       
           for (j=0; j<vectory.length;j++){
           System.out.print ("Introduce numero y: ");
            vectory[j]=sc.nextInt();
           }
       
           
           for (i=0; i<vectorx.length;i++){
           System.out.printf("%d\n",vectory);
            }
              int suma=0;
              int sumapotx=0;
              for (i=0; i<vectorx.length;i++){
               suma +=vectorx;
               double potenciax;
               potenciax=Math.pow(vectorx, 2);
               sumapotx+=potenciax;
               System.out.print("potencia de x es " +potenciax+"\n"); 
               }System.out.printf("La sumatoria de las x es %d\n",suma);
                System.out.printf("La sumatoria de las potencias es %d\n",sumapotx);
   
         for (j=0; j<vectory.length;j++){
           System.out.printf("%d\n",vectory[j]);
            }
               int suma2=0;
               int sumapoty=0;
               for (j=0; j<vectory.length;j++){
               suma2 +=vectory[j];
               double potenciay;
               potenciay=Math.pow(vectory[j], 2);
               sumapoty+=potenciay;
               System.out.print("potencia de y es " +potenciay+"\n");
               }System.out.printf("La sumatoria de las y es %d\n",suma2);
                System.out.printf("La sumatoria de las potencias es %d\n",sumapoty);
               
               
int xy1= vectorx[0]*vectory[0];     
int xy2= vectorx[1]*vectory[1];
int xy3= vectorx[2]*vectory[2];
int xy4= vectorx[3]*vectory[3];
int xy5= vectorx[4]*vectory[4];
int xy6= vectorx[5]*vectory[5];
int xy7= vectorx[6]*vectory[6];
int xy8= vectorx[7]*vectory[7];
int xy9= vectorx[8]*vectory[8];
int xy10= vectorx[9]*vectory[9];

System.out.print("xy es: "+ xy1 + "\n");
System.out.print("xy es: "+ xy2 + "\n");
System.out.print("xy es: "+ xy3 + "\n");
System.out.print("xy es: "+ xy4 + "\n");
System.out.print("xy es: "+ xy5 + "\n");
System.out.print("xy es: "+ xy6 + "\n");
System.out.print("xy es: "+ xy7 + "\n");
System.out.print("xy es: "+ xy8 + "\n");
System.out.print("xy es: "+ xy9 + "\n");
System.out.print("xy es: "+ xy10+ "\n");
int summul=xy1+xy2+xy3+xy4+xy5+xy6+xy7+xy8+xy9+xy10;
System.out.print("la suma de las multiplicaciones es: "+ summul + "\n");


double x= suma/10;
double y= suma2/10;
System.out.print("Ex/N= " + x + "\n");
System.out.print("Ey/N= " + y + "\n");


double x2= Math.pow( x, 2);
double y2= Math.pow( y, 2);
System.out.print("x al cuadrado= "  + x2 + " \n");
System.out.print("y al cuadrado= "  + y2 + " \n");



double sx=Math.sqrt((sumapotx/10)-x2);
double sy=Math.sqrt((sumapoty/10)-y2);

System.out.print("sx es: " + sx+ " y sy es: " +sy + "\n");

double rxy= ((summul/10)-(x*y))/sx*sy;

System.out.print("el coeficiente es: " + rxy);
}
}
En vez de escribir 20 veces todo quiero usar bucles y en vez de consola introducir los 20 valores por dos textfield ( uno para X y otro para Y ) y meterlos en un array, luego hacer operaciones con esos valores introducidos. Es la variante de puntuaciones directas del coeficiente de correlación de Pearson.

X     Y   X2    Y2 XY
________________________________
105 4 11025 16 420
116 8 13456 64 928
103 2 10609 4 206
124 7 15376 49 868
137 9 18769 81 1233
126 9 15876 81 1134
112 3 12544 9 336
129 10 16641 100 1290
118 7 13924 49 826
105 6 11025 36 630
________________________________
1175 65 139245 489 7871

introduzco X y Y en un array y luego necesito elevar al cuadrado todas las X y todas las Y, sumar esos cuadrados y por último multiplicar X por Y y sumar esos resultados.
Entonces el problema que tengo es que no sé cómo acceder a esos elementos del array para realizar operaciones con ellos. Como te he mostrado, en modo consola y sin arrays algo he hecho, pero me gustaría ir un poco más allá. Gracias de nuevo y un saludo.

Alien-Z

#3
CitarVale muchas gracias, voy a mirar con calma lo que me dices. El problema que tengo es que quiero hacer lo mismo que he hecho para consola pero con arrays y en una GUI.

No hay ninguna direferencia en las operaciones, sean manejadas desde la consola o desde una interfaz; las cálculos, el contenido de las variables, etc. son exactamente los mismos. Lo único que tienes que cambiar es el modo de mostrar la informacion por pantalla, la introduccion de datos por parte del usuario, etc. y esos aspectos no afectan a la funcionalidad de tu programa.

Interfaces gráficas:
http://eui.upm.es/~jbobi/jbobi/LibroJava/193-246.pdf
https://www.fdi.ucm.es/profesor/balta/traspasjava/12swing_gui.pdf

Aqui no estás indicando los índices:

Código (java) [Seleccionar]
       for (i=0; i<10;i++){
           System.out.print ("Introduce numero x: ");
           vectorx=sc.nextInt();
       }
     
          for (j=0; j<vectory.length;j++){
          System.out.print ("Introduce numero y: ");
           vectory[j]=sc.nextInt();
          }
     
         
          for (i=0; i<vectorx.length;i++){
          System.out.printf("%d\n",vectory);
           }


Seria así:

Código (java) [Seleccionar]
       for (i=0; i < vectorx.length; i++){
           System.out.print ("Introduce numero x: ");
           vectorx[i] = sc.nextInt();
       }
     
          for (j=0; j < vectory.length; j++){
          System.out.print ("Introduce numero y: ");
           vectory[j]=sc.nextInt();
          }
     
         
          for (i=0; i<vectorx.length; i++){
          System.out.printf("%d\n",vectory[i]);
           }


*Revisa todo el código

¿Por qué en el último bucle utilizas el tamaño de "vectorx" como condición de fin pero trabajas con "vectory"?; aunque el tamaño sea el mismo debes poner el que corresponda en cada momento para futuras modificaciones.

Código (java) [Seleccionar]
int xy1= vectorx[0]*vectory[0];    
int xy2= vectorx[1]*vectory[1];
int xy3= vectorx[2]*vectory[2];
int xy4= vectorx[3]*vectory[3];
int xy5= vectorx[4]*vectory[4];
int xy6= vectorx[5]*vectory[5];
int xy7= vectorx[6]*vectory[6];
int xy8= vectorx[7]*vectory[7];
int xy9= vectorx[8]*vectory[8];
int xy10= vectorx[9]*vectory[9];

System.out.print("xy es: "+ xy1 + "\n");
System.out.print("xy es: "+ xy2 + "\n");
System.out.print("xy es: "+ xy3 + "\n");
System.out.print("xy es: "+ xy4 + "\n");
System.out.print("xy es: "+ xy5 + "\n");
System.out.print("xy es: "+ xy6 + "\n");
System.out.print("xy es: "+ xy7 + "\n");
System.out.print("xy es: "+ xy8 + "\n");
System.out.print("xy es: "+ xy9 + "\n");
System.out.print("xy es: "+ xy10+ "\n");


Esto se puede simplificar:

Código (java) [Seleccionar]
for(int i = 0; i < N; i++)
  System.out.println("Posicion XY" + i + ": " + vectorx[i]*vectory[i]);


Creas un montón de variables que solo utilizas para mostrar su valor por pantalla, es un uso incorrecto de la memoria; debes imprimir directamente:

Código (java) [Seleccionar]
System.out.println(var1 + var2 + var3...);

CitarEn vez de escribir 20 veces todo quiero usar bucles y en vez de consola introducir los 20 valores por dos textfield ( uno para X y otro para Y ) y meterlos en un array, luego hacer operaciones con esos valores introducidos. Es la variante de puntuaciones directas del coeficiente de correlación de Pearson.

Para el coeficiente de correlación de Pearson no necesitas más que 3 variables:
-Una para almacenar la covarianza entre X e Y.
-Otra para guardar la desviación típica de X.
-Y otra para la desviación típica de Y.

Crea un método al que le pases los vectores X e Y y te devuelva su covarianza. Del mismo modo implementa un método que calcule la desviación tipica de una variable aleatoria cuantitativa. Con los 3 valores que te devuelven esas funciones puedes calcular el coeficiente de correlación.

Utiliza las etiquedas GeSHi y manten el sangrado en todo el programa para que el código quede más claro de cara a otros foreros.

Un saludo.

eduardoemen

Vale muchas gracias, el de consola seguro tiene errores y usé varias variables para imprimirlas con el objetivo de hacerme más claro el programa, ir paso a paso, desmenuzarlo poco a poco viendo qué produce cada sentencia que creaba. Después pensé que podría usar arrays y luego que podría hacerlo en una GUI y ahí me he quedado, encontré un código con la clase cleintes que te mostré anteriormente y muestra los elementos en tablaUsuario. Ayer encontré un ejemplo de sumar y promediar los elementos de un vector pero todo se ejecuta en un JOptionPane.showMessageDialog():

http://jorgeportella.wordpress.com/2011/10/11/programa-de-vectores-sencillos-en-java-joptionpane/

Voy a leer detenidamente lo que me explicas, ya te contaré si progreso. Muchas gracias y un saludo.