Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Duda en JAVA, comportamiento raro en un FOR

Estas en el tema de Duda en JAVA, comportamiento raro en un FOR en el foro de Java en Foros del Web. Tengo que hacer esto: Código: 1. Un vector en un espacio tridimensional es una tripleta de valores reales (x,y,z). 2. Deseamos confeccionar un programa que ...
  #1 (permalink)  
Antiguo 04/12/2013, 06:07
 
Fecha de Ingreso: diciembre-2013
Mensajes: 36
Antigüedad: 10 años, 5 meses
Puntos: 1
Pregunta Duda en JAVA, comportamiento raro en un FOR

Tengo que hacer esto:

Código:
1. Un vector en un espacio tridimensional es una tripleta de valores reales (x,y,z). 
2. Deseamos confeccionar un programa que permita operar con dos vectores, utilizando 
métodos. 
3. Habrá un método verMenu, en el cual se visualizará una pantalla con las siguientes 
opciones: 
 __________________________
1. Introducir el primer vector 
2. Introducir el segundo vector 
3. Calcular la suma 
4. Calcular la diferencia 
5. Calcular el producto vectorial 
6. Calcular el producto escalar 
7. Calcular el ángulo (en grados) entre ellos 
8. Calcular la longitud 
9. Finalizar 
___________________________

Tras la ejecución de cada una de las acciones del menú éste reaparecerá en pantalla, a 
menos que la opción escogida sea la número 9. Si el usuario escoge una opción diferente, el 
programa advertirá al usuario de su error y el menú reaparecerá. 
 
4. Habrá un método verVector para la visualización en pantalla del vector introducido. 
5. Habrá un método para cada una de las funciones que se especifican en el menú. 
 
Las opciones 4, 5 y 8 pueden proporcionar resultados distintos en función del orden de los 
operandos, así que, si se escoge cualquiera de ellas, aparecerá un nuevo menú que permita 
seleccionar el orden de los operandos. 
 
Por ejemplo, la opción 4 mostrará el siguiente menú: 
Primer vector menos segundo vector 
Segundo vector menos primer vector 
Esto se realizará llamando al método verSubmenu. 
Nuevamente, si el usuario se equivoca, se le advertirá del error y se le permitirá corregirlo.
[url=http://www.uploadhouse.com/viewfile.php?id=18729778&showlnk=0][img]http://img8.uploadhouse.com/fileuploads/18729/1872977881b07c136b8884e3b4fbf14d8ce26a3b.jpg[/img][/url]

Y he hecho el siguiente código (os lo pongo "todo" por si queréis probarlo):
Código:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package vectortridimensional;
import java.util.*;
/**
 *
 * @author Joan
 */
public class VectorTridimensional {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        
        Scanner teclado=new Scanner(System.in);
        int opcion;
        int [] v1;
        v1 = new int[3];
        int [] v2;
        v2 = new int[3];
        
        System.out.println("Introduce una opción del menu.");
        verMenu();
        opcion=teclado.nextInt();

/*-------------------------------------------------------------------------*/        
        while(opcion!=9){
        
            
                switch(opcion){

                case 1: 
                   introVector(v1); 
                   muestraVector(v1);
                   break;

                case 2: 
                    introVector(v2); 
                    break;

                case 3: ; break;
                case 4: ; break;
                case 5: ; break;
                case 6: ; break;
                case 7: ; break;
                case 8: ; break;
                case 9: ; break;
                //default: System.out.println("Error" ); break;

                }
        }


    }
    
/*-------------------------------------------------------------------------*/    
    
    public static void verMenu(){
    System.out.println("1. Introducir el primer vector");
    System.out.println("2. Introducir el segundo vector");
    System.out.println("3. Calcular la suma");
    System.out.println("4. Calcular la diferencia");
    System.out.println("5. Calcular el producto vectorial");
    System.out.println("6. Calcular el producto escalar"); 
    System.out.println("7. Calcular el ángulo (en grados) entre ellos"); 
    System.out.println("8. Calcular la longitud"); 
    System.out.println("9. Finalizar"); 
}
    
// método introduce valores a un vector
    public static void introVector(int [] v){
        Scanner teclado=new Scanner (System.in);
       
        
        for(int i=0;i<v.length;i++){
            System.out.println("Introduce un valor para la posición "+i);
            v[i]=teclado.nextInt();
        }
        
}
    
// método muestra vector
    public static void muestraVector(int [] v){
        
        for(int i=0;i<v.length;i++){
            System.out.println(v[i]); 
        }
        
}
}
Pero cuando empiezo a introducir valores en el FOR, parece que no se completa o continua con la ejecución y no sale del mismo, se queda siempre ejecutanto el FOR hasta el infinito.

GRACIAS por ayudarme
  #2 (permalink)  
Antiguo 04/12/2013, 13:35
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Duda en JAVA, comportamiento raro en un FOR

Es pregunta habitual en el foro, así que no me voy a extender mucho, si quieres más información busca por el foro.

El problema viene por leer un int y pulsar enter en la consola. Si quieres evitar problemas usa nextLine.

Aparte de eso, no estás terminando bien la petición de datos, cuando estés en el elemento 9 de un vector de 9 posiciones, estarás pidiendo un nuevo número.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 04/12/2013, 19:31
Avatar de cyrux_cob  
Fecha de Ingreso: febrero-2007
Mensajes: 28
Antigüedad: 17 años, 2 meses
Puntos: 1
Respuesta: Duda en JAVA, comportamiento raro en un FOR

Saludos, el problema del código que has hecho no está en el for lo que pasa es que después que elijas una opción diferente de 9 como la variable opción no cambiará el while se mantiene infinito, y por eso cuando eliges la opción 1 o 2, e introduzca los datos, vuelve a repetirse el ciclo while y como la variable opcion está fija en uno de esos dos valores como es lógico te da la impresión de que el ciclo for se repite infinitamente pero no es así sino el while.
La solución está en que debes poner la llamada al método verMenu() dentro de un ciclo do while.

Quedaría más o menos así

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

import java.util.*;
/**
*
* @author Joan
*/
public class VectorTridimensional {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {

Scanner teclado=new Scanner(System.in);
int opcion;
int [] v1;
v1 = new int[3];
int [] v2;
v2 = new int[3];


/*-------------------------------------------------------------------------*/
do{

System.out.println("Introduce una opción del menu.");
verMenu();
opcion=teclado.nextInt();


switch(opcion){

case 1:
introVector(v1);
muestraVector(v1);
break;

case 2:
introVector(v2);
break;

case 3: ; break;
case 4: ; break;
case 5: ; break;
case 6: ; break;
case 7: ; break;
case 8: ; break;
case 9: ; break;
//default: System.out.println("Error" ); break;

}
}while(opcion!=9);


}

/*-------------------------------------------------------------------------*/

public static void verMenu(){
System.out.println("1. Introducir el primer vector");
System.out.println("2. Introducir el segundo vector");
System.out.println("3. Calcular la suma");
System.out.println("4. Calcular la diferencia");
System.out.println("5. Calcular el producto vectorial");
System.out.println("6. Calcular el producto escalar");
System.out.println("7. Calcular el ángulo (en grados) entre ellos");
System.out.println("8. Calcular la longitud");
System.out.println("9. Finalizar");
}

// método introduce valores a un vector
public static void introVector(int [] v){
Scanner teclado=new Scanner (System.in);


for(int i=0;i<v.length;i++){
System.out.println("Introduce un valor para la posición "+i);
v[i]=teclado.nextInt();
}

}

// método muestra vector
public static void muestraVector(int [] v){

for(int i=0;i<v.length;i++){
System.out.println(v[i]);
}

}
}
  #4 (permalink)  
Antiguo 05/12/2013, 02:08
 
Fecha de Ingreso: diciembre-2013
Mensajes: 36
Antigüedad: 10 años, 5 meses
Puntos: 1
Respuesta: Duda en JAVA, comportamiento raro en un FOR

Código:
Cita:
Iniciado por cyrux_cob Ver Mensaje
Saludos, el problema del código que has hecho no está en el for lo que pasa es que después que elijas una opción diferente de 9 como la variable opción no cambiará el while se mantiene infinito, y por eso cuando eliges la opción 1 o 2, e introduzca los datos, vuelve a repetirse el ciclo while y como la variable opcion está fija en uno de esos dos valores como es lógico te da la impresión de que el ciclo for se repite infinitamente pero no es así sino el while. La solución está en que debes poner la llamada al método verMenu() dentro de un ciclo do while. Quedaría más o menos así /* * To change this template, choose Tools | Templates * and open the template in the editor. */ import java.util.*; /** * * @author Joan */ public class VectorTridimensional { /** * @param args the command line arguments */ public static void main(String[] args) { Scanner teclado=new Scanner(System.in); int opcion; int [] v1; v1 = new int[3]; int [] v2; v2 = new int[3]; /*-------------------------------------------------------------------------*/ do{ System.out.println("Introduce una opción del menu."); verMenu(); opcion=teclado.nextInt(); switch(opcion){ case 1: introVector(v1); muestraVector(v1); break; case 2: introVector(v2); break; case 3: ; break; case 4: ; break; case 5: ; break; case 6: ; break; case 7: ; break; case 8: ; break; case 9: ; break; //default: System.out.println("Error" ); break; } }while(opcion!=9); } /*-------------------------------------------------------------------------*/ public static void verMenu(){ System.out.println("1. Introducir el primer vector"); System.out.println("2. Introducir el segundo vector"); System.out.println("3. Calcular la suma"); System.out.println("4. Calcular la diferencia"); System.out.println("5. Calcular el producto vectorial"); System.out.println("6. Calcular el producto escalar"); System.out.println("7. Calcular el ángulo (en grados) entre ellos"); System.out.println("8. Calcular la longitud"); System.out.println("9. Finalizar"); } // método introduce valores a un vector public static void introVector(int [] v){ Scanner teclado=new Scanner (System.in); for(int i=0;i<v.length;i++){ System.out.println("Introduce un valor para la posición "+i); v[i]=teclado.nextInt(); } } // método muestra vector public static void muestraVector(int [] v){ for(int i=0;i<v.length;i++){ System.out.println(v[i]); } } }
Muchas gracias, eres un máquina. Problema resuelto. GRACIAS.

Etiquetas: comportamiento, programa, raro, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 21:40.