Kleinster Abstand berechnen (prozedural)

Merick

Mitglied
Hallo liebe Java'ler!
Das problem aus meinem anderen Thema habe ich objekt orientiert gelöst. Aber das möchte mein Betreuer nicht so haben. Ich müsste machen als ob ich in "Basic" oder ähnliche programmieren würde und einfache Datentype benutzen (als prozedural). Im Anhang ist eine Skizze zu sehen.

Zu dem Problem: Ein Objekt O steht auf eine Linie (AB, BC, CD oder DA) in Bestimmten Position x.
wir häten etwas wie O1.AB (O1 steht auf AB)
O1.x (O1 steht auf Position x auf AB)

Ich soll dazu eine Funktiondefinieren, die die Entfernung im Uhrzeigersinn und umgekehr die Entfernung zum Ziel berechnen und mir die beide Entfernungen zurückgibt.

Hat jemand eine Idee, wie ich es machen kann? welchen Datentyp könnte AB, BC, CD, DA, O haben.
Können sie mir bitte helfen. Es schein (laut mein Beteruer simple zu sein) aber ich sehe es nicht so. Darum brauche ich Ihre Hilfe.
Merick
 

Anhänge

  • Zeichnung.JPG
    Zeichnung.JPG
    10,2 KB · Aufrufe: 53

Ein Keks

Bekanntes Mitglied
Merick hat gesagt.:
Aber das möchte mein Betreuer nicht so haben.
aus purer Neugier: Warum? Java ist nunmal eine OOP-Sprache und keine prozedurale Sprache :bahnhof:

bleibt halt noch die Frage was mit einfachen Datentypen gemeint ist. Nur primitive Datentypen und Arrays oder auch einfache Wrapper-Klassen?

wahrscheinlich will er sowas:
Java:
static int[] lineAB = {0,0,10,0};
static int[] lineBC = {10,0,10,10};
//usw.
static int x1 = 2;
static int x2 = 7;

static int[] rechneMirDieBeidenEntfernungenAus(int[] startLine, int startX, int[] endLine, int endX){
  //sehr schöne berechnung die wunderbar lesbar ist *hust*
  return new int[]{ergebnis1, ergebnis2};
}
aber wer liest solchen code nicht gerne ist doch logisch das lineAB[0] auf die erste x-Koordinate zeigt.... :autsch:
 

Merick

Mitglied
aus purer Neugier: Warum? Java ist nunmal eine OOP-Sprache und keine prozedurale Sprache :bahnhof:

bleibt halt noch die Frage was mit einfachen Datentypen gemeint ist. Nur primitive Datentypen und Arrays oder auch einfache Wrapper-Klassen?

wahrscheinlich will er sowas:
Java:
static int[] lineAB = {0,0,10,0};
static int[] lineBC = {10,0,10,10};
//usw.
static int x1 = 2;
static int x2 = 7;

static int[] rechneMirDieBeidenEntfernungenAus(int[] startLine, int startX, int[] endLine, int endX){
  //sehr schöne berechnung die wunderbar lesbar ist *hust*
  return new int[]{ergebnis1, ergebnis2};
}
aber wer liest solchen code nicht gerne ist doch logisch das lineAB[0] auf die erste x-Koordinate zeigt.... :autsch:
Für den Betreuer ist die OOP zu lang und komplizeirt für so einen "kleinen" problem. Ich soll arbeiten als wie es keine OOP gebe. Mein problem hierbeiist erst, dass ich nich weiß in welche Datentyp ich die Variablen deklarieren soll. wie ich zu Zuordnung von einem Objekt zu einem Gerade machen kann? ich stopert auf solche sache und muss morgen das Ergebnis vorstellen. Bitte eine kleine Programmcode zur Funktion wäre mir sehr hilfreich.

Merick
 

Merick

Mitglied
zeig mal deine OOP-Lösung

hier ist die Klasse Objekt wo ich die berechnung der Abstände mache. An dieser Stelle berechne ich den Abstand vom IstPosition zur ZielPosition.
Code:
public class Objekt 
{
	// Attribute der Klasse Objekt
	private int rgbId;
	private Position istPosition;
	private Position zielPosition;
	private int direction;            
	
	// Initialiesirung
	public Objekt(){
		this.rgbId = 0;
		this.istPosition = null;
		this.zielPosition = null;
		this.direction = 0;
	}
	
	// Methoden für Konstruktoren
	public void setRgbId(int rgbId)
	{
		this.rgbId = rgbId;
	}
	
	public int getRgbId(){
		return this.rgbId;
	}
	
	public void setIstPostion(Position p)
	{
		this.istPosition = p;
			
	}
	
	public Position getIstPosition(){
		return this.istPosition;
	}
	
	public void setZielPostion(Position p)
	{
		this.zielPosition = p;
		
	}
	
	public Position getZielPosition(){
		return this.zielPosition;
	}
	
	public void setDirection(int dir)
	{
		this.direction = dir;
	}
	
	
	public void move(){
		Position ziel = this.zielPosition;
		Position ist = this.istPosition;
		
		if (ziel.getOnRegal().getRegalId() != ist.getOnRegal().getRegalId() || ziel.getX() != ist.getX()){
		
			if(ziel.getOnRegal().getRegalId() == ist.getOnRegal().getRegalAtLeft().getRegalId())
			{
				zielOnLeft();
			}
			
			if(ziel.getOnRegal().getRegalId() == ist.getOnRegal().getRegalAtRight().getRegalId())
			{
				zielOnRight();
			}
			
			
			if(ziel.getOnRegal().getRegalId() == ist.getOnRegal().getRegalAtLeft().getRegalAtLeft().getRegalId())
			{
				int leftDist = ist.getX() + ziel.getOnRegal().getRegalLength()-ziel.getX();
				int rightDist = ziel.getX() + ist.getOnRegal().getRegalLength()-ist.getX();
				if(leftDist < rightDist)
					zielOnLeft();
				else
					zielOnRight();
			}
			
			if(ziel.getOnRegal().getRegalId() == ist.getOnRegal().getRegalId())
			{
				onSameRegal();
			}
		}
	}
	
	public void zielOnLeft(){
		Position ziel = this.zielPosition;
		Position ist = this.istPosition;
		
		if (ist.getX() > 1)
			ist.setX(ist.getX()-1);
		else if (ist.getX() == 1)
		{
			ist.setOnRegal(ist.getOnRegal().getRegalAtLeft());
			ist.setX(ist.getOnRegal().getRegalLength());
		}
		movedMessage();
	}
	
	public void zielOnRight(){
		Position ziel = this.zielPosition;
		Position ist = this.istPosition;
		
		if(ist.getX() < ist.getOnRegal().getRegalLength())
			ist.setX(ist.getX()+1);
		else if(ist.getX() == ist.getOnRegal().getRegalLength())
		{
			ist.setOnRegal(ist.getOnRegal().getRegalAtRight());
			ist.setX(1);
		}
		movedMessage();
	}
	
	public void onSameRegal(){
		
		Position ziel = this.zielPosition;
		Position ist = this.istPosition;
		
		if (ist.getX() > ziel.getX())
			ist.setX(ist.getX()-1);
		else
			ist.setX(ist.getX()+1);
		movedMessage();
	}
	
	public void movedMessage(){
		System.out.println("Objekt"+getRgbId()+" on Regal"+istPosition.getOnRegal().getRegalId()
				+" at "+istPosition.getX());
	}
	
	public int calculateDist(Objekt r){
		int distance = 0;
		Position ziel = r.istPosition;
		Position ist = this.istPosition;
		
		if(ziel.getOnRegal().getRegalId() == ist.getOnRegal().getRegalAtLeft().getRegalId())
		{
			distance = ist.getOnRegal().getRegalLength()-ist.getX()+ziel.getX();
		}
		
		if(ziel.getOnRegal().getRegalId() == ist.getOnRegal().getRegalAtRight().getRegalId())
		{
			distance = ziel.getOnRegal().getRegalLength()-ziel.getX()+ist.getX();
		}
		
		
		if(ziel.getOnRegal().getRegalId() == ist.getOnRegal().getRegalAtLeft().getRegalAtLeft().getRegalId())
		{
			int leftDist = ist.getX() + ziel.getOnRegal().getRegalLength()-ziel.getX();
			int rightDist = ziel.getX() + ist.getOnRegal().getRegalLength()-ist.getX();
			if(leftDist < rightDist)
				distance = ist.getOnRegal().getRegalLength()-ist.getX()+ziel.getX()+ist.getOnRegal().getRegalAtLeft().getRegalLength();
			else
				distance = ziel.getOnRegal().getRegalLength()-ziel.getX()+ist.getX()+ist.getOnRegal().getRegalAtRight().getRegalLength();
		}
		
		if(ziel.getOnRegal().getRegalId() == ist.getOnRegal().getRegalId())
		{
			distance = Math.abs(ist.getX()-ziel.getX());
		}
		
		return distance;
	}
	
	public boolean onZiel(){
		Position ziel = this.zielPosition;
		Position ist = this.istPosition;
		if (ziel.getOnRegal().getRegalId() == ist.getOnRegal().getRegalId() && ziel.getX() == ist.getX())
			return true;
		
		return false;
	}
	
}
 

Ein Keks

Bekanntes Mitglied
Merick hat gesagt.:
Für den Betreuer ist die OOP zu lang und komplizeirt für so einen "kleinen" problem.
frag ihn mal wie er das findet (es ist eindeutig prozedural....nur halt ein wenig krank :D)

Java:
public class WegBerechnung {

	static int[] lineAB = {0,0,15,0}; //{x1,y1,x2,y2}
	static int[] lineBC = {15,0,15,10};
	static int[] lineCD = {15,10,0,10};
	static int[] lineDA = {0,10,0,0};

	static int width = lineAB[2]-lineAB[0];
	static int height = lineBC[3]-lineBC[1];
	
	public static void main(String[] args) {
		int[] result = calculate(lineAB, 4, lineCD, 7);
		System.out.println(Math.min(result[0], result[1]));
	}
	
	public static int[] calculate(int[] line1, int s1, int[] line2, int s2){
		int x1 = line1[0]==line1[2]? line1[0] : s1;
		int y1 = line1[1]==line1[3]? line1[1] : s1;
		int x2 = line2[0]==line2[2]? line2[0] : s2;
		int y2 = line2[1]==line2[3]? line2[1] : s2;
		return new int[]{calculate(x1,y1,x2,y2,true),calculate(x1,y1,x2,y2,false)};
	}
	
	private static int calculate(int x1, int y1, int x2, int y2, boolean clockWise){
		int cw = clockWise? 1 : -1;
		if(x1 == x2 && y1 == y2) return 0;
		if(y1>0 && y1<height)
			return calculate(x1,y1+cw*(x1==0?-1:1),x2,y2,clockWise)+1;
		else if(x1>0 && x1<width)
			return calculate(x1+cw*(y1==0?1:-1),y1,x2,y2,clockWise)+1;
		else if(x1==0 && y1==height || x1==width && y1==0)
			return calculate(x1+(clockWise?0:(y1==0?-1:1)),y1+(clockWise?(x1==0?-1:1):0),x2,y2,clockWise)+1;
		else
			return calculate(x1+(clockWise?(y1==0?1:-1):0),y1+(clockWise?0:(x1==0?1:-1)),x2,y2,clockWise)+1;	
	}
}

naja aber hier ma dein code einfach ohne Objekte (außer Array...):
Java:
public class WegBerechnung {

	static int[] lineAB = {0,0,15,0}; //{x1,y1,x2,y2}
	static int[] lineBC = {15,0,15,10};
	static int[] lineCD = {15,10,0,10};
	static int[] lineDA = {0,10,0,0};

	static int width = lineAB[2]-lineAB[0];
	static int height = lineBC[3]-lineBC[1];

	
	static int otherCalculation(int[] istRegal, int istX, int[] zielRegal, int zielX){
		int distance = 0;
		
		if(zielRegal == getRegalAtLeft(istRegal))
		{
			distance = getLength(istRegal)-istX+zielX;
		}
		
		if(zielRegal == getRegalAtRight(istRegal))
		{
			distance = getLength(zielRegal)-zielX+istX;
		}
		
		if(zielRegal == getRegalAtLeft(getRegalAtLeft(istRegal)))
		{
			int leftDist = istX + getLength(zielRegal)-zielX;
			int rightDist = zielX + getLength(istRegal)-istX;
			if(leftDist < rightDist)
				distance = getLength(istRegal)-istX+zielX+getLength(getRegalAtLeft(istRegal));
			else
				distance = getLength(zielRegal)-zielX+istX+getLength(getRegalAtRight(istRegal));
		}
		
		if(zielRegal == istRegal)
		{
			distance = Math.abs(istX-zielX);
		}
		
		return distance;

	}

	private static int getLength(int[] line) {
		if(line[0]==line[2])return height;
		else return width;
	}

	private static int[] getRegalAtLeft(int[] line) {
		if(line == lineAB)return lineBC;
		else if(line == lineBC)return lineCD;
		else if(line == lineCD)return lineDA;
		else return lineAB;
	}

	private static int[] getRegalAtRight(int[] line) {
		return getRegalAtLeft(getRegalAtLeft(getRegalAtLeft(line)));
	}
}

edit: hmm... hätte das vllt mal etwas früher machen können. hoffentlich siehst du das noch.
 
Zuletzt bearbeitet:

Merick

Mitglied
Hallo ein Keks!
vielen Dank. Ich hoffe, dass er morgen einverstanden ist. Ich hätte nicht wie du gelöst. Ich wäre sogar nicht zu dieser Idee gekommen. Ich war OOP und konnte nix prozedurales. nochmal vielen Dank.
Ich habe noch eine kleine Frage, falls du noch heute oder auch morgen liest: Wie kann ich diese Prozerure zufällig machen? Also, wenn ich die Positionen (Ist- und ZielPosition) zufällig ausgewählt werden sollen.
Ich danke nochmal.

Merick
 

Ein Keks

Bekanntes Mitglied
Ich war OOP und konnte nix prozedurales.
kann ich gut nachvollziehen^^ musste mich auch ganz schön überwinden keine Objekte zu benutzen xD

auf die schnelle hingeschrieben:
Java:
static void randomCalculation(){
  Random random = new Random();
  int[] istRegal= getLine(random.nextInt(4));
  int[] zielRegal= getLine(random.nextInt(4));
  int istX = random.nextInt(getLength(istRegal));
  int zeilX = random.nextInt(getLength(zielRegal));
  int dis = otherCalculation(istRegal, istX, zielRegal, zielX);
  //schöne ausgabe des ganzen^^
}

static int[] getLine(int i){
  switch(i){
   case 0: return lineAB;
   case 1: return lineBC;
   case 2: return lineCD;
   case 3: return lineDA;
   default: return null;
  }
}

//für die ausgabe^^
static String getName(int[] regal){
  if(regal == lineAB) return "lineAB";
  else if(regal == lineBC) return "lineBC";
  else if(regal == lineCD) return "lineCD";
  else return "lineDA";
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Arrays sortieren und kleinster Abstand Java Basics - Anfänger-Themen 3
S kleinster Index der größten Komponente ? Java Basics - Anfänger-Themen 3
S Kleinster Wert im Array bestimmen Java Basics - Anfänger-Themen 4
R kleinster Value in HashMap Java Basics - Anfänger-Themen 12
F Abstand zwischen zwei Objekten berechnen wie? Java Basics - Anfänger-Themen 1
M Wie kann ich hier den Abstand ausgeben? Java Basics - Anfänger-Themen 3
F Aufgabe: Abstand von einem Punkt zu einem anderen Punkt Java Basics - Anfänger-Themen 10
F Abstand zum Durchschnitt von 5 Zahlen berechnen... Java Basics - Anfänger-Themen 16
CptK Interface Bilder über Bildschirm bewegen, bis der Abstand zum vorherigen zu groß wird Java Basics - Anfänger-Themen 13
Dilara_K Abstand zwischen den Doppelwerten in einem Array herausfinden Java Basics - Anfänger-Themen 20
B Erste Schritte Größter Abstand von 2 Zahlen aus 3 Zahlen ausgeben Java Basics - Anfänger-Themen 6
T Abstand zwischen zwei Zeitstempeln errechnen. Java Basics - Anfänger-Themen 3
M Abstand 2er Punkte (Klassen) Java Basics - Anfänger-Themen 11
F Punktpaar mit geringstem Abstand finden Java Basics - Anfänger-Themen 4
hdi formatierte ausgabe -> probleme mit tabulator abstand Java Basics - Anfänger-Themen 3
G JMenuItem Abstand Java Basics - Anfänger-Themen 2
ChackZz Abstand zwischen zwei Daten berechnen Java Basics - Anfänger-Themen 5
P Abstand zwischen zwei Punkten Java Basics - Anfänger-Themen 4
P Abstand vom Rahmen zu Komponenten bestimmen? Java Basics - Anfänger-Themen 3
G Abstand JFrame Java Basics - Anfänger-Themen 5
G Pixel-Abstand im JPanel Java Basics - Anfänger-Themen 11
G JPanel (Abstand von links) Java Basics - Anfänger-Themen 1
G Horizontaler Abstand zwischen Buchstaben Java Basics - Anfänger-Themen 2
O abstand vom text zum border Java Basics - Anfänger-Themen 4
M OOP Brüche nicht richtig berechnen Java Basics - Anfänger-Themen 3
V Durchschnittliche Volatility in Prozent für 4 Stunden berechnen Java Basics - Anfänger-Themen 14
T Fibonacci mit einer Hilfsmethode berechnen Java Basics - Anfänger-Themen 10
laxla123 Quersumme berechnen Java Basics - Anfänger-Themen 1
I For Schleife Summe berechnen Java Basics - Anfänger-Themen 13
S Vollmond berechnen und ausgeben Java Basics - Anfänger-Themen 12
S Vollkommene Zahl berechnen und ausgeben Java Basics - Anfänger-Themen 16
A Berechnen Moor Nachbarschaft Java Basics - Anfänger-Themen 5
E Geburtstag im Schaltjahr berechnen Java Basics - Anfänger-Themen 24
Lion.King Schaltjahr berechnen Java Basics - Anfänger-Themen 31
E Alter (Laufzeit) berechnen Java Basics - Anfänger-Themen 11
I Zuschläge berechnen Java Basics - Anfänger-Themen 15
L mit Fakultät mathematische Formel berechnen Java Basics - Anfänger-Themen 5
TanTanIsTrying Durschnitt berechnen von eingegebener Zahl bis 1 heruntergezählt Java Basics - Anfänger-Themen 9
L Präfix berechnen Java Basics - Anfänger-Themen 33
Aemulit Java Schaltjahr berechnen Code Java Basics - Anfänger-Themen 7
Poppigescorn Quersumme Berechnen mit einer While Schleife Java Basics - Anfänger-Themen 13
I Potenz berechnen mit for-Schleife Java Basics - Anfänger-Themen 3
A Standardabweichung in Java berechnen Java Basics - Anfänger-Themen 10
H Gesamtabweichung mit Array berechnen Java Basics - Anfänger-Themen 2
G Java Rabatt berechnen Java Basics - Anfänger-Themen 8
V Rückgeld berechnen Java Basics - Anfänger-Themen 6
eleonori Durchschnitt aller Werte eines Baums berechnen Java Basics - Anfänger-Themen 5
Ianatrix Zahlen von a bis b berechnen Java Basics - Anfänger-Themen 7
L Max, min, Summe und Durchschnitt berechnen Java Basics - Anfänger-Themen 4
L Anhalteweg berechnen Java Basics - Anfänger-Themen 6
Aeon Erste Schritte Preise berechnen mit do-while Java Basics - Anfänger-Themen 9
M Quadratwurzel berechnen Java Basics - Anfänger-Themen 8
V Wachstum berechnen und in Ist-Formel verwenden Java Basics - Anfänger-Themen 5
N Variable aus anderen Variablen in statischer Klasse berechnen/abspeichern? Java Basics - Anfänger-Themen 4
M Abschreibungsplan berechnen Java Basics - Anfänger-Themen 23
V Gehalt berechnen in Java Java Basics - Anfänger-Themen 6
justemii Gehalt berechnen - Aufgabe Java-Programm Java Basics - Anfänger-Themen 9
L Anzahl der benachbarten Minen berechnen und setzen Java Basics - Anfänger-Themen 15
J Array Speicherplatz berechnen Java Basics - Anfänger-Themen 35
H Eingabedaten berechnen Java Basics - Anfänger-Themen 9
B Tranportkosten berechnen mit unterschiedlichen MwSt Java Basics - Anfänger-Themen 9
L Anzahl der Paare deren Summe = 0 ergibt berechnen Java Basics - Anfänger-Themen 0
V Erste Schritte Berechnen von Sinus; sin(x) ohne Math.* Java Basics - Anfänger-Themen 1
J Hilfe bei Java Aufgabe (Restschuld berechnen) Java Basics - Anfänger-Themen 11
N Ein Datum berechnen Java Basics - Anfänger-Themen 3
T Sparplan berechnen Java Basics - Anfänger-Themen 4
B java.util.Date berechnen Java Basics - Anfänger-Themen 11
P Mittelwert Arrayelemente berechnen Fehler Java Basics - Anfänger-Themen 5
CptK Best Practice Schussparabel berechnen Java Basics - Anfänger-Themen 3
T Modulo / Pow berechnen Java Basics - Anfänger-Themen 4
E Statistische Kennzahlen berechnen Java Basics - Anfänger-Themen 2
F Switch Case Modulo berechnen Java Basics - Anfänger-Themen 12
B mehrere Werte mit scanner und while schleife einlesen, max berechnen bzw addieren Java Basics - Anfänger-Themen 2
C Preis berechnen mit Java Java Basics - Anfänger-Themen 4
B Zahl in String abspeichern und später berechnen Java Basics - Anfänger-Themen 15
N Best Practice Image recognition fuzzy Superhash berechnen Java Basics - Anfänger-Themen 1
Dawinartor Erste Schritte Schaltjahr berechnen Java Basics - Anfänger-Themen 1
L Pi berechnen Java Basics - Anfänger-Themen 1
CptK Term (als String) berechnen und ausgeben Java Basics - Anfänger-Themen 10
L Den Winkel zwischen zwei Vektoren berechnen! Java Basics - Anfänger-Themen 2
J Variablen arithmetischen Mittelwert berechnen Java Basics - Anfänger-Themen 5
K Matrixen berechnen nach Worker Master Paradigma mit Threads Java Basics - Anfänger-Themen 4
R Winkel berechnen bzw. Geraden sortieren Java Basics - Anfänger-Themen 33
I Schnittpunkt zweier Geraden berechnen Java Basics - Anfänger-Themen 25
M Erste Schritte Mittelwert berechnen -> Methode in der Methode? Java Basics - Anfänger-Themen 14
S Compiler-Fehler Schaltjahr berechnen Java Basics - Anfänger-Themen 5
B Fakultätsfunktion Rekursiv Berechnen aber mit Array Java Basics - Anfänger-Themen 10
S Durchschnitt berechnen aus zwei Textfeldern Java Basics - Anfänger-Themen 21
D Summe berechnen mit verändertem Wert aus Schleife Java Basics - Anfänger-Themen 1
R Liga Berechnen Java Basics - Anfänger-Themen 1
P Klassen Berechnen mehrerer Map-Werte Java Basics - Anfänger-Themen 13
R Fussballtabellen berechnen Java Basics - Anfänger-Themen 12
J Fibonacci -Folge rekursiv berechnen Java Basics - Anfänger-Themen 18
J Durchschnitt jeder Zeile und und Spalte in einem 2D Arrays berechnen Java Basics - Anfänger-Themen 6
F ISBN Prüfziffer berechnen Java Basics - Anfänger-Themen 17
F Die Teilersumme einer Eingabe berechnen Java Basics - Anfänger-Themen 11
S Negafibonacci Folge berechnen Java Basics - Anfänger-Themen 24
G Array Mittelwert berechnen, wie? Java Basics - Anfänger-Themen 8
S Primzahlen berechnen funktioniert nicht richtig Java Basics - Anfänger-Themen 1
N Mit LocalDate alter berechnen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben