Methoden Intervall

Kathi3210

Mitglied
Hallo, ich hab da mal ne kleine Frage.
Ich soll ein Intervall programmieren, das unter anderem die Methode "schneidet" enthält...
Diese soll folgendermaßen programmiert werden:

boolean schneidet(Intervall b)
gibt true zurück, wenn sich das Intervall this mit dem Intervall b schneidet und sonst false

jetzt weiß ich nicht, wie ich mit dem this umgehen soll, ist das ein bestimmter wert in diesem fall?
und außerdem weiß ich nicht, wie ich "schneidet" programmiern soll

Wäre super, wenn mir jemand helfen könnte
danke schonmal
 

eRaaaa

Top Contributor
Naja, du rufst die Methode
Code:
schneidet
ja auf irgendeinem Objekt auf (vermutlich einem Intervall Objekt), dies ist dann
Code:
this
. Und du übergibst ja ein anderes
Code:
Intervall b
, welches du nun prüfen sollst mit
Code:
this
.

und außerdem weiß ich nicht, wie ich "schneidet" programmiern soll

Ich auch nicht, was ist denn das für ein Intervall und was soll schneidet genau bedeuten? Beispiel parat?
 

Kathi3210

Mitglied
ja, aber wie ich das im Programm machen soll, weiß ich nicht so genau


Das Intervall hat den Konstruktor
Intervall(doble links, double rechts)
mit links <= rechts
und den Methoden:

boolean enthaelt(double x)
gibt true zurück, wenn sich der Wert x im Intervall befindet und sonst false.

und eben die schneidet-Methode
 

Schrubber

Bekanntes Mitglied
Versteh ich das falsch?

Du hast 2 Intervalle mit jeweils einem Start & einem Ende-Wert.
Warum überprüfst du nicht in der Methode "schneidet", ob der Ende-Wert von Intervall 1 zwischen Anfang und Ende-Wert von Intervall, bzw. anders herum liegt??
 
M

Marcinek

Gast
Nimm dir mal zwei Stifte.

das linke ende ist das interval links analg rechts.

Nun halte sie übereinander und verschiebe sie links / rechts. Wann schneidet nun das eine interval das andere und wann nicht?

Wobei du nur einen Fall betrachten musst.
 

Andi_CH

Top Contributor
Wie sieht die Klasse ist Intervall aus?
Was hast du bis jetzt schon versucht?

Betreffend "Wie könnte der Code...." lies bitte mal diesen Hinweis hier

Ach ja, die Signatur von Marcinek enthält auch noch einen dezenten Hinweis ;-)
 

Kathi3210

Mitglied
Und welche dieser Phasen soll ich jetzt sein?

ich hab die restliche Aufgabe schon programmiert, nur mit dem this. komm ich eben nicht zurecht, ich weiß nicht, was this. in diesem Fall bedeuten soll

Es steht ja dann dran:
Java:
public boolean schneidet(Intervall b)
aber wie ich die Methode mit this programmieren soll... und bin mir auch nicht sicher, wann sich 2 Intervalle überhaupt schneiden
 

timbeau

Gesperrter Benutzer
Hast du die Intervalle mal auf Papier gezeichnet?

Java:
this
bedeutet nur, dass gerade das aktuell genutzte Objekt angesprochen wird.
 

Andi_CH

Top Contributor
Ein "hyperkomplexes" Beispiel anhand dessen du die Verwendung von this begreifen solltest.

Java:
public class Doedeldidu {

	private int wert;

	public Doedeldidu(int wert) {
		this.wert = wert;
	}

	public boolean gleich(Doedeldidu d) {
		System.out.println("Dieses Objekt hat den wert     " + this.wert);
		System.out.println("Das andere Objekt hat den wert " + d.wert);
		return (d.wert==this.wert);
	}
}

Java:
public class Doedeldidutest {

	public static void main(String[] args) {
		Doedeldidu d1 = new Doedeldidu(1);
		Doedeldidu d2 = new Doedeldidu(2);
		boolean test1 = d1.gleich(d2);
		boolean test2 = d2.gleich(d1);
		System.out.println(test1);
		System.out.println(test2);
	}
}
 

Kathi3210

Mitglied
Ich deklariere also eine andere Variable mit this? oder bin ich ganz blöd?^^

Also der Code
Java:
if(links^2 >= this.links & rechts^2 <= this.rechts)
return true;
else return false;
??
 

Crian

Top Contributor
Versteh ich das falsch?

Du hast 2 Intervalle mit jeweils einem Start & einem Ende-Wert.
Warum überprüfst du nicht in der Methode "schneidet", ob der Ende-Wert von Intervall 1 zwischen Anfang und Ende-Wert von Intervall, bzw. anders herum liegt??

Schneiden sich das Intervall [1, 5] und das Intervall [2, 4] dann nicht?


In solchen Fällen verwende ich in Methoden die ein anderes Objekt der gleichen Klasse als Parameter bekommen gerne "that". Dann hat man "this" für "dieses" Objekt und "that" für das andere.
 

Kathi3210

Mitglied
also einfach nur ohne die potenz??

Java:
if((that.links >= this.links & that.links <= this.rechts)&( that.rechts<= this.rechts & that.recht >= this.links)
return true;
else return false;
 

timbeau

Gesperrter Benutzer
Bastel dir doch einfach mal 3 Szenarien.

Intervall 1 liegt links von Intervall 2 (1x innerhalb, 1x außerhalb)

I1 liegt rechts von I2 (1x innerhalb, 1x außerhalb)

I1 liegt in I2
 

Kathi3210

Mitglied
Ist das nich ungefähr das, was ich geschrieben habe? Nur vllt statt den & dann | ?

Dann hab ich noch ein Problem, und zwar soll ich in einem Hauptprogramm ein Array von drei Intervallen über Benutzereingabe eingeben, aber brauche für drei 'Intervalle nicht auch drei Arrays?
 

Andi_CH

Top Contributor
Ich deklariere also eine andere Variable mit this? oder bin ich ganz blöd?^^

Also Nachhilfe in englisch:
Das Wort "this" heisst so viel wie "dieses"

Also bezieht es sich auch auf "dieses" Objekt - das per Parameter übergebene ist das andere

Man könnte da auch so noch betonen

Java:
public class Doedeldidu {
 
    private int wert;
 
    public Doedeldidu(int wert) {
        this.wert = wert;
    }
 
    public boolean gleich(Doedeldidu other) {
        System.out.println("Dieses Objekt hat den wert     " + this.wert);
        System.out.println("Das andere Objekt hat den wert " + other.wert);
        return (other.wert==this.wert);
    }
}

Blöd? Hm - also mindestens mein banales Beispiel solltest du schon verstehen - noch banaler lässt sich das nämlich nicht erklären.
 

Kathi3210

Mitglied
Ich meinte eigentlich vergleichen, nicht deklarieren

ist der Code dann richtig oder nicht
Java:
if(d.links >= this.links | d.links <= this.rechts)|( d.rechts<= this.rechts |d.rechts >= this.links)
return true;
else return false;
 

Kathi3210

Mitglied
Also ich hab jetzt die Klasse Intervall mal folgendermaßen programmiert

Java:
public class Intervall {
 public double links;
 public double rechts;
 public double x;


public double getLinks() {
	return links;
}
public void setLinks(double links) {
	this.links = links;
}
public double getRechts() {
	return rechts;
}
public void setRechts(double rechts) {
	this.rechts = rechts;
}
public Intervall(double links, double rechts){
	this.links = links;
	this.rechts = rechts;
	if(links > rechts)
	System.out.println("Links muss kleiner sein als rechts!");

}
public Intervall(){
	
}
public boolean enthaelt(double x){
	if(x >= links &&(x<= rechts))
		return true;
	else return false;
}
public boolean schneidet(Intervall b){
	if(((b.links >= this.links)| (b.links <= this.links))
			| ((b.rechts >= this.links)|(b.rechts <= this.rechts)))
		return true;
	else return false;
}

public String toString() {
	return "Intervall [links=" + links + ", rechts=" + rechts + ", x=" + x
			+ "]";
}

}

und die dazugehörige Klasse Hauptprogramm, die ja das Array einlesen soll, hab ich probiert, aber wird alles angestrichen:

Java:
import swep.InputTools;
public class Hauptprogramm {

	
	 


	public static void main(String[] args ) {
	
	//Intervall i[][] = new Intervall[3][3];	
	
	 Intervall [][] = new Intervall [links][rechts];
	
		links1 = InputTools.readDouble("Linke Grenze:");
		rechts1 = InputTools.readDouble("Rechte Grenze:");
		this.links = InputTools.readDouble("Linke Grenze:");
		this.rechts = InputTools.readDouble("Rechte Grenze:");
		b.links = InputTools.readDouble("Linke Grenze von Intervall b:");
		b.rechts = InputTools.readDouble("Rechte Grenze von Intervall b:");
		


		
	}
}

links und rechts wird hier überall angestrichen.
Was mach ich falsch?
 
G

Gast2

Gast
Deine main Methode macht keinen Sinn.

Java:
Intervall [][] = new Intervall [links][rechts];
Hier erstellst du nen zweidimensionales Array von Intervall Objekten, wozu? Zudem gibts die Variablen links und rechts in deiner Main gar nicht.

Java:
        links1 = InputTools.readDouble("Linke Grenze:");
        rechts1 = InputTools.readDouble("Rechte Grenze:");
links1 und rechts1 hast du nirgends deklaritert, was willst du hier zuweisen?

Java:
        this.links = InputTools.readDouble("Linke Grenze:");
        this.rechts = InputTools.readDouble("Rechte Grenze:");
Deine Klasse Hauptprogramm hat keine Attribute links und rechts auf die zu zugreifen könntest. Außerdem ist this in einem statischen nicht verfügbar.

Java:
        b.links = InputTools.readDouble("Linke Grenze von Intervall b:");
        b.rechts = InputTools.readDouble("Rechte Grenze von Intervall b:");
b hast du nirgends deklariert, was willst du da zuweisen?

Leg dir doch zum testen erstmal einfach nur 2 Intervallobjekte an mit festen Werten, damit kannst du doch viel einfacher testen.
 
G

Gast2

Gast
Wer sagt dass du nen Array anlegen musst? Tuns nicht auch einfach drei Intervall instanzen?

Falls du doch nen Array brauchst dann suchst du:
Java:
Intervall[] intervalle = new Intervall[3];
Das Array hat Platz für drei Intervall Instanzen, die du dann natürlich noch anlegen musst:
Java:
intervalle[0] = new Intervall(4,5);
 

Kathi3210

Mitglied
aber so gebe ich ja nicht die Werte von links und rechts ein oder?

oder kann ich dann sagen :

Java:
Intervalle[0] = new Intervall[links][rechts]
      Intervalle[1] = new Intervall[links][rechts]
??
 
G

Gast2

Gast
Nö kannst du nicht, das kompiliert nicht.
Schau dir nochmal Konstruktoren und meinen Beitrag vorher an.
 

Ähnliche Java Themen

Neue Themen


Oben