Problema da mochila-esta num loop infinito e nao consigo parar p/ mostrar o resultado[RESOLVIDO]
7 respostas
Y
yokoyama
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
importjava.util.*;importjava.util.Scanner;publicclassMochila{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);intdiamante;intpesoDiamante;intvalorDiamante;doublequantidadeDiamante;doublevalorTotalDiamante;intpesoMochiLa;doublepesoTotalDiamante;//entrada de dados para o tecladoSystem.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(inti=0;i<=2;i=i++){if(pesoDiamante<=pesoMochiLa){quantidadeDiamante++;// contando o numero de diamantespesoTotalDiamante=(pesoDiamante*quantidadeDiamante);if(pesoTotalDiamante<=pesoMochiLa){// se for menor ou igual o peso da mochila era para e sair do loopbreak;}// apos sair tinha q mostrar o resultadovalorTotalDiamante=(pesoDiamante*valorDiamante);System.out.printf("quantidade diamante: \n",quantidadeDiamante);System.out.printf("valor diamante R$:%f\n",valorTotalDiamante);}}}}
Tenta fazer assim e vê se consegue entender melhor
tkx1 like
Seu código está errado!
Adaptei:
importjava.util.Scanner;publicclassMochila{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);intdiamante;intpesoDiamante;intvalorDiamante;doublequantidadeDiamante,quantidadeDiamanteMochila=0;doublevalorTotalDiamante;intpesoMochiLa;doublepesoTotalDiamante=0;//entrada de dados para o tecladoSystem.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(inti=0;i<=2;i=i++){if(pesoDiamante<=pesoMochiLa){quantidadeDiamanteMochila++;// contando o numero de diamantespesoTotalDiamante=(pesoDiamante*quantidadeDiamanteMochila);if(pesoTotalDiamante>pesoMochiLa){// se for menor ou igual o peso da mochila era para e sair do loopquantidadeDiamanteMochila--;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!
tkx1 like
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!
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)