Frage zu meiner Aufgabe

5tausend

Mitglied
Hallo zusammen,

ich komme an einer Aufgabe nicht weiter.

Aufgabenstellung; Schreiben sie eine Methode, die ein neues Messreihe-Objekt als Rückgabe liefert, in neues Messreihe mit allen Werten der anderen Messreihe enthält (aus [2,3] und [5,6] wird [10,12,15,18], dabei ist die Reihenfolge im Ergebnis egal).

Klasse:
Java:
public class Messreihe {
    private String messort;
    private int[] Messwerte;
    private int next;

    public Messreihe(String messort) {
        this.messort = messort;
        this.Messwerte = new int[50];
        this.next = 0;
    }
}
 
Zuletzt bearbeitet von einem Moderator:

Joose

Top Contributor
Einerseits ist die Aufgabenstellung unvollständig bzw. falsch abgeschrieben/kopiert.
Du sollst eine Methode schreiben, welche ein Messreihe Objekt zurückliefert, was danach verlangt ist kann man zwar mit überlegen erraten aber sicher bin ich mir nicht.

Ein konkrete Frage wäre auch noch praktisch.
Wo genau liegt dein Problem? Was funktioniert nicht? Wo kommst du nicht weiter?
 

5tausend

Mitglied
Hey ok, ich schreib mal alles auf und zeige wie weit ich schon bin.

a) Schreiben Sie für alle Objektvariablen get-Methoden.
b) Schreiben Sie für alle Objektvariablen set-Methoden.
c) Schreiben Sie eine Methode, mit der ein Element zur Sammlung hinzugefügt werden
kann, solange das Array noch nicht voll ist.
d) Schreiben Sie eine Methode, die einen Wert vom Typ int übergeben bekommt und die als Rückgabe liefert, wie oft der Wert dieses Objektes in this.messwerte vorkommt.
e) Schreiben Sie eine Methode, die ein neues Messreihe-Objekt als Rückgabe liefert, in
dem sich nur das erste, dritte, usw- Element aus this.messreihe befindet.
f) Schreiben Sie eine Methode, die ein Messreihen-Objekt übergeben bekommt und ein
neues Messreihe-Objekt als Rückgabe liefert, das die Produkte aller Werte der einen
Messreihe mit allen Werten der anderen Messreihe enthält (aus [2,3] und [5,6] wird
[10,12,15,18], dabei ist die Reihenfolge im Ergebnis egal).
g) Schreiben Sie eine Methode, die den Durchschnitt über alle Messwerte ausgibt. Bedenken Sie dabei, dass das Array auch Werte enthält, die keine Messwerte darstellen.

das war die Aufgabenstellung und soweit bin ich. Ab Aufgabe f komme ich nicht weiter!!
Java:
	private String messort;
	private int[] messwerte;
	private int next;
	
	public Array(String messort)
	{
		this.messort   = messort;
		this.messwerte = new int[50];
		this.next = 0;
	}
	
	

	public String getMessort() {
		return messort;
	}



	public void setMessort(String messort) {
		this.messort = messort;
	}



	public int[] getMesswerte() {
		return messwerte;
	}



	public void setMesswerte(int[] messwerte) {
		this.messwerte = messwerte;
	}



	public int getNext() {
		return next;
	}



	public void setNext(int next) {
		this.next = next;
	}
	
	public void hinzufuegen(int element)
	{
		if(this.next < this.messwerte.length)
		{
			this.messwerte[next] = element;
			next++;
		}
	}
	
	public int rueckgabe(int wert)
	{
		int anzahl = 0;
		for(int i = 0 ; i < this.messwerte.length ; i++)
		{
			if(this.messwerte[i] == wert)
			{
				anzahl = anzahl + 1;
				System.out.println(anzahl);
			}
		}
		return anzahl;
	}
	
	public Array ruckgabewert()
	{
		Array b = new Array("hallo");
		 
		int zeahler = 0;
		for(int i = 0 ; i < messwerte.length ; i = i + 2)
		{
			b.messwerte[zeahler] = this.messwerte[i];
			zeahler++;
		}
		return b;
	}
 
Zuletzt bearbeitet von einem Moderator:

Joose

Top Contributor
d) Schreiben Sie eine Methode, die einen Wert vom Typ int übergeben bekommt und die als Rückgabe liefert, wie oft der Wert dieses Objektes in this.messwerte vorkommt.
e) Schreiben Sie eine Methode, die ein neues Messreihe-Objekt als Rückgabe liefert, in
dem sich nur das erste, dritte, usw- Element aus this.messreihe befindet.

Java:
	public int rueckgabe(int wert)
	{
.....
	}
	
	public Array ruckgabewert()
	{
		Array b = new Array("hallo");
		 
		int zeahler = 0;
		for(int i = 0 ; i < messwerte.length ; i = i + 2)
		{
			b.messwerte[zeahler] = this.messwerte[i];
			zeahler++;
		}
		return b;
	}

Für die beiden Methoden sollten dir bessere Namen einfallen.
Überlege was die Methoden machen und versuche ihnen so einen Namen zu geben das du am Namen erkennst was du bekommst bzw. was gemacht wird.

Bei Aufgabe e) erstellst du ein normales Array, aber ich denke mir du solltest stattdessen ein int[] verwenden!

f) Schreiben Sie eine Methode, die ein Messreihen-Objekt übergeben bekommt und ein
neues Messreihe-Objekt als Rückgabe liefert, das die Produkte aller Werte der einen
Messreihe mit allen Werten der anderen Messreihe enthält (aus [2,3] und [5,6] wird
[10,12,15,18], dabei ist die Reihenfolge im Ergebnis egal).

Du sollst eine Methode schreiben die als Parameter ein Objekt vom Typ Messreihe übergeben bekommt.
Als Rückgabewert wird ein neues Messreihe Objekt erzeugt, die Messwerte des neuen Objektes sind die Produkte von den anderen beiden Messwerten (Parameter, this).
 

Khal Drogo

Bekanntes Mitglied
Hallo 5tausend!

Wenn du dir überlegst, was du machen sollst, ist es gar nicht mehr so schwer.
Du hast zwei int-Arrays (zuerst dein eigenes, und dann noch eins, was dir als Parameter übergeben wird), dann musst du für jedes Element deines Arrays das Produkt mit jedem Element des übergebenen Arrays bilden und immer wieder in ein neues Array speichern, das am Ende zurückgegeben wird. Für jedes hört sich doch schonmal stark nach einer gewissen Schleife an, die du auch schon des öfteren benutzt.
Was du dir noch überlegen musst: Wie groß soll das Array sein, das zurückgegeben wird.

Wieso ist dein Array vom Typ Array? Das gehört da nicht rein, int[] ist hier die Wahl, wie Joose schon sagt!

Mit freundlichen Grüßen
Xelsarion
 

5tausend

Mitglied
Hey, ich danke euch für die schnelle Antwort. Ich weis wo der Fehler grad lag. Ich habe meine Klasse Array genannt statt Messreihe ich habe das grad geändert, damit das verständlich ist. OK ich versuch das gleich und Poste mal das Ergebnis.
 

Khal Drogo

Bekanntes Mitglied
Jetzt wo du es sagst, fällt es auch am Konstruktor auf :D
Array ist vielleicht kein guter Name für eine Klasse, die Messreihen repräsentieren soll, höchstens, um Verwirrung zu stiften :D

Mit freundlichen Grüßen
Xelsarion
 

5tausend

Mitglied
Hey zusammen ich habe soweit bis aufgaben f gelöst was haltet ihr davon? Oder kann man da was verbessern?

Außerdem haben ich eine frage und zwar unter public Messreihe Rechnung(Messreihe m). Ich habe da in der for schleife in this.Messreihe hinzugefügt (also das i). Wieso funktioniert nur das? Ich habe schon vieles ausprobiert aber es geht nur das leider kann ich mir das grad selber nicht erklären.

Java:
public class Messreihe {
    
    private String messort;
    private int[] messwerte;
    private int next;
    
    public Messreihe()
    {
        this.messwerte = new int[50];
        this.next = 0;
    }
    public Messreihe(String messort)
    {
        this.messort   = messort;

    }
    
    public void setMessort(String messort)
    {
        this.messort = messort;
    }
    
    public String getMessort()
    {
        return this.messort;
    }
    
    public void setMesswerte(int[] messwerte)
    {
        this.messwerte = messwerte;
    }
    
    public int[] getMesswerte()
    {
        return this.messwerte;
    }

    public void setNext(int next)
    {
        this.next = next;
    }
    
    public int getNext()
    {
        return this.next;
    }
    
    public void hinzufuegen(int element)
    {

            if(this.next < this.messwerte.length)
            {
                this.messwerte[next] = element;
                next++;
            }

    }
    
    public int wieOftKommtDerWertVor(int wert)
    {
        int anzahl = 0;
        for(int i = 0 ; i < this.messwerte.length ; i++)
        {
            if(this.messwerte[i] == wert)
            {
                anzahl++;
            }
        }
        return anzahl;
    }
    
    public int[] neu()
    {
        int[] m = new int[50];
        
        for(int i = 0 ; i < this.messwerte.length ; i = i + 2)
        {
            
            m[i] = this.messwerte[i];
        }
        
        return m;
    }
    
    public Messreihe rechnung(Messreihe m)
    {
        Messreihe m2 = new Messreihe();
        int erg;
        for(int i = 0 ; i < this.messwerte[i] ; i++)
        {
            for(int j = 0 ; j < m.messwerte[j] ; j++)
            {
                erg = this.messwerte[i] * m.messwerte[j];
                m2.hinzufuegen(erg);
            }
            
        }
        
        return m2;
        
    }
    
    @Override
    
    public String toString()
    {
        StringBuffer b = new StringBuffer();
        
        b.append("[");
        for(int i = 0 ; i < this.messwerte.length ; i++)
        {
            
            if(this.messwerte[i] != 0)
            {
            b.append(messwerte[i]);
            b.append(",");
            }
        }
        b.append("");
        b.append("]");
        b.append("\n");
        
        return b.toString();
    }
    
    public static void main(String[] args) {
        Messreihe m = new Messreihe();
        Messreihe m2 = new Messreihe();

        
        m.hinzufuegen(2);
        m.hinzufuegen(3);
        
        
        m2.hinzufuegen(5);
        m2.hinzufuegen(6);
        m2.hinzufuegen(6);
        m2.hinzufuegen(6);
        System.out.print(m);
        System.out.print(m2);        
        System.out.print(m.rechnung(m2));

        
        System.out.print(m.wieOftKommtDerWertVor(10));

    }
 
Zuletzt bearbeitet von einem Moderator:

Khal Drogo

Bekanntes Mitglied
Kannst du deine Frage bitte etwas präzisieren? Ich versteh nicht, wovon du redest und das geht wohl nicht nur mir so.

Mit freundlichen Grüßen
Xelsarion
 

5tausend

Mitglied
Entschuldige bitte ich habe sofort nach dem Programmieren geschrieben deshalb habe ich mich Falsch ausgedrückt. Also unter dem Punkte 85, ist Messreihe Rechnung... Ich habe eine For Schleife erstelle die beinhaltet for(int i = 0 ; i < this.messwerte ; i++) und in this.Messwerte die Variable i. Nur wegen dem i in Messwerte führt er die Komplette Rechnung aus z.b [2,3] * [5,6] = 10,12,15,18. wieso? ist nicht i = 0?? es steht doch i < this.Messwerte. Und trotzdem führt er die Rechnung komplett durch. Ich würde gerne wissen wieso geschieht das trotzdem!
 

Khal Drogo

Bekanntes Mitglied
Jetzt sehe ich, was du meinst. Weiß ich nicht, spontan sieht es für mich so aus, als hättest du einfach Glück, dass dir das Programm nicht komplett um die Ohren fliegt. Hast du es mal mit i < this.messwerte.length oder so versucht? Bzw. hast du dir überhaupt mal überlegt, wie du die Anzahl der Schritte mit einer kleinen Funktion darstellen kannst?

Mit freundlichen Grüßen
Xelsarion
 

5tausend

Mitglied
Hey, Ja kla habe ich es versucht. Sobald du i < this.Messreihe.lenght machst, sagen wir mal du hast 2 zahlen dessen Position in der Array 0, 1 ist. Und die for schleife beginnt. Dann führt er nur ein Schritt aus, da i kleiner this.Messreihe.lenght ist somit wird nur Position 0 null ausgerechnet und nicht Position 1. Macht man Stattdessen ein Gleichheitszeichen dazwischen so ist es OutOfBound.
 

Khal Drogo

Bekanntes Mitglied
Natürlich macht er es auch für Position 1, wenn du es richtig machst, 1 ist immerhin kleiner als 2 ;)
Wenn er das nicht macht, hast du irgendwo anders einen Fehler eingebaut.

Mit freundlichen Grüßen
Xelsarion
 

Khal Drogo

Bekanntes Mitglied
Die Bedingung der inneren Schleife ist ja auch falsch..
Mach dir mal eine Skizze auf Papier mit ein paar Beispielen, um dir anzuschauen, wie viele Durchgänge du für verschiedene Anzahlen an Messwerten brauchst. Dann kannst du auch deine Schleifen entsprechend anpassen.

Mit freundlichen Grüßen
Xelsarion
 

Neue Themen


Oben