Porque meu programa entra em loop?

2 respostas
java
J

import java.util.Scanner;

public class Principal {

public static void main(String[] args){

int menu = 0;

int v[] = new int[20];

int i;

int total=0;

int media=0;
System.out.println("Digite os 20 numeros:");
		Scanner scanner = new Scanner(System.in);
			
			for(i=0;i<20;i++){
				v[i]=scanner.nextInt();
			}
				
				System.out.println("1-Soma");
				System.out.println("2-media");
				System.out.println("3-crescente");
				System.out.println("4-sair");
		
		
					menu = scanner.nextInt();
					do{
						
					
						switch(menu){
							case 1:
								
								total = somarTudo(v);
								System.out.println(total);
								break;
						
							
							
							case 2:
								
								total = mediaTudo(v);
								System.out.println(total);
								break;
								/*for(i=0;i<20;i++){
									total=total+v[i];
								}
								media = total/20;
								System.out.println("Total igual ah: "+total/20);
								break;*/
							
							case 3:
							
							
							
							case 4: System.exit(0);
								
							
						
							default: System.out.println("opção inválida");
						
						}
						
					} while (menu!=0);
}	
				
								public static int somarTudo(int[] v) {
									
									
									int total=0;
									for(int i=0; i < 20; i++){
										total=total+v[i];
									}
									return total;
									
									}	
								
								public static int mediaTudo(int[] v) {
									
									
									int total=0;
									for(int i=0; i < 20; i++){
										total=total+v[i];
									}
									return total/20;
									
									}	
								



}

2 Respostas

aix

Ola Jonathan_Oliveira,

não sei qual a lógica que deseja com seu programa mas o loop infinito que você tem é devido a seu while não ter um corpo alterando o valor do menu para 0 novamente, então uma vez dado uma condição true ele ficara nela para sempre, a 3 formas que vejo: Você define uma lógica dentro do while ou antes do retorno de cada método zerar o menu novamente ou antes da instrução break do switch zerar o menu novamente, ex:

import java.util.Scanner;

public class Principal {

    static int menu = 0;

    public static void main(String[] args) {
        int v[] = new int[20];
        int i;
        int total = 0;
        int media = 0;

        System.out.println("Digite os 20 numeros:");
        Scanner scanner = new Scanner(System.in);

        for (i = 0; i < 20; i++) {
            v[i] = scanner.nextInt();
        }

        System.out.println("1-Soma");
        System.out.println("2-media");
        System.out.println("3-crescente");
        System.out.println("4-sair");

        menu = scanner.nextInt();
        do {
            switch (menu) {
                case 1:
                    total = somarTudo(v);
                    System.out.println(total);
                    menu = 0;
                    break;
                case 2:
                    total = mediaTudo(v);
                    System.out.println(total);
                    menu = 0;
                    break;
                case 3:

                case 4:
                    System.exit(0);
                default:
                    System.out.println("opção inválida");
            }
        } while (menu != 0);
    }

    public static int somarTudo(int[] v) {
        int total = 0;
        for (int i = 0; i < 20; i++) {
            total = total + v[i];
        }
        return total;
    }

    public static int mediaTudo(int[] v) {
        int total = 0;
        for (int i = 0; i < 20; i++) {
            total = total + v[i];
        }
        return total / 20;
    }
}
J

Muito obrigado. Eu achava que ele não testaria a variável novamente após o break.

Criado 3 de abril de 2016
Ultima resposta 3 de abr. de 2016
Respostas 2
Participantes 2