2009-02-13 8 views
2

J'ai cela, mais il y a une erreur, je ne comprends pas :(. Je suis relativement nouveau à Java.Aide nécessité de corriger le code Java

package hw; 
import java.util.Scanner; 

public class Problem1 
{ 
    public static void main (String [] args) 
    { 
     int cost; int number; double cost_unit; double total; 

     Scanner entrada = new Scanner(System.in);    

     System.out.println("Please enter the cost of the product."); 
     cost = entrada.nextInt(); 

     while (cost>0){ 

      System.out.println("Please enter the amount of units to be sold"); 
      number = entrada.nextInt(); 

      if (number>0); 

      cost_unit = cost * 1.4; 
      total = cost_unit*number; 

      System.out.printf("Cost per unit will be $ %d\n",cost_unit); 
      System.out.printf("Cost per unit will be $ %d\n",total);         
     } 
    }     
} 

// Je veux juste l'utilisateur saisissez le coût d'un produit, donner un certain nombre d'unités à commander, et je veux que le programme trouve le prix final du produit avec un bénéfice de 40%

Répondre

2

En printf, %d est un entier décimal signé, alors que cost_unit et total doubles. Vous devriez utiliser %f à la place.

System.out.printf("Cost per unit will be $ %f\n",cost_unit); 
System.out.printf("Cost per unit will be $ %f\n",total); 
1

Quelques conseils:.

while (cost>0) 

Do vous voulez vraiment un while -loop ici? Vous semblez vérifier si le coût est positif. Cette instruction if ne fait rien d'utile.

+0

Je suggère que le post-auteur utilise un EDI comme NetBeans ... il aurait souligné 'if (number> 0)' et donné un avertissement. – cdmckay

1

Il semblerait que "if (number> 0);" déclaration n'aiderait pas beaucoup.

Essayez de changer à:

if (number>0) { 
    cost_unit = cost * 1.4; 
    total = cost_unit*number; 

    System.out.printf("Cost per unit will be $ %d\n",cost_unit); 
    System.out.printf("Cost per unit will be $ %d\n",total); 
} 

EDIT: Il semble aussi il y a une boucle infinie si le (premier) coût spécifié est> 0, puisque vous aint changer (coût) dans la boucle.

1

Sans regarder trop profondément le code, une chose qui attrape mon attention est:

if (number>0); 

cost_unit = cost * 1.4; 
total = cost_unit*number; 

Probablement vous le souhaitez:

if (number>0) { 
    cost_unit = cost * 1.4; 
    total = cost_unit*number; 
} 

BTW, je l'ai vu auparavant. .... mais je ne suis pas tout à fait sûr où ...

+0

merci l'homme! mais maintenant que je cours le programme il semble que mes variables sont incorrectement déclarées, des conseils sur cela? –

1

changement

if (number>0); 

    cost_unit = cost * 1.4; 
    total = cost_unit*number; 

à

 if (number>0) { 
     cost_unit = cost * 1.4; 
     total = cost_unit*number; 
     } 
1

Si vous étudiez la documentation pour la syntaxe de format que vous utilisez lors de l'impression de votre résultat, vous vous rendrez compte que utilisez le formatage entier (% d) où vous voulez formater en nombre à virgule flottante (% f).

1

Les deux dernières lignes devraient être:

System.out.printf("Cost per unit will be $ %f\n", cost_unit); 
System.out.printf("Total cost will be $ %f\n", total); 
1

Ici, essayez ceci:

Je pense qu'il fait à peu près ce que vous avez besoin.

package hw; 

import java.util.Scanner; 


public class Problem1 { 
    public static void main (String [] args) { 
     int cost; 
     int number; 
     double cost_unit = 0; 
     double total = 0; 

     Scanner entrada = new Scanner(System.in); 

     System.out.println("Please enter the cost of the product."); 
     cost = entrada.nextInt(); 
     System.out.println("Please enter the amount of units to be sold"); 
     number = entrada.nextInt(); 

     cost_unit = cost * 1.4; 
     if (number>0) { 
      total = cost_unit*number; 
     } 

     System.out.printf("Cost per unit will be $ %f\n",cost_unit); 
     System.out.printf("Total cost will be $ %f\n",total); 
    } 
} 

Essayez-le et voyez si cela fonctionne. Par hasard êtes-vous à l'ITAM?

EDIT

A propos de la boucle original était correcte. Juste pour entourer le code que vous voulez répéter, et ajouter une condition pour quitter.

Quelque chose comme ceci après avoir créé le scanner (à peu près la façon dont vous avez fait dans la première tentative):

while(cost > 0) { 
    System.out.println("Please enter the cost of the product (0 to exit the progam"); 
    cost = entrada.nextInt(); 
    ......... 
    ......... 
    ......... 
    System.out.printf("Total cost will be $ %f\n",total) 

} 

qui répétera le code entre accolades tandis que le coût est supérieur à 0.

de Bien sûr, vous devez changer la valeur initiale du coût, sinon il ne sera pas entrer dans le lopp la première fois et peut-être vous devriez nettoyer les valeurs avant chaque itération.

+0

Cela fonctionne! C'est un négatif, j'étudie au Honduras. Dans BTW .. Comment puis-je faire le programme se répéter, je pensais utiliser une boucle, mais je n'ai pas beaucoup d'expérience avec elle :) –

+0

Probablement votre professeur tirer l'exercice de la même endroit. – OscarRyz

2

Essayez et décrire réellement le problème:

Est-ce que javac ne compilera-il? C'est un problème de syntaxe.

Le programme ne s'est-il pas comporté comme prévu? Quelles parties ne se comporte pas? C'est un problème de logique.

Sans une description adéquate du problème, comment pourriez-vous vous attendre, vous ou d'autres personnes, à localiser les erreurs facilement? Vous allez avoir besoin de cette compétence pour apprendre davantage sur la programmation.

Retour à la recherche de problèmes dans votre code:

  • coût des articles individuels sont des nombres entiers. N'a pas de sens si je veux vendre la gomme qui coûte 0,75 cents
  • la boucle while boucle en boucle infiniment si vous entrez quoi que ce soit sauf 0 pour le coût
  • si la condition ne fait rien ... c'est à dire qu'il n'y a aucune différence si Vous avez entré 0 ou moins unités ou plus de 0 unités
  • cost_unit = cost * 14 Vous voulez probablement nommer cost_unit à quelque chose comme retail_unit - parce que c'est le prix de détail. coût * marge bénéficiaire = prix de détail, non?
Questions connexes