webForumDet fria alternativet

Problem med sökning och radering

4 svar · 243 visningar · startad av golgata

golgataMedlem sedan maj 2000131 inlägg
#1

Jag har en sökfunktion som fungerar. Nu vill jag använda denna och tabort ett Media ur listan. Hur gör jag???

public class MediaContainer
{
	private int SIZE = 10;
	private Media[] lista;
	private int m_index;
	
	
	public MediaContainer()
	{
		lista = new Media[SIZE];
		m_index = 0;
	}
	
	public boolean addMedia(Media i_Media)
	{
		if (m_index<SIZE)
			lista[m_index++]=i_Media;
				
			else
			return false;
		return true;
	}
	

public Media[] searchMedia(String i_Media)
	{
		
		Media[] temp = new Media[m_index];			
		
		int i, count = 0;
		for(i = 0; i < m_index; i++)
		{
		
			if(lista[i].getTitel().equalsIgnoreCase(i_Media))
				temp[count++] = lista[i];
		}
		
	
		Media[] hits = new Media[count];
		for(i = 0; i < count; i++)
			hits[i] = temp[i];
		
		return hits;
	
	}
	
	public void print()
	{
		System.out.println("Skriver ut all media");
		for(int i=0; i<m_index; i++)
		{
		System.out.println();
		lista[i].print();
		System.out.println(i);
		}
	}
}

sen kommer testprogrammet

import java.io.*;
import java.util.*;
class testMedia
{
	//==========================================================================
	// Beskrivning:	 Skriver ut menyvalen
	// =========================================================================
	public static void printMenu()
	{
		System.out.println("******** MENY ********");
		System.out.println("1. Lagg in ny media");
		System.out.println("2. Sök efter Cd/Film");
		System.out.println("3. Tabort ett objekt");
		System.out.println("4. Skriv ut all Media");		
		System.out.println("q. AVSLUTA");	
		System.out.println();
		System.out.print("Valj vad du vill gora: ");
		System.out.flush();
	}
	
	//==========================================================================
	// Beskrivning:	 Frågar efter MediaAttribut och skapar en MEdia utifrån detta
	// Returvärde:	 skapade Medier
	// =========================================================================
	public static Cd createCd() throws IOException
	{
	BufferedReader indata = new BufferedReader(new InputStreamReader(System.in));
	
	String m_titel, m_artist, temp;
	int m_utgivningsÅr, m_antalLåtar;
	float m_längd;
	
	System.out.print("Titel ");
	m_titel = indata.readLine();
	
	System.out.print("Artist ");
	m_artist = indata.readLine();
	
	System.out.print("Utgivningsår ");
	temp = indata.readLine();
	m_utgivningsÅr = Integer.parseInt(temp);
	
	System.out.print("Antal låtar ");
	temp = indata.readLine();
	m_antalLåtar = Integer.parseInt(temp);
	
	System.out.print("Längd ");
	temp = indata.readLine();
	m_längd = Float.parseFloat(temp);
	
	return new Cd(m_titel, m_artist, m_utgivningsÅr, m_antalLåtar, m_längd);
	}

	
	public static void main (String[] args) throws IOException
	{
		BufferedReader indata = new BufferedReader(new InputStreamReader(System.in));
		
		boolean cont = true;
		char      choice;
		MediaContainer lista = new MediaContainer();
		
		
		System.out.println("Skapar Cdskivor");
		lista.addMedia(new Cd ("Thomas Ledin","Thomas Ledin", 2004, 15, 65.23f));
		lista.addMedia(new Cd ("Carolas bästa","Carola", 2003, 18, 75.31f));
		lista.addMedia(new Film ("Troja", 76.4f, 1998, "Brad Pitt","Action"));
		
		System.out.println();
	
	do 
		{
			//Menyval
			printMenu();
			choice = indata.readLine().charAt(0);
			System.out.println();
			
			switch(choice)
			{
				//Om man valde menyval 1, lagg in ny bil
				case '1':
				
					Media newCd = createCd();
					boolean res = lista.addMedia(newCd);
					if (res)
			{
					System.out.println();
					System.out.println("Cd:n skapades");
		
					newCd.print();
					lista.print();
			}
				else
					//MediaContainer lista = new MediaContainer(20);
					System.out.println("Systemet är fullt");
				break;

				//Menyval 2. Söker efter Media
				case '2':
					//Läs in vilken Titel som ska letas efter
					System.out.println("Vilken Titel? ");
					String Titel = indata.readLine();
					
					//Sök efter Titel
					System.out.println();
					System.out.println("Soker efter " + Titel + "...");
					Media[] result = lista.searchMedia(Titel);
					
					//Presentera resultatet
					int noOfHits = result.length;
					System.out.println();
					for(int i = 0; i < noOfHits; i++)
					{
						result[i].print();
						
						System.out.println("Antal Träffar " +noOfHits);
						System.out.println(i);
					
					}
					
					break;
					
					case '3':
		

					break;	
				
					
				//Menyval 4. Skriver ut all media som är inlagd.
				case '4':
				lista.print();
				
				break;
				
				//Om man valde att avsluta
				case 'q':
					System.out.println("Nu stängs programmet av.");
					cont = false;

					break;
				
				//Används om du gör ett felaktigt val
				default:
					System.out.println("Prova nagot annat...\n");
				}
}
	while(cont);
}
}

Det är under case'3' som jag vill ha in en funktion som söker på en titel och sen raderas den första träffen i listan.

ViktorMedlem sedan aug. 20021 752 inlägg
#2

För att ta bort ett element i din array så behöver du en funktion som flyttar alla element som kommer efter det elementet som du vill ta bort ett steg åt vänster så att de skriver över ditt nuvarande element, t.ex.

public void packArray(int removeIndex)
{
	m_index--;
	for(;removeIndex<m_index;removeIndex++)
		list[removeIndex]=list[removeIndex+1];
}

(koden är inte testad :))
Då kommer ditt element att försvinna.
Men detta är inte ett bra sätt, du bör använda en dynamisk array, t.ex. ArrayList, då kan du plocka ut och sätta in element hur du vill utan problem. Titta på Javas Collection klasser så kanske du hittar något som passar dig :)
Java Collections Framework

/Viktor

golgataMedlem sedan maj 2000131 inlägg
#3

Oki. Har lagt in den i mediaContainer.

Ska jag använda exakt samma sökning som jag har under case'2' och ändra lista.searchMedia(Titel) till lista.packArray(Titel)???

ViktorMedlem sedan aug. 20021 752 inlägg
#4

Den funktion som jag skrev tar bara in ett index till det element som du vill ta bort och tar bort det, den kan inte söka eller något annat.

/Viktor

golgataMedlem sedan maj 2000131 inlägg
#5

men hur gör man för att söka efter t.ex. en titel och sen den titeln som visas tar man bort.

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