Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Nouveau Candidat au Club
    Methode calculateTotalPrice() dans un superMarché
    J'ai un exercice que j'ai cherché et j'ai pas encore trouvé:

    Je voudrais implémenter une méthode calculateTotalPrice(),qui se trouve dans l'énoncé suivant:

    "Vous travaillez pour un magasin qui souhaite offrir une réduction de "discount%" sur le produit le plus cher acheté par un client donné pendant la période des soldes.
    Le responsable du magasin vous demande de développer la méthode calculateTotalPrice().
    Cette méthode:
    prend en paramètres la liste de prix des produits achetés par le client et le pourcentage de réduction" discount".
    retourne le prix de vente total (arrondi à l'entier inférieur si le total ne tombe pas rond).
    Contraintes:
    0=<"discount"<=100
    0=<prix d'un produit <100000
    0<nombre de produits<100

    Je dois donc implémenter calculateTotalPrice(),le code est le suivant:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class CalculateTotalPrice {
     
     
    public static int calculateTotalPrice(int[] prices,int discount) {
     
    //write your code here
     
    return 0;
    }
    }


    Comment puis je l'implémenter svp?

  2. #2
    Nouveau Candidat au Club
    Re
    j'ai fait ce code mais en prenant un exemple,je n'ai pas la somme exacte:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public class CalculateTotalPrice {
     
    	public static void main(String[] args) {
    		int[] prices= {124,34,89,38};
    		System.out.println(calculateTotalPrice(prices, 20));
     
    	}
     
     
    	public static int calculateTotalPrice(int[] prices,int discount) {
    		int max=0;
    		int total=0;
    		for (int i=0; i < prices.length; i++)
    		{
    		    total += prices[i];
    		    if (prices[i] < max) max = prices[i];
    		}
    		return (int) Math.floor(((float) total) + ((float) max) -(max * discount / 100));
     
     
     
     
    	}
    }


    il ya quelque chose qui manque dans ce code,mais je n'ai pas encore trouvé

  3. #3
    Nouveau Candidat au Club
    Re
    C'est bon j'ai trouvé mieux et ça marche et j'obtient le code suivant:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public class CalculateTotalPrice {
     
    	public static void main(String[] args) {
    		int[] prices= {100,30,80,10};
     
    		System.out.println(calculateTotalPrice1(prices, 20));
     
    	}
     
    	public static int calculateTotalPrice1(int[] prices,int discount) {
    		int total=0;
    		int len=prices.length;
    		Arrays.sort(prices);
    		for(int i=0;i<len-1;i++) {
    			total=total+prices[i];
    		}
    		return (int)Math.floor(((float)total)+ (((float)prices[len-1])-(prices[len-1])*discount/100));
     
    	}
    }

    Mais j'aimerais le simplifier un peu,est ce que vous avez une idée svp?

  4. #4
    Nouveau Candidat au Club
    Re
    En fait je dois réduire à l'entier inférieur si le total n'est pas rond.
    Mais ma solution arrondit à l'entier supérieur.
    j'ai donc fait un ceil mais j'obtient le mëme résultat qu'un floor,
    comment arrondir à l'entier inférieur?

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public class CalculateTotalPrice {
     
    	public static void main(String[] args) {
    		int[] prices= {101,30,2,80,10};
    		System.out.println(calculateTotalPrice1(prices, 20));
     
    	}
    public static int calculateTotalPrice1(int[] prices,int discount) {
    		int total1=0;
    		int len=prices.length;
    		Arrays.sort(prices);
    		for(int i=0;i<len-1;i++) {
    			total1=total1+prices[i];
    		}
    		return (int)Math.floor(total1+ (((float)prices[len-1])-(prices[len-1])*discount/100));
     
    	}
    }


    En executant j'obtiens 203 alors que je dois obtenir 202 car en fait j'obtient 202,9 mais en prenant l'entier inférieur ,j'obtient 202.

    j'ai utilisé ceil avec le code return (int)Math.ceil(total1+ (((float)prices[len-1])-(prices[len-1])*discount/100));
    mais j'obtiens toujours 203, comment faire donc pour arrondir à l'entier inférieur?

  5. #5
    Modérateur

    un simple cast en entier va le faire.

    (int)209=209
    (int)209.1=209
    (int)209.5=209
    (int)209.999=209
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Nouveau Candidat au Club
    Re
    Ok je l'applique tout de suite et je vous dit si ça marche.
    Merci d'avance.

  7. #7
    Nouveau Candidat au Club
    Re
    J'ai fait un simple cast avec (int) mais j'obtient toujours
    203 au lieu d'obtenir 202(parce qu'en faite j'obtient 202,9
    et en prenant l'entier inférieur ça fait 202.
    J'ai fait ce code ci:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    public class CalculateTotalPrice {
     
    	public static void main(String[] args) {
    		int[] prices= {101,30,2,80,10};
    		System.out.println(calculateTotalPrice1(prices, 20));
     
    	}
     
    public static int calculateTotalPrice1(int[] prices,int discount) {
    		int total1=0;
    		int len=prices.length;
    		Arrays.sort(prices);
    		for(int i=0;i<len-1;i++) {
    			total1=total1+prices[i];
    		}
    		return (int) ( (total1+(float) ((prices[len-1])-((prices[len-1])*discount/100))));
     
    	}
    }


    En exécutant j'obtiens 203,alors que quand je fais une réduction de 20% sur un article qui coute 101 dans le
    tableau suivant{101,30,2,80,10} (vu que 101 est le plus cher ,on fait la réduction sur le produit le plus cher d'après l'énoncé)
    j'obtient (101-101*0.2)+30+2+80+10 qui fait bien 202.9,je veux qu'il me retourne l'entier inférieur
    donc je fais (int)202.9 qui est 202 en faisant return (int) ( (total1+(float) ((prices[len-1])-((prices[len-1])*discount/100))));
    mais il me retourne 203 et je ne comprends pas pourquoi?qu'est qui ne va pas dans cette ligne de code?:return (int) ( (total1+(float) ((prices[len-1])-((prices[len-1])*discount/100))));

  8. #8
    Modérateur

    Le calcul de la reduction se fait en entier dans ton cas. Donc tu "perds des chiffres".

    Essaye de remplacer comme ceci (par exemple) :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    discount/100 -> discount/100f
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Nouveau Candidat au Club
    Re
    je remplace par discount/100f,d'accord j'essaie

  10. #10
    Nouveau Candidat au Club
    Re
    Bravo ça marche!!! vous êtes trop fort,il m'a donné 202,il a arrondi à
    l'entier inférieur quand je remplace par discount/100f
    mais une question:c'est quoi le 100f?le f répresente quoi?

  11. #11
    Modérateur

    float, les nombres à virgule flottante de simple précision.

    Il est vrai qu'il vaudrait mieux prendre le réflexe d'utiliser d à la place, pour double, nombres à virgule flottante de double précision. Les limitations de float étant assez rapidement atteintes et menant à des résultats dérangeants.

    Quand on écrit un nombre juste comme 42 ou 100 ou 433, Java le considère comme un int. Mais 42f sera considéré comme un float et 42d comme un double.

    A noter que tu pourrais aussi faire 100.0 pour que ce soit un double, mais disons qu'avec un d, on est un peu plus explicite dans le fait qu'on veut vraiment un double, et que 100 ne ferait pas tout aussi bien l'affaire même si 100.0 n'utilise pourtant pas sa virgule.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  12. #12
    Nouveau Candidat au Club
    Re
    D'accord

###raw>template_hook.ano_emploi###