webForumDet fria alternativet

Plocka ut och ändra information i en vektor?

9 svar · 299 visningar · startad av Broms

BromsMedlem sedan sep. 2002188 inlägg
#1

Jag har ett program som lägger till böcker i en vektor.. Om jag vill plocka ut dessa värden senare, och uppdatera dem, t.e.x. om jag vill ändra utgivningsår för en bok då en ny upplaga kommer, hur göra? Om datat jag vill ändra ligger mitt i vektorn och 100 böcker finns innan och efter denna bok, men jag bara vet på vilken plats den ligger.. ska jag lägga till en räknare som id först till varje bok?

Kod i Bok.java

import extra.*;

public class Bok {
	
	// Instansvariabel
	private String stringTitel, stringForfattare;
	private int intUtg;

	// Kontrstuktorer
	public Bok(String titel, String forfattare, int utg ) { 	// Initierar instansvariablerna stringTitel, stringForfattare
		stringTitel = titel;									// och intUtg med de startvärdena som anges i titel,
		stringForfattare = forfattare;							// forfattare och utg
		intUtg = utg;
	}
	
	// Metoder
	public void setUtg(int u) { // Anrop av metoden setUtg(<nytt värde>)
		intUtg = u;				// sätter värdet på intUtg till värdet på u
	}
	public String giveTitel() { // Anrop av metoden giveTitel returnerar värdet
		return stringTitel;		// på stringTitel
	}
	public String toString() {
	return "Titel: " + stringTitel + ". Forfattare: " + stringForfattare + ". Utg.ar: " + intUtg + ".";
	}
	
} // class

Kod i Bok_test.java

import extra.*;
import java.util.*; // Vector ligger i java.util

// Programmet skapar och tar bort böcker med indata som
// titel, författare och utgivninsår enligt formeln:
// Bok(String titel, String forfattare, int utg )

public class Bok_test2 {

	public static void main (String[] arg) {

		// Skapar en ny Bok med titel "Sagan om ringen", 
		// författare J.R.R Tolkien och utg.år 1998
		
		// Skapar en bok
		Bok b1 = new Bok("Sagan om ringen","J.R.R Tolkien",1998);
		
		// Skrivet ut bokinfon
		Std.out.println(b1);
		
		// Skrivet ut titeln på boken
		Std.out.println("Titel --> " + b1.giveTitel());
		
		// Ändrar utg.året till 2001
		b1.setUtg(2001);
		
		// Skrivet ut bokinfon på nytt
		Std.out.println(b1);

		// Tom rad
		Std.out.println();
				
		Vector books = new Vector(); // Skapar en ny vektor books
		  
		int i=1;
		
		String b_titel, b_forfattare;
		int b_utg;
		
		do{
			
    		Std.out.print("Vill du skapa en ny bok? 1=ja, 0=nej: ");
    		i = Std.in.readInt();
    		Std.in.skipLine();
    		
    		if (i == 1){    			
        		Std.out.println("Ange Boktitel: ");
        		b_titel = Std.in.readLine();
     		        		
        		Std.out.println("Ange Författare: ");        		
        		b_forfattare = Std.in.readLine();
       		
        		Std.out.println("Ange utgivninvsår: ");
        		b_utg = Std.in.readInt();
        		        		
        		books.add(new Bok(b_titel, b_forfattare, b_utg ));
    		}
    			
		} while (i == 1);

		Std.out.println();		
		
		// Utskrift av alla böcker i vektorn
		for(int n = 0; n < books.size(); n++){
    		System.out.print(books.get(n) + "\n");
		}
		
		// Tom rad
		Std.out.println();
		
	} // main
} // class
PhorpherMedlem sedan feb. 20002 300 inlägg
#2

Om du vet vilken plats boken ligger i vektorn så är det ju bara att hämta ut bok-objektet på den platsen och ändra?

BromsMedlem sedan sep. 2002188 inlägg
#3

Måste man ändra all information i vektorn då? eller går det att anropa precis just årtalet? hur skulle det isf se ut? :\

Mc FettoMedlem sedan nov. 20022 355 inlägg
#4

namnpåvektor[indextal].setUtg(årtal);

BromsMedlem sedan sep. 2002188 inlägg
#5

tack ska prova det detsamma :p

PhorpherMedlem sedan feb. 20002 300 inlägg
#6

Om du vet att boken ligger på index 100 så hämtar du ut boken och ändrar objektet du får ut.

Bok tmpBok = books.get(100); // Plockar ut bok nummer 100 ur vektorn.

tmpBok.setUtg(3); // Ändra utgåva till 3.

Eller gör som McFetto visade. Beror ju lite på om du tänker göra något mer med objektet.

BromsMedlem sedan sep. 2002188 inlägg
#7

säger incompatible types till mig.. :\ testa att köra min kod, och spara ett par böcker... ta ut infon ur en bok och spara om.. funkar inte när jag gör det :\

PhorpherMedlem sedan feb. 20002 300 inlägg
#8

Du måste nog typecasta objektet du får ut till ett Bok-objekt.

Bok tmpBok = (Bok)books.get(100);

tmpBok.setUtg(3);
ViktorMedlem sedan aug. 20021 752 inlägg
#9

Det är ett litet fel i Phorpher kod, du måste typomvandla det som kommer ut ur vectorn till en Bok (eller den typ som det är),

Bok tmpBok = (Bok)books.get(100); // Plockar ut bok nummer 100 ur vektorn.

tmpBok.setUtg(3); // Ändra utgåva till 3.

/Viktor

BromsMedlem sedan sep. 2002188 inlägg
#10

Tack Phorpher, nu funkar det fint, du är guld man :p

135 ms totalt · 3 externa anrop · v20260731065814-full.37765c92
131 ms — hämta forumlista (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)