2016-09-04 2 views
-2

Ich schreibe eine Methode, die die Provision berechnet, die ein Unternehmen seinem Lieferanten für ein bestimmtes Produkt gibt, jedoch nicht ausgeführt wird. Bitte helfen Sie. Hier sind die Richtlinien, denen ich folgen muss.Java-Methode nicht berechnet

Diese Funktion berechnet die Provision, die ein Unternehmen seinem Lieferanten für ein bestimmtes Produkt gibt. Die Kommission wird wie folgt berechnet (ich kann sicher davon ausgehen, Menge größer als 0 ist):

Wenn es eine Jahreslizenz ist, sind die Preise:

  • 10%, wenn Verkauf zwischen $ 0 und $ 1.000
  • ist
  • 15%, wenn Verkauf zwischen $ 1.001 und $ 10.000
  • 20% ist, wenn Verkauf oben ist $ 10.000

wenn es eine immer-Lizenz (nicht ein jährliches eins) ist, sind die Preise:

  • 10%, wenn Verkauf ist zwischen $ 0 und 10.000 $
  • 15%, wenn Verkauf zwischen $ 10.001 und $ 50.000
  • 20% ist, wenn Verkauf oben ist $ 50.000

ich versuchte, die obige Logik in schreiben Mit dem folgenden Code:

public static int commissionRate(boolean isAnnualLicense, int saleAmount) { 
    if (isAnnualLicense == true){ 
     if (saleAmount <= 1000){ 
      return commissionRate(true,10); 
     } else if (saleAmount >= 1001 && saleAmount <= 10000) { 
      return commissionRate(true,15); 
     } else if (saleAmount > 10001) { 
      return commissionRate(true,20); 
     } else { 
      if (isAnnualLicense == false) { 
       if (saleAmount >= 10000) { 
        return commissionRate(false,10); 
       } else if (saleAmount >= 100001 && saleAmount <= 50000) { 
        return commissionRate(false, 15); 
       } else if (saleAmount >= 50001) { 
        return commissionRate(false,20); 
       } 
      } 
     } 
    } 
    return 0; 
} 

das ist, was es soll Ausführung werden:

public void testCommission(){ 
    Assert.assertEquals("commision for annual sales, 1,000 should be 10", 10, Assignment3.commissionRate(true,1000)); 
    Assert.assertEquals("commision for annual sales, 1,001 should be 15", 15, Assignment3.commissionRate(true,1001)); 
    Assert.assertEquals("commision for annual sales, 10,000 should be 15", 15, Assignment3.commissionRate(true,10000)); 
    Assert.assertEquals("commision for annual sales, 10,001 should be 20", 20, Assignment3.commissionRate(true,10001)); 
    Assert.assertEquals("commision for OneTime sales, 10,000 should be 10", 10, Assignment3.commissionRate(false,10000)); 
    Assert.assertEquals("commision for OneTime sales, 10,001 should be 15", 15, Assignment3.commissionRate(false,10001)); 
    Assert.assertEquals("commision for OneTime sales, 50,000 should be 15", 15, Assignment3.commissionRate(false,50000)); 
    Assert.assertEquals("commision for OneTime sales, 50,001 should be 20", 20, Assignment3.commissionRate(false,50001)); 
} 

@Grade(points=25) 
@Test 

Jede Hilfe wird geschätzt. Danke im Voraus.

+5

Was nicht ausgeführt wird? Was meinst du mit "nicht ausführen"? – Li357

+0

Ich fügte hinzu, was es ausführen soll. Tut mir leid, ich bin rostig mit meinem Java – rls1982

Antwort

1

Ihr Code wird nie den isAnnualLicense == false Teil erreichen, weil er auf der falschen Verschachtelungsebene ist. Es sollte so aussehen:

if (isAnnualLicense){ 
    if (saleAmount <= 1000){ 
     return 10; 
    } else if (saleAmount >= 1001 && saleAmount <= 10000) { 
     return 15; 
    } else { // saleAmount > 10001 
     return 20; 
    } 
} else { 
    if (saleAmount <= 10000) { 
     return 10; 
    } else if (saleAmount >= 100001 && saleAmount <= 50000) { 
     return 15; 
    } else { // saleAmount >= 50001 
     return 20; 
    } 
} 

können Sie dies weiter vereinfachen, indem commision Rate einer Variablen zugewiesen, und eine einzelne return an der Unterseite des Verfahrens machen:

int rate; 
if (isAnnualLicense){ 
    if (saleAmount <= 1000){ 
     rate = 10; 
    } else if (saleAmount >= 1001 && saleAmount <= 10000) { 
     rate = 15; 
    } else { // saleAmount > 10001 
     rate = 20; 
    } 
} else { 
    if (saleAmount <= 10000) { 
     rate = 10; 
    } else if (saleAmount >= 100001 && saleAmount <= 50000) { 
     rate = 15; 
    } else { // saleAmount >= 50001 
     rate = 20; 
    } 
} 
return rate; 
+0

Danke, aber ich nehme 25 Punkte für diese Ausführung und es gibt mir immer noch nicht die Punkte. Jede Hilfe ist dankbar, danke. – rls1982

+0

@ rls1982 Ich sehe, was Sie tun - die Methode ruft sich selbst an, und sie soll es nicht tun. Schau dir den Schnitt an. – dasblinkenlight

+0

Danke für Ihre Hilfe, aber das funktioniert immer noch nicht. Was kann ich jetzt machen? Ich schätze Ihre Hilfe. Ich muss das richtig machen – rls1982