1. Använd CODE-taggar för att klistra in kod. Det blir lättare att läsa.
2. Klasser i Java skall skrivas med versal först i namnet.
3. import static är fult...
4. Vectorerna borde typsäkras. Deklarera Vector<String> vct_plural istället för Vector vct_plural så slipper du typomvandla när du plockar ut object ur Vectorn.
5. När du skickar parametrar från en metod till en annan så är det bra om du inte byter namn på parametern i metodsignaturen. Det blir lättare att följa.
6. Ge variabler namn som visar vad de är eller vad de gör... Samma med metodnamn.
7. Svaret på din fråga.
for (int i = 0; i < 10; i++) {
svar1 = (Object) vct_plural.elementAt(i);
if (!svar1.equals(0)) {
skrivut(svar1);
}
}
Det är inte säkert att du har 10 object i vectorn.
När du loopar över en vector finns det tre sätt att göra det på.
Det ena är att kolla efter hur många objekt som finns i vectorn. Såhär:
for (int i = 0; i < vct_plural.size(); i++) {
svar1 = (Object) vct_plural.elementAt(i);
if (!svar1.equals(0)) {
skrivut(svar1);
}
}
Den andra är att göra en så kallad for-each-loop. Den ser ut såhär:
for (String svar : vct_plural) {
skrivut(svar);
}
Det är den jag föredrar att använda om man ska loopa igenom allt.
Den sista är att använda en while-sats.
Den ser ut såhär:
Enumeration<String> pluralEnum = vct_plural.elements();
while (pluralEnum.hasMoreElements()) {
String svar = pluralEnum.nextElement();
skrivut(svar);
}
Jag gjorde en liten refactoring på din kod, och lite så här skulle jag skriva den, om jag ville ha den i en klass. Att jag skulle göra en egen klass för varje myntslag och låta dessa ta hand om beräkningarna är en helt annan sak... Den lösningen kan jag hjälpa dig med om du vill...
Limes lösning:
/*
* Vaxelraknare.java
*
* Created on den 23 februari 2007, 09:33
*
*
* Klass som frågar användaren efter belopp och lämnad betalning och sedan räknar ut
* vilka valörer användaren skall få tillbaka.
*/
import static javax.swing.JOptionPane.showInputDialog;
import static javax.swing.JOptionPane.showMessageDialog;
import java.util.Vector;
/**
*
* @author Petta
*/
public class Vaxelraknare {
static Vector<String> resultVector = new Vector<String>();
/** Creates a new instance of vaxelraknare */
public static void main(String[] args) {
String kostnadsInmatning;
String beloppsInmatning;
int kostnad;
int belopp;
kostnadsInmatning = showInputDialog("Mata in kostnaden");
kostnad = Integer.parseInt(kostnadsInmatning);
beloppsInmatning = showInputDialog("Mata in belopp");
belopp = Integer.parseInt(beloppsInmatning);
calculateChange(kostnad, belopp);
}
public static void calculateChange(int kostnad,
int belopp) {
int change;
// räknar ut växeln
change = belopp - kostnad;
if (change == 0) {
showMessageDialog(null, " Du får ingen växel tillbaka");
}
change = changeCounter(change, 100);
change = changeCounter(change, 50);
change = changeCounter(change, 20);
change = changeCounter(change, 10);
change = changeCounter(change, 5);
change = changeCounter(change, 1);
for (String svar : resultVector) {
skrivUt(svar);
}
System.exit(0);
}
public static void skrivUt(Object skrivuttext) {
// skriver ut hur många av varje myntsort som ges tillbaka.
showMessageDialog(null, skrivuttext);
}
private static int changeCounter(int currentChange, int denomination)
{
int denominationCounter = 0;
while (denomination <= currentChange) {
currentChange = currentChange - denomination;
denominationCounter = denominationCounter + 1;
}
resultVector.addElement(getDenominationString(denominationCounter, denomination));
return currentChange;
}
private static String getDenominationString(int denominationCounter, int denomination)
{
String result = denominationCounter + " ";
switch (denomination) {
case 100:
result+= "hundringar";
break;
case 50:
result += "femtiolappar";
break;
case 20:
result += "tjugor";
break;
case 10:
result += "tior";
break;
case 5:
result += "femmor";
break;
default:
result += "enkronor";
break;
}
return result;
}
}