webForumDet fria alternativet

vector

2 svar · 435 visningar · startad av Pettaaa

PettaaaMedlem sedan feb. 200712 inlägg
#1

Hej!
det är så att jag ska plocka ut ett object från en vector, det går bra men jag kan inte få med mig den ut ur en for-sats
här är koden:

/*
* vaxelraknare.java
*
* Created on den 22 februari 2007, 15:40
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/

package javauppg1;
import static javax.swing.JOptionPane.*; /* importerar klassen JOptionPane*/
import java.util.Vector;

/**
*
* @author Petta
*/
public class vaxelraknare {

/\*\* Creates a new instance of vaxelraknare \*/
public static void main(String\[\] args) {
    
    String inmatning1;
    String inmatning2;
    int omvandla_inmatning1;
    int omvandla_inmatning2;
    
    inmatning1 = showInputDialog("Mata in kostnaden");
    inmatning2 = showInputDialog("Mata in belopp");
    omvandla_inmatning1 = Integer.parseInt(inmatning1);
    omvandla_inmatning2 = Integer.parseInt(inmatning2);        
    
    rakna_ut_vaxel(omvandla_inmatning1,omvandla_inmatning2);
    
    
    
    
}
public static void rakna_ut_vaxel(int omvandla_inmatning3, int omvandla_inmatning4)
{
    int vaxel;
    int hundringar = 0;
    int femtio = 0;
    int tjugo = 0;
    int tio = 0;
    int fem = 0;
    int enkrona1 = 0;
    int enkrona2 = 0;
    int enkrona3 = 0;
    int enkrona4 = 0;
    Object svar1;
    
    
    
    
    Vector vct_plural = new Vector();
    
    
    
    
    //räknar ut växeln
    vaxel = omvandla_inmatning4 - omvandla_inmatning3;
    
    if(vaxel == 0)
    {
        showMessageDialog(null," Du får ingen växel tillbaka");
    }
    
    while(100 \<= vaxel)
    {
        
        vaxel = vaxel - 100;
        hundringar = hundringar + 1;
        if(vaxel\<100)
        {
           vct_plural.addElement(hundringar + " hundringar ");  
        }
                 
    }
   
    
    while(50 \<= vaxel)
    {
        vaxel = vaxel - 50;
        femtio = femtio + 1;
        
          if(vaxel\<50)
        {
           vct_plural.addElement(femtio + " femtiolappar ");  
        }
         
    }
    
    
    while(20 \<= vaxel)
    {
        vaxel = vaxel - 20;
        tjugo = tjugo + 1;
        
           if(vaxel\<20)
        {
           vct_plural.addElement(tjugo + " tjugolappar ");  
        }
        
        
    } 
   
    
    while(10 \<= vaxel)
    {
        vaxel = vaxel - 10;
        tio = tio + 1;
        
           if(vaxel\<10)
        {
           vct_plural.addElement(tio + " tiokronor ");  
        }
        
    }  
    
    
    while(5 \<= vaxel)
    {
        vaxel = vaxel - 5;
        fem = fem + 1;
        
           if(vaxel\<5)
        {
           vct_plural.addElement(fem + " femkronor ");  
        }
        
    }
    
    
    if(vaxel == 4)
    {
        enkrona1 = 4;
        vct_plural.addElement(enkrona1 + " enkronor ");
    }
    
    
    if(vaxel == 3)
    {
        enkrona2 = 3;
        vct_plural.addElement(enkrona2 + " enkronor ");
    }
    
    
    if(vaxel == 2)
    {
        enkrona3 = 2;
        vct_plural.addElement(enkrona3 + " enkronor ");
    }
    
    
    if(vaxel == 1)
    {
        enkrona4 = 1;
         vct_plural.addElement(enkrona4 + " enkronor ");
    }
    

  for(int i=0;i\<10;i++)
  {
    svar1 = (Object) vct_plural.elementAt(i);    

    if(!svar1.equals(0))
    {
        
       skrivut(svar1);  
    }
  }
   
    System.exit(0); 
    
}
 
public static void skrivut(Object skrivuttext)
 {
     //skriver ut hur många rätt användaren har
     showMessageDialog(null, skrivuttext);
             
 }

}

Som ni ser loppas svaret ut ur vectorn med med en for sats och jämförs sedan, jag vill kunna ta med mig informationen efter jämförandet så att svaret inte loopas ut utan att allt kommer i samma dialogruta!, är det någon som vet hur man gör det?, min fantasi har tagit slut!
Tack på förhand!

LimeMedlem sedan sep. 2001961 inlägg
#2

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;
	}

}
PettaaaMedlem sedan feb. 200712 inlägg
#3

Tack så mycket

141 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)