1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Felder an Java Methode übergeben....

Dieses Thema im Forum "OS X-Developer" wurde erstellt von Bilbao, 14.02.08.

  1. Bilbao

    Bilbao Wohlschmecker aus Vierlanden

    Dabei seit:
    25.01.06
    Beiträge:
    238
    ich hab ein kleines Problem, und soll ich für eine Schulaufgabe eine Schueler klasse bauen welche Schueler Objekte anlegt. Und eine Klasse die darauf zugreift... So weit so gut

    jetzt bin ich an folgenden Punkt angekommen
    Soweit die Schueler klasse...
    Code:
    public class Schueler {
    
    	String name,vorname;
    	int mitte,noteMathe,noteInformatik;
    	
    	double mittE(int f[], int anzahl){
    			for(int i=0;i<anzahl;i++){
    				mitte+=f[i];
    				}
    			mitte/=(1.0*anzahl);
    			return 0;
    		}
    }
    
    und hier die main methode die drauf zugrefit aus der anderen klasse

    Code:
    public class DV78 {
    
    public static void main(String args[]){
    	
    	System.out.println("wie viele Schueler moechten sie anlegen");
    	int x=Tastatur.leseZahl();
    	int Schueler[]=new int[x];
    	for(int i=0;i<x;i++){
    		Schueler (schul+schueler[i])=new Schueler();
    		System.out.println("Geben sie den Nachnamen des Schuelers ein ");
    		(schul+schueler[i]).name=Tastatur.leseText();
    		System.out.println("Geben sie den Vornamen des Schuelers ein ");
    		(schul+schueler[i]).vorname=Tastatur.leseText();
    		System.out.println("Geben sie an wieviele Informatik noten sie haben \n(es wird automaitsch ein Durchschnitt ermittelt");
    		int N=Tastatur.leseZahl();
    		int noteInfo[]=new int[N];
    		for (int y =0;y<N;y++){
    			noteInfo[y]=Tastatur.leseZahl();
    		} 
    				(schul+schueler[i]).noteInformatik=(schul+schueler[i]).mittE(noteInfo[], N);
    				System.out.println((schul+schueler[i].name)+","+(schul+schueler[i].nachname)+"  Informatik note ="+(schul+schueler[i].noteInformatik));
    }}}
    
    so jetzt weiss ich nicht genau wo der fehler liegt aber es könnte dran liegen das ich das feld falsch übergebe an die methode mitte()

    das ist die fehler meldung aus dem temrinal




    falls einer ne lösung für das problem grad hat wäre ich sehr dankbar!

    gruß Bilbao
     
  2. Alferd

    Alferd Auralia

    Dabei seit:
    19.05.05
    Beiträge:
    202
    Hmm, sieht mir alles bissle wirr aus.
    schul ist gar nicht definiert und manche Klammern stehen recht unmotiviert in der Gegend rum.

    Ich hab das mal kurz überarbeitet, wobei es sicher bessere Lösungen gibt und damit es bei mir kompiliert hab ich die Tastatureingaben durch Dummywerte ersetzt:

    Code:
    public class DV78 {
    
    	public static void main(String args[]) {
    		System.out.println("wie viele Schueler moechten sie anlegen");
    		int x = 1;
    		for (int i = 0; i < x; i++) {
    			Schueler temp = new Schueler();
    			System.out.println("Geben sie den Nachnamen des Schuelers ein ");
    			temp.name = "Mustermann";
    			System.out.println("Geben sie den Vornamen des Schuelers ein ");
    			temp.vorname = "Max";
    			System.out.println("Geben sie an wieviele Informatiknoten sie haben \n(es wird automaitsch ein Durchschnitt ermittelt)");
    			int N = 5;
    			int noteInfo[] = new int[N];
    			for (int y = 0; y < N; y++) {
    				noteInfo[y] = 2;
    			}
    			System.out.println((temp.vorname) + " " + (temp.name)
    					+ " Informatiknote = " + (temp.mittE(noteInfo, N)));
    		}
    	}
    
    Code:
    public class Schueler {
    
    	String name, vorname;
    
    	int mitte, noteInformatik;
    
    	float mittE(int f[], int anzahl) {
    		for (int i = 0; i < anzahl; i++) {
    			mitte += f[i];
    		}
    		mitte /= (1.0 * anzahl);
    		return mitte;
    	}
    }
    
    edit: Schueler temp = new Schueler(); sollte natürlich besser Schueler schueler = new Schueler(); heißen ...
     
  3. Bilbao

    Bilbao Wohlschmecker aus Vierlanden

    Dabei seit:
    25.01.06
    Beiträge:
    238
    ja das problem so ist aber das dann das alte objekt Schueler bei jedem druchgang durch ein neues ersetzt wird deswegen hab ich das auch mit nem feld versucht damit X unterschiedliche objekte angelget werden können...
    sinn der übung war nähmlich das die bjekte nach dem anlegen immer noch abruf bar sind...
    ausserdem hättest du dann keine klammern um das temp.vorname und so amchen müssen das geht auch ohne (ich hab die nur wegen dem schul+schueler[] gesetzt)
     
  4. Alferd

    Alferd Auralia

    Dabei seit:
    19.05.05
    Beiträge:
    202
    Dann solltest Du Dir vielleicht einen Array aus Schuelern definieren.
    Die Klammern waren zuviel, stimmt. Die hab ich übersehen.
     
  5. Bilbao

    Bilbao Wohlschmecker aus Vierlanden

    Dabei seit:
    25.01.06
    Beiträge:
    238
    das hatte ich doch versucht.... und wie mach ich das jetzt richtig?
     
  6. Alferd

    Alferd Auralia

    Dabei seit:
    19.05.05
    Beiträge:
    202
    Mal ganz allgemein ein Array aus 10 Schuelern:

    Code:
    Schueler[] schueler = new Schueler[10];
    schueler[0].name = "Max";
    
     
  7. Bilbao

    Bilbao Wohlschmecker aus Vierlanden

    Dabei seit:
    25.01.06
    Beiträge:
    238
    ales schön und gut aber die fehler meldungen blieben die gleichen.....


    (trotzdem danke für die antowrten ....) ich möcht aber gern wissen was die fehlerbehebt (habs jett geändert aber trotzdem slebe fehlermeldungen
     
  8. Trapper

    Trapper Boskop

    Dabei seit:
    12.05.05
    Beiträge:
    213
    Wie sieht denn nun deine aktuelle main-Methode aus?
    Denn das im Ursprungsposting hat ja nicht viel mit Java gemein:
    Code:
    Schueler (schul+schueler[i])=new Schueler();
    
    ???
     
  9. Bilbao

    Bilbao Wohlschmecker aus Vierlanden

    Dabei seit:
    25.01.06
    Beiträge:
    238
    naja das ist schon java vllt siehts in wenig blöd aus aber damit wollte ich erreichen das ich unterschiedliche objekt namen habe... ergo es ist immer schul plus ein anhängsel den anfangs war dsa ein int wertder dafür stand und wenn man versucht ein String mit nem Int zu addieren sollte eigentlich Stringint draus werden (also wird einfach hinten dran geschireben)...

    habs jetzt ein wenig um geschirbeen das problem unten hab ich trotzdem in der sleben reihe...
    hab jetzt anstat int felder Schueler felder eht trotzdem nicht..


    Code:
    public class DV78 {
    
    	public static void main(String args[]){
    	
    			System.out.println("wie viele Schueler moechten sie anlegen");
    			int x=Tastatur.leseZahl();
    			for(int i=0;i<x;i++){
    				Schueler schul[]=new Schueler[x];
    				System.out.println("Geben sie den Nachnamen des Schuelers ein ");
    				schul[i].name=Tastatur.leseText();
    				System.out.println("Geben sie den Vornamen des Schuelers ein ");
    				schul[i].vorname=Tastatur.leseText();
    				System.out.println("Geben sie an wieviele Informatik noten sie haben \n(es wird automaitsch ein Durchschnitt ermittelt)");
    				int N=Tastatur.leseZahl();
    				int noteInfo[]=new int[N];
    				for (int y =0;y<N;y++){
    					noteInfo[y]=Tastatur.leseZahl();
    				} 
    				schul[i].noteInformatik=(schul[i].mittE(noteInfo[], N));
    				System.out.println(schul[i].name+","+schul[i].nachname+"  Informatik note ="+(schul+schul[i].noteInformatik));
    				}
    			}
    	}
    
     
  10. Demo

    Demo Süssreinette (Aargauer Herrenapfel)

    Dabei seit:
    02.04.04
    Beiträge:
    411
    Verstehe ich das richtig, dass Du dir pro einen Schleifenschritt (i++) jedes mal x Schueler anlegen musst? :oops:

    Viel sinnvoller waere doch:

    Code:
    Schueler[] schueler = new Schueler[10];
    for(int i=0;i<x;i++){
      schueler[i] = new Schueler();
      schueler[i].setName(Tastatur.leseText());
      //... weitermachen
    }
    
    Wobei die Klasse Schueler in etwa erstmal so aussehen sollte:
    Code:
    class Schueler{
    	
    	private String name;
    	private int mitte;
    	private int noteMathe;
    	private int noteInfo;
    	
    	public Schueler(){};
    	
    	public void setName(String name){
    		this.name = name;
    	}
    	
    	public void setNoteMathe(int note){
    		this.noteMathe = note;
    	}
    	
    	public void setNoteInfo(int note){
    		this.noteInfo = note;
    	}
    	
            // Methode von dir uebernommen
    	public double mittE(int f[], int anzahl){
    		for(int i=0;i<anzahl;i++){
    			mitte+=f[i];
    		}
    		mitte/=(1.0*anzahl);
    		return 0;
    	}
    	
    	public String getName(){return this.name;}
    }
    
    Ansonsten kann ich deinen Ausfuehrungen nicht so richtig folgen.
     
    #10 Demo, 15.02.08
    Zuletzt bearbeitet: 15.02.08
  11. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Hmmm... Da ergeben sich mir ein paar Fragen
    1. Wie lange hast Du schon Informatik?
    2. Hast Du vorher schon mal programmiert?
    3. Macht Dir das Spaß?
    4. Bist Du sicher, daß Du in der Richtung weitermachen willst?
    Ich frage nicht, um Dich runterzumachen oder so, sondern weil mir das ganze ziemlich konfus vorkommt. Einiges was Du schreibst hast Du Dir vielleicht nett ausgedacht, hat aber mit dem, was in Programmiersprachen allgemein möglich ist, nicht mal entfernt zu tun.

    So. Genug dazu. Ich würde gerne mal die komplette Aufgabenstellung sehen. Ich lerne nämlich zur Zeit auch Java. Naja.... Ich versuche mich an Java zu gewöhnen und würde mich auch mal gerne daran versuchen.
     
  12. Bilbao

    Bilbao Wohlschmecker aus Vierlanden

    Dabei seit:
    25.01.06
    Beiträge:
    238
    1 seit nem halben jahr
    2. siehe 1.
    3. normalerweise schon
    4. und ja....

    (anmerken wollt ich noch das das OOP erst seit 6 Unterrichtsstunden hatten... davor haben wir ohne objekte gearbeitet)


    vllt bin ich auch falschan an das problem rangegangen...

    Also die aufgabe bestand darin eine klasse schueler zu machen welche Schueler objekte erstellt. (die ja soweit fertig ist und funktioniert wenn ich die ganzen schleifen etc. rauslasse und nur Objekte erstmal erstelle)
    Dann soll mit einer andern Klasse, der user eingeben wie viele Schueler er erstellen will, Dann nach einander für einen Schueler den Namen Vornamen etc.. eingeben (und halt auch noten... ) und am ende ausgegeben...

    dabei soll uzmbeispiel möglichkeit das der user eingibt wie viele Info noten er zumbeispiel hat damit dann die Durchschnitts note errechnet werden kann..

    Erstes problem war wie schaffe ich es X viele Schueler anzulegen
    zweites problem war /ist wenn ich ein feld voller noten hab (wegen der durchschnittsmethode) wie übergebe ich sie.

    deswegen auch die vllt so umständliche programmierung aber mir ist nichts besseres eingefallen....


    @Demo :
    Ja stimmt da bin ich in der zeile verrutscht geht aber trotzdem nicht...
    Aussrdem muss (laut meines Lehrers..) ich nicht unbedingt this.name=name; machen das geht so wie das mach auch ... (eigentlich) aber das ist ja nicht das problem ich hab nur ein problem in der letzten zeile bei der ausgabe der werte....
     
    #12 Bilbao, 15.02.08
    Zuletzt bearbeitet: 15.02.08
  13. Demo

    Demo Süssreinette (Aargauer Herrenapfel)

    Dabei seit:
    02.04.04
    Beiträge:
    411
    Bei nochmaligen Hinsehen wuerde ich die Durchschnittsnote (die Note in Informatik) gleich in der Klasse Schueler machen (den Algorithmus hab ich nicht ueberprueft), die Anzahl der Noten zu uebergeben ist eigentlich auch nicht notwendig.

    Code:
    public double mittE(int[] f){
    		int mitte = 0;
    		for(int i=0;i<f.length;i++){
    			mitte+=f[i];
    		}
    		mitte/=(1.0*f.length);
    		return mitte;
    }
    
    Damit kannst Du dir leicht dein for-Schelife in main() ueberlegen:
    Code:
    Schueler[] schueler = new Schueler[10];
    for(int i=0;i<x;i++){
      schueler[i] = new Schueler();
      schueler[i].setName(Tastatur.leseText());
      //Wieviel Noten
      int[] noten = new int[N];
      for(int j=0;j<n;j++){
        noten[j] = tastatur.lesezeichen();
      }
      // den Spass fuer den Schueler ausgeben
      System.out.println("Name: " + schueler[i].getName() + "\tVorname: " + schueler[i].getVorname() + "\tInfoNote: " + schueler[i].mittE(noten)); 
    }
    
    Nur als Vorschlag. Ausarbeitung ist dir ueberlassen.

    Edit:

    Wenn Du die InfoNote seperat haben willst, ginge aber auch das:

    Code:
    //in Schueler
    public void mittE(int[] f){
    		int mitte = 0;
    		for(int i=0;i<f.length;i++){
    			mitte+=f[i];
    		}
    		mitte/=(1.0*f.length);
    		this.noteInfo = mitte;
    }
    
    In der main() muesstest Du das dann noch explizit aufrufen:
    Code:
    // Noteneinleseung (for-Schleife) abgeschlossen
    schueler[i].mittE(noten);
    //Ausgeben
    System.out.println("Name: " + schueler[i].getName() + "\tVorname: " + schueler[i].getVorname() + "\tInfoNote: " + schueler[i].getInfoNote());
    
    Uebrigens ist das this eigentlich nur Stil, kann man weglassen. Was this bewirkt, findest Du in dem von Dir empfohlenen Buch "Java ist auch eine Insel".

    Dann beschaeftige dich mit dem Thema mal ausserhalb des Unterrichts. Ohne wird in Java nix gehen...
     
    #13 Demo, 15.02.08
    Zuletzt bearbeitet: 15.02.08
  14. Bilbao

    Bilbao Wohlschmecker aus Vierlanden

    Dabei seit:
    25.01.06
    Beiträge:
    238
    was mach ich denn grad, denn die aufgabe war nur zum spaß vom lehrer gegeben genau so wie eine Bruchrechnungs klasse erstellen (weche aber komplett funtz (obwohl ich sie geschierben hab:D))

    hmm kante this nur als pointer.. dachte net das er ne funktion hat (ausser angeben in wo mein objekt im speicher steck...)
     
  15. Alferd

    Alferd Auralia

    Dabei seit:
    19.05.05
    Beiträge:
    202
    In Beitrag #9 hast Du wieder stehen: "schul+schul.noteInformatik"
    schul ist aber nirgends definiert. Wenn das ein String sein soll, musst Du Anführungszeichen setzen: ""schul"+schul.noteInformatik"
    Allerdings verkompliziert dieser String Deinen Code nur. Lass ihn weg.
    Zieh die Definition des Arrays vor die Schleife und füll den Array in der Schleife, dann sollte das gehen.
     
  16. devylon

    devylon Idared

    Dabei seit:
    15.06.07
    Beiträge:
    26
    Hi,

    hast du deine Java-Programm inzw. hinbekommen oder brauchst du noch Unterstützung ?

    Grüsse,
    devylon
     

Diese Seite empfehlen