2015-01-25 4 views
0

Я создаю программу стиля piggybank в java для проекта класса, который может добавлять, вычитать, сравнивать и увеличивать/уменьшать монеты. Я пытаюсь добавить в код следующий метод toString, чтобы он отображал правильные слова для соответствующих значений монет.Java: добавление целочисленных значений в строку, только если определенное значение, строка форматирования правильно

Если какая-либо из четвертей, копейки, никели или пенни равна 0, я хочу, чтобы они были полностью оторваны от строки. Если есть только 1 из кварталов, копейки, никели или пенни, я хочу, чтобы на выходе были указаны квартал, копейка, никель или копейка.

Так в основном, если в течение 4 кварталов, 0 пятаков, 0 никелевые и 1 пенни, он бы составил $ 1,01 в банке выход: $ 1,01: 4 четверти, 1 пенни

Я не уверен, как это сделать это. Я пытался исчерпывающе сделать это с помощью утверждений, но я уверен, что есть лучший способ. Вот код, который у меня есть в настоящее время, который, очевидно, не работает, когда есть более одного значения, установленного в 0 или 1, и это выглядит нелепо.

public String toString() { 
    NumberFormat fmt = NumberFormat.getCurrencyInstance(); 
    String str = fmt.format(amountInJar()); //amountInJar is a double value of the current currency 

    if (this.quarters > 1 && this.dimes > 1 && this.nickels > 1 
      & this.pennies > 1) { 
     str = str + ": " + quarters + " quarters, " + dimes + " dimes, " 
       + nickels + " nickels, " + pennies + " pennies "; 
    } else if (quarters == 1) { 
     str = str + ": " + quarters + " quarter, " + dimes + " dimes, " 
       + nickels + " nickels, " + pennies + " pennies "; 
    } else if (quarters == 0) { 
     str = str + ": " + dimes + " dimes, " + nickels + " nickels, " 
       + pennies + " pennies "; 
    } else if (dimes == 1) { 
     str = str + ": " + quarters + " quarters, " + dimes + " dime, " 
       + nickels + " nickels, " + pennies + " pennies "; 
    } else if (dimes == 0) { 
     str = str + ": " + quarters + " quarters, " + nickels 
       + " nickels, " + pennies + " pennies "; 
    } else if (nickels == 1) { 
     str = str + ": " + quarters + " quarters, " + dimes + " dimes, " 
       + nickels + " nickel, " + pennies + " pennies "; 
    } else if (nickels == 0) { 
     str = str + ": " + quarters + " quarters, " + dimes + " dimes, " 
       + pennies + " pennies "; 
    } else if (pennies == 1) { 
     str = str + ": " + quarters + " quarters, " + dimes + " dimes, " 
       + nickels + " nickels, " + pennies + " penny"; 
    } else if (pennies == 0) { 
     str = str + ": " + quarters + " quarters, " + dimes + " dimes, " 
       + nickels + " nickels "; 
    } 

    return str; 
} 

Я знаю, что это будет просто легче форматировать с четверти (ов), гривенник (ов), никеля (ов), пенни (ий), но для того, чтобы пройти испытания инструкторов JUnit, он должен быть отформатирован таким образом.

Благодарим за помощь!

ответ

0

Просто сделайте это отдельно для каждого типа монет. Для обработки разделителей («:» и «,») удобной трюкой является добавление разделителя после каждого элемента, а затем удаление дополнительного разделителя с конца. Что-то вроде этого:

str = str + ": "; 

if(this.quarters > 1) 
    str = str + this.quarters + " quarters, "; 
else if(this.quarters == 1) 
    str = str + "1 quarter, "; 

if(this.dimes> 1) 
    str = str + this.dimes+ " dimes, "; 
else if(this.dimes== 1) 
    str = str + "1 dime, "; 

// same thing for nickels and pennies 

str = str.substring(0, str.length() - 2); // cut off the last two characters, i.e. the extra comma and space 
+0

Большое вам спасибо за помощь! Я потратил столько времени, пытаясь понять это, и я никогда бы не подумал об этом. Еще раз спасибо. – TABmayfield