Erro em estrutura de decisão em algoritmo Java?

Eu fiz esse código, que tendo como dados de entrada o preço de um produto e o código dele, mostra o preço junto do local de origem (se o código não for nenhum dos que o código reconhece, ele dá como importado), mas não sei porque ele dá o seguinte erro: Erro: Não foi possível localizar nem carregar a classe principal

Além disso, nas linhas onde estão os breaks, fica a interrogação vermelha, escrito “break outside switch or loop”. Sem os breaks, o código funciona, mas ai ele imprime na saída todos os resultados possíveis que estão abaixo do resultado correto. Alguém sabe como resolver?

public static void main(String[] args) {
     int code;
    float price;
    Scanner entrada = new Scanner(System.in);
    System.out.println("Digite o preço:");
    price = entrada.nextInt();
    System.out.println("Digite o código:");
    code = entrada.nextInt();
    if (code==1){
        System.out.println("Preço: "+ price +". Procedência: Sul");
        break; 
    } else { 
        System.out.println("Importado");
    }
     if (code==2){
        System.out.println("Preço: "+ price +". Procedência: Norte");
        break; 
    } else { 
        System.out.println("Importado");
    }
     if (code==3){
        System.out.println("Preço: "+ price +". Procedência: Leste");
        break; 
    } else { 
        System.out.println("Importado");
    }
     if (code==4){
        System.out.println("Preço: "+ price +". Procedência: Oeste");
        break; 
    } else { 
        System.out.println("Importado");
    }
     if (code>=5 || code<=6){
        System.out.println("Preço: "+ price +". Procedência: Nordeste");
        break; 
    } else { 
        System.out.println("Importado");
    }
     if (code>=7 || code <=9){
        System.out.println("Preço: "+ price +". Procedência: Sudeste");
        break; 
    } else { 
        System.out.println("Importado");
    }
     if (code>=10 || code <=20){
        System.out.println("Preço: "+ price +". Procedência: Centro-oeste");
        break; 
    } else { 
        System.out.println("Importado");
    }
     if (code>=25 || code<=30){
        System.out.println("Preço: "+ price +". Procedência: Nordeste");
        break; 
    } else { 
        System.out.println("Importado");
    }

Você está usando um projeto “normal” ou um projeto “maven”?
Está utilizando netbeans ou eclipse ou qual ide?

Projeto normal, e estou usando o netbeans

Bom, normalmente fazer um build do projeto resolve a questão do “Não foi possível localizar nem carregar a classe principal”.
Outra coisa, switch é uma estrutura bem diferente do que você pôs no código. Você está estudando if/else if/else ou switch/case?

A instrução break serve para interromper laços ou o fluxo de um switch.
Se dentro desses if-else você quer interromper a execução de seu método, utilize a instrução return.

2 curtidas

Só pode ser utilizado break em while, for e switch e no caso especifico tem problemas no código já que o if foi implementado errado:

Online IDEONE

import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
	    int code;
	    float price;
	    Scanner entrada = new Scanner(System.in);
	    System.out.println("Digite o preço:");
	    price = entrada.nextInt();
	    System.out.println("Digite o código:");
	    code = entrada.nextInt();
	    if (code==1)
	    {
	        System.out.println("Preço: "+ price +". Procedência: Sul");
	    } 
	    else if (code==2) 
	    { 
	        System.out.println("Importado");
	    }
	    else if (code==3)
	    {
	        System.out.println("Preço: "+ price +". Procedência: Leste");
	    }
	    else if (code==4)
	    {
	        System.out.println("Preço: "+ price +". Procedência: Oeste");
	    } 
	    else if (code>=5 || code<=6)
	    {
	        System.out.println("Preço: "+ price +". Procedência: Nordeste");
	    } 
	    else if (code>=7 || code <=9)
	    {
	        System.out.println("Preço: "+ price +". Procedência: Sudeste");
	    }
	    else if (code>=10 || code <=20)
	    {
	        System.out.println("Preço: "+ price +". Procedência: Centro-oeste");
	    }
	    else if (code>=25 || code<=30)
	    {
	        System.out.println("Preço: "+ price +". Procedência: Nordeste");
	    } 
	    else 
	    { 
	        System.out.println("Importado");
	    }
	}
}
1 curtida

Exemplo usando return:

public static void main(String[] args) {
	Scanner entrada = new Scanner(System.in);
	System.out.println("Digite o preço:");
	float price = entrada.nextInt();
	System.out.println("Digite o código:");
	int code = entrada.nextInt();
	if (code == 1) {
		System.out.println("Preço: " + price + ". Procedência: Sul");
		return;
	}
	if (code == 2) {
		System.out.println("Preço: " + price + ". Procedência: Norte");
		return;
	}
	if (code == 3) {
		System.out.println("Preço: " + price + ". Procedência: Leste");
		return;
	}
	if (code == 4) {
		System.out.println("Preço: " + price + ". Procedência: Oeste");
		return;
	}
	if (code >= 5 || code <= 6) {
		System.out.println("Preço: " + price + ". Procedência: Nordeste");
		return;
	}
	if (code >= 7 || code <= 9) {
		System.out.println("Preço: " + price + ". Procedência: Sudeste");
		return;
	}
	if (code >= 10 || code <= 20) {
		System.out.println("Preço: " + price + ". Procedência: Centro-oeste");
		return;
	}
	if (code >= 25 || code <= 30) {
		System.out.println("Preço: " + price + ". Procedência: Nordeste");
		return;
	}
	System.out.println("Importado");
}

Exemplo usando if-else:

public static void main(String[] args) {
	Scanner entrada = new Scanner(System.in);
	System.out.println("Digite o preço:");
	float price = entrada.nextInt();
	System.out.println("Digite o código:");
	int code = entrada.nextInt();
	if (code == 1) {
		System.out.println("Preço: " + price + ". Procedência: Sul");
	} else if (code == 2) {
		System.out.println("Preço: " + price + ". Procedência: Norte");
	} else if (code == 3) {
		System.out.println("Preço: " + price + ". Procedência: Leste");
	} else if (code == 4) {
		System.out.println("Preço: " + price + ". Procedência: Oeste");
	} else if (code >= 5 || code <= 6) {
		System.out.println("Preço: " + price + ". Procedência: Nordeste");
	} else if (code >= 7 || code <= 9) {
		System.out.println("Preço: " + price + ". Procedência: Sudeste");
	} else if (code >= 10 || code <= 20) {
		System.out.println("Preço: " + price + ". Procedência: Centro-oeste");
	} else if (code >= 25 || code <= 30) {
		System.out.println("Preço: " + price + ". Procedência: Nordeste");
	} else {
		System.out.println("Importado");
	}
}
1 curtida

Sou um pequeno gafanhoto que está iniciando seus estudos com Java (por conta).

Pensei (deveras muito), mediante insegurança, incerteza e muito pouco domínio sobre o conteúdo em relação com os feras munidos de embasamento e muita experiência nos comentários, mãs, porém, todavia, entretanto… acho que posso contribuir com o meu primeiro post e se eu errar… eu tentei (e vocês corrijam-me, por favor), rs.

@Matheus_Dumont, talvez, acredito, o algoritmo funcione adequadamente substituindo os o operador || por &&.

@staroski, irei reutilizar seus códigos substituindo o || pelo &&.

Utilizando o return:

public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        System.out.println("Digite o preço:");
        float price = entrada.nextInt();
        System.out.println("Digite o código:");
        int code = entrada.nextInt();
        if (code == 1) {
            System.out.println("Preço: " + price + ". Procedência: Sul");
            return;
        }
        if (code == 2) {
            System.out.println("Preço: " + price + ". Procedência: Norte");
            return;
        }
        if (code == 3) {
            System.out.println("Preço: " + price + ". Procedência: Leste");
            return;
        }
        if (code == 4) {
            System.out.println("Preço: " + price + ". Procedência: Oeste");
            return;
        }
        if (code >= 5 && code <= 6) {
            System.out.println("Preço: " + price + ". Procedência: Nordeste");
            return;
        }
        if (code >= 7 && code <= 9) {
            System.out.println("Preço: " + price + ". Procedência: Sudeste");
            return;
        }
        if (code >= 10 && code <= 20) {
            System.out.println("Preço: " + price + ". Procedência: Centro-oeste");
            return;
        }
        if (code >= 25 && code <= 30) {
            System.out.println("Preço: " + price + ". Procedência: Nordeste");
            return;
        }
        System.out.println("Importado");
    }

Utilizando if-else:

public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        System.out.println("Digite o preço:");
        float price = entrada.nextInt();
        System.out.println("Digite o código:");
        int code = entrada.nextInt();
        if (code == 1) {
            System.out.println("Preço: " + price + ". Procedência: Sul");
        } else if (code == 2) {
            System.out.println("Preço: " + price + ". Procedência: Norte");
        } else if (code == 3) {
            System.out.println("Preço: " + price + ". Procedência: Leste");
        } else if (code == 4) {
            System.out.println("Preço: " + price + ". Procedência: Oeste");
        } else if (code >= 5 && code <= 6) {
            System.out.println("Preço: " + price + ". Procedência: Nordeste");
        } else if (code >= 7 && code <= 9) {
            System.out.println("Preço: " + price + ". Procedência: Sudeste");
        } else if (code >= 10 && code <= 20) {
            System.out.println("Preço: " + price + ". Procedência: Centro-oeste");
        } else if (code >= 25 && code <= 30) {
            System.out.println("Preço: " + price + ". Procedência: Nordeste");
        } else {
            System.out.println("Importado");
        }
    }

Espero ter ajudado, :no_mouth:.

Dá pra fazer assim também, misturando switch com ifs

public static void main(String[] args) {

	Scanner entrada = new Scanner(System.in);

	System.out.print("Digite o código: ");
	int code = entrada.nextInt();

	switch (code) {
	case 1:
		System.out.println("case " + code);
		break;
	case 2:
		System.out.println("case " + code);
		break;			
	case 3:
		System.out.println("case " + code);
		break;
	case 4:
		System.out.println("case " + code);
		break;
	default:
		if (code >= 5 && code <= 6) {
			System.out.println("if (code >= 5 && code <= 6) " + code);
		} else if (code >= 7 && code <= 9) {
			System.out.println("else if (code >= 7 && code <= 9) " + code);
		} else if (code >= 10 && code <= 20) {
			System.out.println("else if (code >= 10 && code <= 20) " + code);
		} else {
			System.out.println("Importado: " + code);
		}
		break;
	}

	entrada.close();

}
1 curtida

Valeu pela ajuda! Mas desse jeito não tem como mostrar o preço junto com a procedência, já que switch não aceita float (que seria o preço), certo?

Então, acho que não faria diferença, porque um número, por exemplo, entre 5 e 7, vai ser sempre maior ou igual a 5 e menor ou igual a 7, então tanto o operador || (or/ou) como o && (and/e) funcionariam. O operador || só precisa que uma das opções sejam verdadeiras, e como as duas são, ele valida a opção. O operador && precisa que as duas opções sejam verdadeiras, e como as duas são, ele também valida a opção. Valeu pela ajuda!

Valeu amigo, funcionou perfeitamente