drei dimensionales feld

newbee

Mitglied
hallo ich habe ein datenbankprogramm geschrieben, was bis zu 1000 cds verwalten kann. jede cd soll einen namen, beliebig viele titel und interpreten haben. die daten für die namen titel und interpreten sollen in ein bzw 2 dimensionalen feldern gespeichert werden. der nutzer soll einige cd eingeben können[max 1000]. zuerst die anzahl der interpreten und lieder, dann den namen der cd, danach die namen aller interpreten und alle liedtitel.
ich habe follgendes programm geschrieben, bin aber nicht zufrieden weil es nicht genau das macht was es soll und die ausagabe nicht stimmt. ich weiss nicht wie ich dem programm sage das es in 2bzw3 dimensionalen feldern speichert und was genau in das feld gehört.
Code:
import java.io.*;

public class CDSammlung{
    public static void main(String[] args)
    throws IOException
    {int a = 0,Anzahllieder;
    String x= "", NameCD,NameInterpret,NameTitel;
    String [][] CD = new String[4][];
    
    
    BufferedReader din = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("*CD-Datenbank*");
    System.out.println();
        while(!(x.equals("nein") )) {
            System.out.println("neue CD Ja/Nein" );
            x = din.readLine();
                if(x.equals("nein")) break;
                if(x.equals("ja"))
        System.out.print("Anzahl der Titel:");   
        Anzahllieder = Integer.parseInt(din.readLine()); 
        System.out.println("Bitte geben die Namen der CD ein ");
        NameCD = din.readLine();
            for ( int i = 1; i <= Anzahllieder; i++){
                System.out.println();
                System.out.print("Bitte geben Sie den Interpreten des "+i+". Liedes ein: ");
                   NameInterpret = din.readLine();
                System.out.println();
                System.out.print("Bitte geben Sie den Titel des "+i+". Liedes ein: ");
                   NameTitel = din.readLine();
                System.out.println();
                
                
        CD [0][0] = NameCD;
        CD [1][0] = NameInterpret;
        CD [2][0] = NameTitel;
       
           a++; }
       
        }
    System.out.println("Wollen Sie die Daten aller eingebenen CD's angezeigt bekommen Ja/nein ? ");
    x = din.readLine();
    if(x.equals("ja")){
        for ( int i = 1; i <=a ; i++){
            System.out.println(CD[a]);
            }
        }
    }
}
bei der ausgabe solen vorhandene cds mit deren titeln und interpreten ausgegeben werden. bitte helft mir ich kenne mich mit 3d feldern icht aus.
danke
 
kann mir denn niemand helfen habe doch das programm fast fertig. mir fehlt nur noch wie man die daten in die felder verteilt und dann ausgibt. so wich ich es jetzt habe überschreibt er mir alles und gibt dann immer nur das was ich zuletzt eingegeben habe und nicht die vorhergehenden cds und titel ...
Code:
import java.io.*;

public class CDSammlung{
    public static void main(String[] args)
    throws IOException
    {int a = 0,Anzahllieder=0;
    String x= "", NameCD,NameInterpret,NameTitel;
    
    String [][] CD = new String[1000][10000];
   
    
    
    BufferedReader din = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("*CD-Datenbank*");
    System.out.println();
        while(!(x.equals("nein") )) {
            System.out.println("neue CD Ja/Nein" );
            x = din.readLine();
                if(x.equals("nein")) break;
                if(x.equals("ja"))
        System.out.print("Anzahl der Titel:");   
        Anzahllieder = Integer.parseInt(din.readLine()); 
        System.out.println("Bitte geben die Namen der CD ein ");
        NameCD = din.readLine();
            for ( int i = 1; i <= Anzahllieder; i++){
                System.out.println();
                System.out.print("Bitte geben Sie den Interpreten des "+i+". Liedes ein: ");
                   NameInterpret = din.readLine();
                System.out.println();
                System.out.print("Bitte geben Sie den Titel des "+i+". Liedes ein: ");
                   NameTitel = din.readLine();
                System.out.println();
                
                
        CD [0][0] = NameCD;
        CD [1][1] = NameInterpret;
        CD [2][2] = NameTitel;
       
           a++; }
       
        }
    System.out.println("Wollen Sie die Daten aller eingebenen CD's angezeigt bekommen Ja/nein ? ");
    x = din.readLine();
    if(x.equals("ja")){
        for ( int i = 1; i <=a ; i++){
            System.out.println(CD[0][0]+CD[1][1]+CD[2][2]);
            }
        }
    }
}
 
alllsoooooooo
wir sind in java und da schaut man darrauf das man OO schreibt
hier also der code.. :)

PHP:
/**
 * Shortcuts:
 * f = File;
 * p = Project;
 * bow = beginn of work;
 * --------------------
 * author:	@author sst
 * bow:		09.12.2003 - 16:30:04
 * p-name:	stefan
 * f-name:	CDSammlung.java
 * f-type:	CDSammlung
 * firm:	Cephei AG
 * desc:	TODO
**/

// package com.cephei.sst.test;

/**
 * @author Administrator
 *
 * 
 */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;

public class CDSammlung {
	public static void main(String[] args) throws IOException {
		int a = 0, Anzahllieder = 0;
		String x = "", NameCD, NameInterpret, NameTitel;
		List cdList = new Vector();
		
		BufferedReader din =
			new BufferedReader(new InputStreamReader(System.in));
		System.out.println("*CD-Datenbank*");
		System.out.println();
		while (!(x.equals("nein"))) {
			System.out.println("neue CD Ja/Nein");
			x = din.readLine();
			if (x.equals("nein"))
				break;
			if (x.equals("ja"))
				System.out.print("Anzahl der Titel:");
			
			
			Anzahllieder = Integer.parseInt(din.readLine());
			System.out.println("Bitte geben die Namen der CD ein ");
			
			NameCD = din.readLine();
			Cd cd = new Cd(NameCD); // creates a new cd 
			cdList.add(cd);
						
			for (int i = 1; i <= Anzahllieder; i++) {
				System.out.println();
				System.out.print(
					"Bitte geben Sie den Interpreten des "
						+ i
						+ ". Liedes ein: ");
				NameInterpret = din.readLine();
				System.out.println();
				System.out.print(
					"Bitte geben Sie den Titel des " + i + ". Liedes ein: ");
				NameTitel = din.readLine();
				System.out.println();
				
				Song song = new Song(NameInterpret,NameTitel);
				cd.addSong(song);
				
				a++;
			}
		}
		
		System.out.println(
			"Wollen Sie die Daten aller eingebenen CD's angezeigt bekommen Ja/nein ? ");
		x = din.readLine();
		if (x.equals("ja")) {
			Iterator it = cdList.iterator();
			while (it.hasNext()) {
				System.out.println(it.next());
			}
		}
	}
}

class Cd {
	String name;
	List songs = new Vector();
	
	public Cd(String name){
		this.name = name;
	}
	
	public List getSongs(){
		return songs;
	}

	public void addSong(Song song){
		songs.add(song);
	}
	
	public String getName() {
		return this.name;	
	}
	
	public String toString(){
		StringBuffer sb = new StringBuffer();
		sb.append(name).append("\n");
		Iterator it = songs.iterator();
		int count = 1;
		while(it.hasNext()){
			sb.append(count).append(".	").append(it.next()).append("\n");
			count++;
		}
		return sb.toString();
	}	
}

class Song {
	String interpreter;
	String titel;
	
	public Song(String interpreter,String titel){
		this.interpreter = interpreter;
		this.titel = titel;
	}
	
	public String getInterpreter() {
		return this.interpreter;	
	}
	
	public String getTitel() {
		return this.titel;	
	}
	
	public String toString(){
		return titel +"		"+interpreter;
	}
	
}
 
Zuletzt bearbeitet:
danke das ist ja alles schön und gut und funktioniert auch tadellos, aber wir dürfen bei uns in der uni keine imports machen. und schon habe ich wieder ein problem, bin in einem anfänger praktikum in der 8 woche und da können wir das noch nicht so wie du geschrieben hast, also wird der es mir auch nicht abnehmen das es von mir ist, weil ich es nicht erklären kann. kann mir nicht jemand mit ner einfacheren lösung helfen ich weiss jetzt schon das ich nicht NameInterpret = din.readLine(); nach der eingabe schreiben darf sondern name[i] = din.readLine(); denn wenn name ein Feld von String-Variablen ist, ist jeder Eintrag
name[i] genau so eine String-Variable wie z.B. Deine Variable NameCD.
Wenn mein Benutzer jetzt alle Lieder der i-ten CD eingeben will, muss er
zuerst die Anzahl der Lieder vorgeben, damit mein Programm das
entsprechende innere Feld initialisieren kann:
Code:
          <<Ausgabe("Wie viele Lieder auf der i-ten CD?")>>
          <<Eingabe anz>>
          lied[i] = new String[anz];   //Initialisierung des inneren Felds
          <<Laufschleife mit j von 0 bis anz-1>>{
            <<Ausgabe("Name des j-ten Lieds der i-ten CD:");
            lied[i][j] = din.readLine();
          }

das klappt dann aber nur mit der ausgabe vom cd namen und nicht vom titel und interpret. ich würde es ja auch lieber so machen wie du, wei es ja anders sinnlos ist und auch nicht wirklich gespeichert wird aber der will es nun mal so haben.
weiss noch jemand rat?
 
Wenn ihr keine imports machen dürft dann mach einfach statt
public class CDSammlung{
ein
public class CDSammlung extends java.util.Vector {
:D

Naja alles ansich ist es ja total easy nun mit nem Array zu machen
Subclasses haste nun ja :)
In ein Array kannste somit also auch Objekte reinwerfen....

einen guten Tipp gebe ich dir trotzdem mal.
Überlege was du für Arrays erstellst

Code:
Das array[1000][10000]

ist zu gross das belegt alleine schon bei der initialisieren schon 40 MB im Ram ^^
erstelle das array Dynamisch
es bringt nichts ein solches Array zu serstellen wenn du nur 2 Strings reinwirfst!
Code:
String[] test = new String[i];

was den Vector angeht
Er ist einfach nur genial :)
Das ist praktisch nichts anderes als ein array mit dem unterschied das ich hier reinwerfen kann was ich will und ich mich auch nicht um die grösse kümmern muss.

wenn du lust hast und interesse dann kannst dich ja im icq bei mir melden... :)
72410480...
 
Zuletzt bearbeitet:
Zurück