Balken-Turm

looser88

Mitglied
Hallo
Ich habe folgendes Problem.
Ich möchte das der Benutzer mehrere Balken angibt und dann soll mein Programm die Info nutzen und für die Formel die xKoordinate der Balken nehmen.
Die Schnittstellen muss ich machen .
Eingabe Balken->Programm erkennt Balkenart(Länge)Schnittstelle Balken nutzen->dann Schnittstelle Punkt nutzen für xKoordinate -> xKoordinate in Formel anwenden(Schnittstelle Haufen nutzen)

Habe überlegt und der Benutzer könnte Felder bestimmen -> Balken[0]=EinerBalken
Balken[1]=DreierBalken usw.
Dann soll das Programm Die Länge erkennen und die xKoordinate in meine For –Schleife bringen bzw. nutzen
Und da ist mein Problem wie ich es machen soll …???
nittstelle Punkt
Hier fehlt mir die Idee wie ich bestimme, dass das Programm Die Balkenart erkennt und davon die xKoordinate ermittelt mit Hilfe Schnittstelle Punkt
Java:
public interface IPunkt {
	
final double YKoordinateB=0.5;
// Xkoordinate ist immer Balkenlaenge durch 2
final double xKoordinateB= (IBalken.Balkenart)/2;

}

Java:
public interface IBalken extends IPunkt{
//Laenge des Balken
	final double EinerBalken= 1;
	final double ZweierBalken= 2;
	final double DreierBalken= 3;
	final double ViererBalken= 4;
	final double FuenferBalken= 5;

Java:
public interface IHaufen extends IBalken {
	final double AnzahlBalken = 6;
	public double Haufen();
	public double Haufenueberpruefung();

}

Die For-Schleife ist noch nicht fertig !

Java:
public class HaufenAllg implements IHaufen{



	@Override
	public double Haufen() {
		
		double s=0;
		for (int i = 0;i<=AnzahlBalken;i++)			
		s = xKoordinateB[i]-xKoordinateB[i+1];
		.......
	}


	public double Haufenueberpruefung() {
                for(int i= 0,i<=AnzahlBalken,i++)
                  s = (xKoordinateB[i+1]+xKoordinateB[i+2])/4
                .....
	}

Java:
public class Anwendung {
	import........ ;

	public static void main(String[] args) {
		Balken[0]=EinerBalken;
                Balken[1]=DreierBalken;

	}
}
 
Zuletzt bearbeitet von einem Moderator:
C

Camino

Gast
Ich möchte das der Benutzer mehrere Balken angibt und dann soll mein Programm die Info nutzen und für die Formel die xKoordinate der Balken nehmen.

Der Benutzer soll mehrere Balken angeben? Hab überhaupt nicht verstanden, was du da machen möchtest. Vielleicht kannst du das nochmal genauer und verständlicher beschreiben. Balken, Haufen, Punkte... was soll denn in dem Programm ablaufen bzw. was soll der Benutzer da machen?
 

looser88

Mitglied
Also ich habe Balken gegeben : Balken Laenge 1,Balken Länge 2 usw. Höhe sind alle gleich
Für meine Formel benötige ich immer die Hälfte des Balken = Mitte
Ich möchte die Balken übereinander packen und schauen ob es hält. Sie sind links immer bündig!!!
Der Benutzer soll in der Reihenfolge von unten nach oben angeben ,welche Balken aufeinander liegen
Ich muss Diese 3 Schnittstellen Punkt , Balken, Haufen verwenden
Nun weiß ich nicht wie ich meiner Formel sage ...nehme die Mitte des Balken mithilfe der Schnittstellen
 
C

Camino

Gast
Du musst ja irgendwann nochmal auf dein angelegtes Array mit Balken[] zugreifen und von den darin angelegten Balken(arten) den Mittelpunkt berechnen/holen. Das wird zwar in der main-Methode angelegt, aber wo taucht das denn weiter in deinem Programm auf?
 

looser88

Mitglied
Wie weiter auftauchen ...vielleicht ist mein Ansatz auch falsch ...ich möchte das der vom Benutzer gegebene Balken erkannt wird ...dann diese x.Koordinate (Balkenmitte) erechnet wird und in meine For-Schleife genutzt wird zu Berechnung meiner Formel...
 

looser88

Mitglied
Ich habe jetzt mal anders gemacht , aber immer noch Probleme

Ich habe jetzt 6 Balken eingeben.
Nun soll die Methode XErmitteln() jeden Balken berechnen(Hier fehlt mir ein Ansatz wie ich das mache)
Dann soll der Wert aus XErmitteln () für jeden Balken in die Methode BalkaufBalk() genommen werden

Eingabe Benutzer : Balken[0]= balken1
dann soll Balken[0]=Balken1 in der Methode XErmitteln() benutzt werden
danach soll der ermittelte xWert in der Methode BalkaufBalk () genomen werden


Dann weiß ich nicht wie ich in der Anwendung den Wert im System.out.println() wiedergeben kann ????








Java:
package Bau2;
public interface IPunkt{
	
final double YKoordinateSP=0.5;
double XErmittlung(double Balken);
}

Java:
package Bau2;
public interface IBalken {

	final double Balken1= 1;
	final double Balken2= 2;
	final double Balken3= 3;
	final double Balken4= 4;
	final double Balken5= 5;
	
	
	
}

Java:
package Bau2;
public interface IHaufen {
	
	public double BalkaufBalk(double Balken[]);
	

}

Java:
public class Pruefen implements IHaufen{



	


public double XErmittlung(double[] Balken){
	//??????????
	double x1 = Balken[]/2;
	return x1;
	
}

	public double BalkaufBalk(double Balken[]) {
		
		double s=0;
		for (int i = 0;s<=0;i++)			
		s += x.Balkeni]-x.Balken[i+1];
		
		
		return  s;
	}

}

Java:
package Bau2;
import Bau2.Pruefen;
import Bau2.IBalken;


public class Anwendung {

	

	public static void main(String[] args) {
		 
		double Balken1 = IBalken.Balken1;
		double Balken2 = IBalken.Balken2;
		double Balken3 = IBalken.Balken3;
		double Balken4 = IBalken.Balken4;
		double Balken5 = IBalken.Balken5;
		
		double Balken[]  = new double[6];
		
		//Haufen1
		Balken[0]= Balken2;
		Balken[1]= Balken3;
		Balken[2]= Balken5;
		Balken[3]= Balken4;
		Balken[4]= Balken1;
		Balken[5]= Balken3;
		//System.out.println(s)????????????????????????????????
 

insane80

Aktives Mitglied
Die Methode wird nicht hinhauen.
Java:
public double XErmittlung(double[] Balken){
    //??????????
    double x1 = Balken[]/2; //<-- geht nicht
    return x1;
    
}

Du willst doch nur den Wert eines Elements ermitteln, also übergib' auch nur einen Wert.
Java:
public double XErmittlung(double balken)

"BalkaufBalk" soll dann ein Array der ermittelten Werte aus XErmittlung weiterverarbeiten bzw. ausgeben oder wie hast Du Dir das gedacht? Da hast Du hier auch noch ein Syntax-Problem:

Java:
s += x.Balkeni]-x.Balken[i+1];

Wenn Du ein Array mit den ermittelten Werten übergeben willst, musst Du dann die entsprechenden Werte ins Array speichern.
Java:
double Balken[]  = new double[6];
        
        //Haufen1
        Balken[0]= XErmittlung(Balken2);

Eine Instanz der Klasse
Code:
Pruefen
brauchst Du auch, um die Methoden aufrufen zu können.

Ausgeben kannst Du das Array z. B. einfach mit
Java:
System.out.println(Arrays.toString(array);
 

looser88

Mitglied
Ja die Methode ist falsch----ich möchte das die Methode jeden Balken[0] bis Balken[5],der vom Benutzer bei der Anwendung eingeben wird halbiert. Ideen??

Java:
public double XErmittlung(double[] Balken){
    //??????????
    double x1 = Balken[]/2; //<-- geht nicht
    return x1;
    
}
Genau! Weiß nicht wie ich das Problem löse
"BalkaufBalk" soll dann ein Array der ermittelten Werte aus XErmittlung weiterverarbeiten bzw. ausgeben oder wie hast Du Dir das gedacht? Da hast Du hier auch noch ein Syntax-Problem:

Java:
s += x.Balkeni]-x.Balken[i+1];
Wenn Du ein Array mit den ermittelten Werten übergeben willst, musst Du dann die entsprechenden Werte ins Array speichern.
Java:
double Balken[]  = new double[6];
        
        //Haufen1
        Balken[0]= XErmittlung(Balken2);//<-----hier soll der Benutzer eingeben welcher Balken es ist (Balken1 o. Balken2 usw.)

Weiß leider nicht was/wie du das meinst?
Eine Instanz der Klasse
Code:
Pruefen
brauchst Du auch, um die Methoden aufrufen zu können.
 

insane80

Aktives Mitglied
Ja die Methode ist falsch----ich möchte das die Methode jeden Balken[0] bis Balken[5],der vom Benutzer bei der Anwendung eingeben wird halbiert. Ideen??
Ja, hier eben nur einen Wert und kein Array übergeben:
Java:
public double xErmittlung(double balken){
   return balken / 2;    
}
Du könntest dann z. B. das Array mit den Balken in einer Schleife durchgehen und die ermittelten Werte in ein neues Array speichern, mit dem Du dann weitermachst.
Genau! Weiß nicht wie ich das Problem löse
Die Methode haut allgemein nicht so hin. Weiß ja nicht genau, was Du berechnen willst, aber so würde es gehen:
Java:
public double balkaufBalk(double[] balken) {

        double s=0;
        for (int i = 0; i < balken.length -1; i++) {
            s += balken[i] - balken[i+1];
        }
        return  s;
    }
Weiß leider nicht was/wie du das meinst?
Deine Methoden balkaufBalk und XErmittlung sind in der Klassen Prüfen, also brauchst Du auch ein Objekt der Klasse, um die Methoden aufrufen zu können.
Java:
 public static void main(String[] args) {
         
        Pruefen pruefen = new Pruefen();        

        double Balken1 = IBalken.Balken1;
        double Balken2 = IBalken.Balken2;
        double Balken3 = IBalken.Balken3;
        double Balken4 = IBalken.Balken4;
        double Balken5 = IBalken.Balken5;
        
        double[] balken  = new double[6];
        
        //Haufen1
        balken[0]= pruefen.xErmittlung(Balken1);
        //und so weiter...
        
        System.out.println(Arrays.toString(balken);
 

looser88

Mitglied
Die Methode soll die ermittelten xWerte nehmen?!?!?!Wie kriege ich die da rein???
Die Methode haut allgemein nicht so hin. Weiß ja nicht genau, was Du berechnen willst, aber so würde es gehen:
Java:
public double balkaufBalk(double[] balken) {

        double s=0;
        for (int i = 0; i < balken.length -1; i++) {
            s += balken[i] - balken[i+1];
        }
        return  s;
    }

Aufjedenfall schonmal Danke für die Tipps :)
 

insane80

Aktives Mitglied
Die Methode soll die ermittelten xWerte nehmen?!?!?!Wie kriege ich die da rein???

Also, damit ich das richtig verstehe: Du willst von den Variablen Balken1 bis Balken5 den durch die Methode xErmittlung(double balken) erhaltenen Wert in ein Array speichern und damit dann die Methode balkaufBalk(double[] balken) verwenden?

Dazu hatte ich Dir ja schon ein Beispiel in die main geschrieben. Ist halt nicht gerade dynamisch so ;)
Ich habe noch ein paar Kommentare hinzugefügt.
Java:
public static void main(String[] args) {
         
        Pruefen pruefen = new Pruefen();        
 
        double Balken1 = IBalken.Balken1;
        double Balken2 = IBalken.Balken2;
        double Balken3 = IBalken.Balken3;
        double Balken4 = IBalken.Balken4;
        double Balken5 = IBalken.Balken5;
        
        double[] balken  = new double[6];
        
        //Haufen1
        //so füllst Du das Array mit den ermittelten Werten
        balken[0]= pruefen.xErmittlung(Balken1);
        balken[1]= pruefen.xErmittlung(Balken2);
        //und so weiter...
        //hier rufst Du die Methode balkaufBalk, der Du das Array balken mit den ermittelten x-Werten übergibst, auf und weist die Rückgabe einer double-Variable zu
        double whatever =  pruefen.balkaufBalk(balken)        
        //hier was immer Du mit dem Ergebnis machen möchtest...

        //hier wird das Array nur ausgegeben
        System.out.println(Arrays.toString(balken);

Vielleicht verstehe ich aber auch gerade irgendwie nicht, was Du machen möchtest... ;)
 

looser88

Mitglied
Habe jetzt nen guten Ansatz doch 2 Problemchen

Bei BalkaufBalk() möchte ich das er die Methode Extra() nur macht wenn BalkaufBalk falsch ist
und dann Weiß ich nicht wie man in der Main-Methode System.out.println() so gestaltet das er mir sagt bei falsch = geht nicht und bei true = geht für Haufen1 extra und Haufen2 extra.


Java:
package Bau2;
import java.util.Arrays;

import Bau2.pruefung;
import Bau2.IBalken;


public class Anwendung {

	

	public static void main(String[] args) {
		 
		double Balken1 = IBalken.Balken1;
		double Balken2 = IBalken.Balken2;
		double Balken3 = IBalken.Balken3;
		double Balken4 = IBalken.Balken4;
		double Balken5 = IBalken.Balken5;
		
		double Balken[]  = new double[6];
		
		//Haufen1
               Balken[0]= pruefen.Xermittlung.Balken1;
               Balken[1]= pruefen.Xermittlung.Balken3;
               Balken[2]= pruefen.Xermittlung.Balken5;
               Balken[3]= pruefen.Xermittlung.Balken5;
               Balken[4]= pruefen.Xermittlung.Balken1;
               Balken[5]=pruefen.Xermittlung. Balken3;
        //System.out.println(????????????????????????????????)
	

         
          //Haufen2
               Balken[0]= pruefen.Xermittlung.Balken3;
               Balken[1]= pruefen.Xermittlung.Balken3;
               Balken[2]= pruefen.Xermittlung.Balken5;
               Balken[3]= pruefen.Xermittlung.Balken5;
               Balken[4]= pruefen.Xermittlung.Balken3;
               Balken[5]=pruefen.Xermittlung. Balken3;
        //System.out.println(????????????????????????????????)
	
		
		
	}
	
}

Java:
package Bau2;
public class pruefung implements IHaufen{



	


public static double XErmittlung(double Balken){
	
	double x = Balken/2;
	return x;
}


	public boolean BalkaufBalk(double[] Balken) {
		
		boolean answer = true;
       
		
		double s=0;
		for (int i = 0;i<=6;i++)			
		s = Balken[i]-Balken[i+1];
		
		if(s>0){
		return  false;
		}
		return answer;
		
	}
	public boolean Extra(double [] Balken){
		boolean answer= true;
		double n=0;
		
		for (int i = 0;i<=6;i++)
		n = Balken[i+1]+Balken[i+2]/(4*Balken[i]);
		
		if (n>0){
		return false;
		}
		return answer;
		}
}
 
C

Camino

Gast
pruefen und pruefung sind zwei verschiedene Dinge...???
Ausserdem Klassennamen mit Grossbuchstaben am Anfang...
 
C

Camino

Gast
Die Klasse heisst pruefung und der Aufruf der Methode ist über die Klasse pruefen... Meinen reicht halt nicht, du musst das dann auch in deinem Code richtig hinschreiben. Gibt es denn die Klasse pruefen noch irgendwo, sonst hätte ja auch deine IDE meckern müssen. Ich hab so ein bisschen den Verdacht, du hast noch einige grundsätzliche Probleme mit Java...
 
Zuletzt bearbeitet von einem Moderator:

looser88

Mitglied
Wie gesagt der Name der Klasse soll bzw. Ist Pruefen....ja mir fehlen ein paar Kenntnisse und ich würde mich freuen wenn mir hier jemand helfen kann bzgl. Meiner Frage?! :)
 
C

Camino

Gast
Du hast dann jetzt also die Klasse von pruefung in Pruefen umbenannt?

Und schau mal, dort hast du diese Methode:
Java:
public static double XErmittlung(double Balken){
    
    double x = Balken/2;
    return x;
}
Ausser dass Methoden-Namen (so wie auch Variablennamen) mit kleinem Anfangsbuchstaben beginnen (im Gegensatz zu Klassennamen), erkennt man bei dieser Methode, dass sie einen Parameter (nämlich einen double-Wert namens balken erwartet (balken ist ein Variablenname, also klein geschrieben).

Besser wäre so:
Java:
public static double xErmittlung(double balken){
    return balken/2;
}

Wenn du die Methode aufrufst, musst du beim Aufruf natürlich auch einen double-Wert übergeben.

So etwas geht dann halt nicht:
Java:
Balken[0]= pruefen.Xermittlung.Balken3;

Besser wäre
Java:
balken[0] = Pruefen.xErmittlung(balken3);

Das bedeutet, die (statische) Methode xErmittlung der Klasse Pruefen wird aufgerufen und der Parameter balken3 (ein double?) wird übergeben. Die Methode gibt einen double-Wert zurück, welcher in dem Array unter balken[0] gespeichert wird.

Wie gesagt, das sind erst mal Grundlagen von Java, welche du dir aneignen solltest, bevor du dich an weitergehende Aufgaben wagst. Wenn es vorne schon hapert, kann ja hinten nix richtiges rauskommen...
 
Zuletzt bearbeitet von einem Moderator:
C

Camino

Gast
Na ja, jetzt schreibst du das halt erst mal so, dass es richtig ist, dann postest du den Code nochmal und dann kann man vielleicht auch besser erkennen, wie man dir weiterhelfen kann. Aber Grundlagen musst du dir schon selbst anschauen und lernen...
 
C

Camino

Gast
Noch ein Tipp: Ich weiss ja nicht, welche IDE oder welchen Editor du benutzt, aber z.B. bei Eclipse bekommst du auch Fehler und manchmal sogar Lösungsvorschläge angezeigt.
Was auch hilft: du kannst bei Variablen zum Testen eine Ausgabe auf der Konsole machen (mit System.out.println(<Variable>) ), dann siehst du, welchen Wert die Variable dann hat.
 
C

Camino

Gast
Es ist schon zäh... Poste doch mal die Interfaces, die laut http://www.java-forum.org/hausaufgaben/144892-stabilitaet-kloetze-turm.html vorgegeben sein sollten (IKlotz2D, ITurm, IPunkt2D). Und vergiß' das mit den finalen (implizit static!) Variablen in den Interfaces, insbesondere diesen Balken1-Balken6-Mist... :noe:

Ich hab das dort so gelesen, dass die Interfaces vorhanden sein müssen, aber nicht vorgegeben sind:
schnittstellen IKlotz2D, ITurm, IPunkt2D ( die müssen vorhanden sein)
Vermutlich sollen das die Interfaces IPunkt, IBalken und IHaufen in diesem Thread im ersten Posting sein.
 

Marco13

Top Contributor
Hab' mal gebastelt.... auch wenn das der Intention des Aufgabenstellers entgegen steht...
Java:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

interface Block 
{
	double getWidth();
	Point getCenter();
}

interface Point 
{
	double getX();
}

interface Tower
{
	boolean isStable();
	List<Block> getBlocks();
}

class DefaultPoint implements Point
{
	private final double x;
	
	DefaultPoint(double x)
	{
		this.x = x;
	}
	
	@Override
	public double getX() 
	{
		return x;
	}

}

class DefaultBlock implements Block
{
	private final double width;
	
	DefaultBlock(double width)
	{
		this.width = width;
	}
	
	@Override
	public double getWidth() 
	{
		return width;
	}

	@Override
	public Point getCenter() 
	{
		return new DefaultPoint(width/2);
	}
}


class DefaultTower implements Tower
{
	private final List<Block> blocks;
	
	DefaultTower()
	{
		blocks = new ArrayList<Block>();
	}
	
	void addBlock(Block block)
	{
		blocks.add(block);
	}
	
	@Override
	public boolean isStable() 
	{
		if (blocks.size() <= 1)
		{
			return true;
		}
		double xSum = 0;
		for (int i=blocks.size()-1; i>0; i--)
		{
			Block b = blocks.get(i);
			xSum += b.getCenter().getX();
			int n = blocks.size()-i; 
			double x = xSum / n;
			//System.out.println("COG for "+n+" top blocks is "+x);
			Block bb = blocks.get(i-1);
			if (x > bb.getWidth())
			{
				return false;
			}
		}
		return true;
	}

	@Override
	public List<Block> getBlocks() 
	{
		return Collections.unmodifiableList(blocks);
	}
	
}


public class TowerTest 
{
	public static void main(String[] args) 
	{
		Block blocks[] = new Block[]
		{
			new DefaultBlock(4),
			new DefaultBlock(2),
			new DefaultBlock(6),
			new DefaultBlock(6),
			new DefaultBlock(2),
			new DefaultBlock(2),
			new DefaultBlock(2),
		};

		
		DefaultTower tower = new DefaultTower();
		for (int i=0; i<blocks.length; i++)
		{
			tower.addBlock(blocks[i]);
			print(tower);
		}
	}
	
	private static void print(Tower tower)
	{
		List<Block> blocks = tower.getBlocks();
		System.out.println("Tower with "+blocks.size()+" blocks");
		for (int i=blocks.size()-1; i>=0; i--)
		{
			Block b = blocks.get(i);
			for (int j=0; j<b.getWidth(); j++)
			{
				System.out.print("=");
			}
			System.out.println("");
		}
		System.out.println("Stable? "+tower.isStable());
		System.out.println("");
	}
}
 

Ähnliche Java Themen

Neue Themen


Oben