Problema da mochila-esta num loop infinito e nao consigo parar p/ mostrar o resultado[RESOLVIDO]

7 respostas
Y

Bom dia!!
o exercicio q estou tentando fazer seria o problema na mochila que tem q caber o maximo de material possivel sem ultrapassar o limite.
por exemplo a mochila tem 22kg e eu falo que tenho 22 unidade c/ o peso de 2kg para cada unidade mas coloquei num loop infinito c/ um break
para parar antes de estourar o limite da mochila.E depois que parar ele faz o calculo dos valor R$ vezes a quantidade que mostra o resultado final.
bom eu tentei mais nao consigo fazer sair do loop e nao sai a resposta pois nao sei porque nao passa pelos ifs que eu coloquei?

o codigo fonte esta aqui

import java.util.*;
import java.util.Scanner;

public class Mochila {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		int diamante;
		int pesoDiamante;
		int valorDiamante;
		double quantidadeDiamante;
		double valorTotalDiamante;
		int pesoMochiLa;

		double pesoTotalDiamante;

//entrada de dados para o teclado
		System.out.print("informe o peso da mochila:");
		pesoMochiLa = input.nextInt();

		System.out.print("informe a quantidade do diamante:");
		quantidadeDiamante = input.nextInt();

		System.out.print("informe o peso do diamante:");
		pesoDiamante = input.nextInt();

		System.out.print("informe o valor R$ do diamante:");
		valorDiamante = input.nextInt();

		for (int i = 0; i <= 2; i = i++) {
			if (pesoDiamante <= pesoMochiLa) {

				quantidadeDiamante++;// contando o numero de diamantes

				pesoTotalDiamante = (pesoDiamante * quantidadeDiamante);

				if (pesoTotalDiamante <= pesoMochiLa) {// se for menor ou igual o peso da mochila era para e sair do loop
					break;
				}
                               // apos sair tinha q mostrar o resultado
				valorTotalDiamante = (pesoDiamante * valorDiamante);
				System.out.printf("quantidade diamante: \n", quantidadeDiamante);
				System.out.printf("valor diamante R$:%f\n", valorTotalDiamante);

			}
		}
	}
}

obrigado a todos q tentaram me ajudar!!

7 Respostas

Giulliano

Cara seu código esta bem ruim …rsss

Olha só, vamos fazer o seguinte crie três classes

Diamante
Mochila
Main (uma classe chamada Main mesmo)

Dentro da classe diamante vc põe os atributos peso e valor;

Dentro da classe mochila vc cria um array de diamantes e o peso da mochila;

Dentro da classe mochila vc cria um método que adiciona diamantes até que o total não ultrapasse o peso definido na mochila;

Na classe Main vc cria um método main (public static void main) e faz a lógica .

Tenta fazer assim e vê se consegue entender melhor

tkx

Seu código está errado!

Adaptei:
import java.util.Scanner;

public class Mochila {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		int diamante;
		int pesoDiamante;
		int valorDiamante;
		double quantidadeDiamante, quantidadeDiamanteMochila = 0;
		double valorTotalDiamante;
		int pesoMochiLa;

		double pesoTotalDiamante = 0;

//entrada de dados para o teclado
		System.out.print("informe o peso da mochila:");
		pesoMochiLa = input.nextInt();

		System.out.print("informe a quantidade do diamante:");
		quantidadeDiamante = input.nextInt();

		System.out.print("informe o peso do diamante:");
		pesoDiamante = input.nextInt();

		System.out.print("informe o valor R$ do diamante:");
		valorDiamante = input.nextInt();

		for (int i = 0; i <= 2; i = i++) {
			if (pesoDiamante <= pesoMochiLa) {

				quantidadeDiamanteMochila++;// contando o numero de diamantes

				pesoTotalDiamante = (pesoDiamante * quantidadeDiamanteMochila);

				if (pesoTotalDiamante > pesoMochiLa) {// se for menor ou igual o peso da mochila era para e sair do loop
					quantidadeDiamanteMochila--;
                    break;
				}else{
                    if(pesoTotalDiamante == pesoMochiLa){
                        break;
                    }
                }
                               // apos sair tinha q mostrar o resultado
			}
		}
        pesoTotalDiamante = (pesoDiamante * quantidadeDiamanteMochila);
        valorTotalDiamante = (pesoTotalDiamante * valorDiamante);
				System.out.printf("quantidade diamante:%s\n", quantidadeDiamanteMochila);
				System.out.printf("valor diamante R$:%f\n", valorTotalDiamante);
	}
}

Observe ainda que vc só pega números inteiros com o scanner e declara alguns numeros double!
Nesse caso vc está desperdiçando espaço!

tkx

Quanto a modularizar o problema com classes, concordo completamente!
Agora, não há necessidade de arrays!
Use contadores, variáveis que incrementam e decrementam!

Não há necessidade de aumentar a complexidade do problema!

joselmocs

[mode flood on]

System.out.printf("valor diamante R$:%.2f\n", valorTotalDiamante);
Y

obrigado pela ajuda!!
consegui entender o meu erro!!

ate a proxima

edmarr

Depois que seu problema tiver resolvido, vá no primeiro post, editar o Título adicionando a tag [RESOLVIDO] no final do Título .

WellingtonRamos
yokoyama:
...
for (int i = 0; i &lt;= 2; i = i++) {
			if (pesoDiamante &lt;= pesoMochiLa) {

				quantidadeDiamante++;// contando o numero de diamantes

				pesoTotalDiamante = (pesoDiamante * quantidadeDiamante);//TODO: Observe aqui...

				//TODO: E aqui...
				if (pesoTotalDiamante &lt;= pesoMochiLa) {// se for menor ou igual o peso da mochila era para e sair do loop
					break;
				}
                               // apos sair tinha q mostrar o resultado
				valorTotalDiamante = (pesoDiamante * valorDiamante);
				System.out.printf(&quot;quantidade diamante: \n&quot;, quantidadeDiamante);
				System.out.printf(&quot;valor diamante R$:%f\n&quot;, valorTotalDiamante);

			}
		}
Parece-me que dependendo da condição de peso e quantidade, vai ultrapassar o peso da mochila e o if com o break nunca será alcançado... Entretanto, se a condição for atingida, o break finalizará o loop (ignorando o que há depois do break)
for (int i = 0; i &lt;= 2; i = i++) {
			//TODO Adicionar outra condição para caso de mochila acima da capacidade ou mudar o loop...
			if (pesoDiamante &lt;= pesoMochiLa) {

				quantidadeDiamante++;// contando o numero de diamantes

				pesoTotalDiamante = (pesoDiamante * quantidadeDiamante); 
				if (pesoTotalDiamante &lt;= pesoMochiLa) {// se for menor ou igual o peso da mochila era para e sair do loop
					// apos sair tinha q mostrar o resultado
					valorTotalDiamante = (pesoDiamante * valorDiamante);
					System.out.printf(&quot;quantidade diamante: \n&quot;, quantidadeDiamante);
					System.out.printf(&quot;valor diamante R$:%f\n&quot;, valorTotalDiamante);
					break;
				}

			}
		}
Criado 16 de março de 2010
Ultima resposta 16 de mar. de 2010
Respostas 7
Participantes 6