Java Array speichern & laden

  • Themenstarter Themenstarter Rycon
  • Beginndatum Beginndatum
R

Rycon

Gast
Die Berechnung (Volumen und Masse) soll über 2 Unterprogramme erfolgen. (Aluminiumrohr und Stahlrohr) Die Berechnung der beiden Unterprogramme habe ich bereits geschrieben.

Das Transportgewicht eines LKW's darf 20 Tonnen nicht überschreiten.

Ich komme nur hier nicht weiter.

Ich muss eine Funktion erstellen, das nach jedem berechnetem Rohr, das aktuelle Gewicht in einem Array speichert und danach das Gewicht des aktuellen Ladegewichts ausgibt. Wenn das Ladegewícht überschritten wird, soll die Ausgabe erscheinen, dass dieses Rohr nicht mehr verladen werden kann.

Im kurzen Sinne soll er jedes berechnete Rohr in einem Array speichern und das aktuelle Ladegewicht anzeigen (Array zusammen addieren). Wenn dann 20 Tonnen überschritten sind, soll er ausgeben, dass dieses Rohr nicht mehr verladen werden kann.

Außerdem soll nach der Ausgabe und auch während der Auswahl der Unterprogramme, die möglichkeit bestehen, dass Programm mit der Taste "3" zu beenden.

Hier ist mein jetziger Code:
Java:
      import java.util.Scanner;

      class Metallbaufirma
{
  public static void main(String[]args)
  {
    int auswahl;
    int X=0;
    while (X!=1)
    {
      Scanner so=new Scanner(System.in);
      System.out.print("Bitte geben Sie eine 1 für Stahlrohre und eine 2 für Aluminiumrohre ein.");
      auswahl=so.nextInt();
      if (auswahl == 1)
      {
        Stahlrohre();
      }
      else
      {
        Aluminiumrohre();
      }
      System.out.println ("Zum schließen des Programmes geben Sie die Zahl 1 ein!");

      X=so.nextInt();
    }
  }
  
  public static void Stahlrohre()
  {
    double Außendurchmesser;
    double Innendurchmesser;
    double Laenge=10;
    double Pi=3.14;
    double Volumen;
    Scanner so=new Scanner(System.in);
    System.out.print("Bitte geben Sie den Außendurchmesser in Metern an!:");
    Außendurchmesser=so.nextDouble();
    System.out.print("Bitte geben Sie den Innendurchmesser in Metern an!:");
    Innendurchmesser=so.nextDouble();
    System.out.print("Bitte geben Sie die Länge in Metern an!:");
    Laenge=so.nextDouble();
    
    if (Laenge > 10) {
      System.out.print("Die Länge darf nicht 10m überschreiten!");
      System.exit(0);
    }
    else {
      Volumen=Pi*Laenge/4*(Außendurchmesser*Außendurchmesser-Innendurchmesser*Innendurchmesser);
      System.out.println("Das Volumen des Stahlrohres beträgt:"+ Volumen+"m³");
      double Masse;
      double Dichte=9.5;
      Masse=Volumen* Dichte;
      
      System.out.println ("Die Masse des Stahlrohres beträgt:"+Masse+"Kg");
    }
    
  }
  
  public static void Aluminiumrohre()
  {
    double Außendurchmesser;
    double Innendurchmesser;
    double Laenge;
    double Pi=3.14;
    double Volumen;
    Scanner so=new Scanner(System.in);
    System.out.print("Bitte geben Sie den Außendurchmesser in Metern an!:");
    Außendurchmesser=so.nextDouble();
    System.out.print("Bitte geben Sie den Innendurchmesser in Metern an!:");
    Innendurchmesser=so.nextDouble();
    System.out.print("Bitte geben Sie die Länge in Metern an!:");
    Laenge=so.nextDouble();
    if (Laenge > 10) {
      System.out.print("Die Länge darf nicht 10m überschreiten!");
      System.exit(0);
    }
    else {
      Volumen=Pi*Laenge/4*(Außendurchmesser*Außendurchmesser-Innendurchmesser*Innendurchmesser);
      
      System.out.println("Das Volumen des Aluminiumrohres beträgt:"+ Volumen+"m³");
      
      double Masse;
      double Dichte=2.7;
      Masse=Volumen* Dichte;
      
      System.out.println ("Die Masse des Aluminiumrohres beträgt;"+Masse+"Kg");
    }
  }
}
 
Hoppla, das hab ich übersehen. Btw: Satzzeichen sind keine Rudeltiere und kommen sehr unfreundlich rüber. Muss es ein Array sein? Weil ein double-Wert kann das bisherige Gesamtgewicht genauso speichern. Was ist denn dein Ansatz? Ist das dein Code?
 
ja ist mein Code nur ich komme wie ich mich auch oben versucht auszudrücken mit Array net weiter. wenn ich ein rohr aufladen sollte dann z.b 1kg von 20000k aufgeladen und dann wenn ich weider ein rohr auflade der auch 1 kg wiegt sollte dann 2kg von 20000kg erscheinen
 
was für Ha???? ich komme ja ohne nichts zu machen hierhin, wollte nur eine funktion habe wo ich keine erfahrung habe mit Array func
 
morgen ,

ich wollte ersten eine Gewichtsbgrezung machen, der LWk nur 20000kg aufnehmen kann.
Mann lädt ja rohre, wenn die Rohre den von 20t erreicht habe sollte es
System.out.print("Das Ladegewicht wurde überschritten, es können keine Rohre mehr verladen werden!");


2. wenn man Rohre auflädt, sollte auch direkt aktuelle Gesamgewicht erscheinen, und wenn man ein zweitens auflädt addiert werdenz.b Rohr1=1kgvon20000kg Rohr2=2kgvon20000k.
 
Also was mir so spontan dazu einfällt: man könnte z.B. eine Klasse namens "Rohr" erstellen.
Das Teil hat Länge, Gewicht und ggf. noch andere Eigenschaften. Ok.
Ist ja ein klassisches Beispiel, wo ein Objekt wirklich Sinn macht.

Dann könnte man freilich ein Array daraus erstellen, aber in sehr vielen Fällen sind Listen eleganter.
Ich persönlich würde ArrayList empfehlen, weil diese die (oft angenehme) Eigenschaft hat, variabel in der Länge zu sein, sie hat add und remove Funktionen und etliche andere Sachen mehr, die das Leben leicht machen. Arrays nehme ich nur dann, wenn ich mir ganz sicher bin, dass die Anzahl der Elemente wirklich fix bleibt. Bei den Rohren scheint mir die fixe Anzahl nun weniger sinnvoll.

Wenn man nun so eine ArrayList von Rohren hat, kann man auch leicht Funktionen schreiben, die einem die Gesamtlänge und das Gesamtgewicht der Rohre ausgeben, indem man über die ArrayList iteriert und die einzelnen Längen und Gewichte addiert.

Nun hast du noch was von "Speichern" geschrieben. Da war ja die Frage: auf Platte speichern (als File?) oder nur zur Laufzeit "speichern"? Das macht natürlich einen Unterschied. Natürlich kann man eine Klasse schreiben, die Inhalte von ArrayListen in ein txt File (z.B.) schreibt. Aber ich weiß nicht, ob dies nun gefordert war.

freundliche Grüße
Olli
 
Olli_M hat gesagt.:
Da war ja die Frage: auf Platte speichern (als File?) oder nur zur Laufzeit "speichern"?
rycon hat gesagt.:
das aktuelle Gewicht in einem Array speichert

Dem Rest von Olli kann ich mich aber nur anschließen, schreib dir eine Klasse Rohr mit den Maßen und packe sie in eine Liste (Array geht auch, ist aber wie bereits erwähnt nicht so flexibel). Für die Gesamtlast musst du dann über diese Liste/das Array (bestehend aus einzelnen Rohren) iterieren und die jeweiligen Massen aufsummieren.
 
Danke für die Rückantworten,

ich habe mein code bisschen erweitert

Code:
import java.util.Scanner;
class Metallbaufirma {

  public static void main(String[]args){
    
    int auswahl;
    int X=0;
    while (X!=1){
      
      Scanner so=new Scanner(System.in);
      System.out.print("Bitte geben Sie eine 1 für Stahlrohre und eine 2 für Aluminiumrohre ein.");
      auswahl=so.nextInt();
      if (auswahl == 1){
        Stahlrohre();
      }
      if (auswahl == 2) {
        Aluminiumrohre();
      }
      if (auswahl > 2) {
        System.exit(1);
      }
      System.out.println ("Zum schließen des Programmes geben Sie die Zahl 1 ein!");
      System.out.println ("Um weiter zu rechnen geben Sie die Zahl 2 ein!");
      X=so.nextInt();
    }
  }
  public static void Stahlrohre(){
    double Außendurchmesser;
    double Innendurchmesser;
    double Volumen;
    double Laenge;
    double Mgewicht= 20000;
    double Masse;
    double Dichte = 9.5;
    Scanner so=new Scanner(System.in);
    
    System.out.print("Bitte geben Sie den Außendurchmesser in Metern ein!:");
    Außendurchmesser=so.nextDouble();
    
    System.out.print("Bitte geben Sie den Innendurchmesser in Metern ein!:");
    Innendurchmesser=so.nextDouble();
    
    System.out.print("Bitte geben Sie die Länge in Metern ein!:");
    Laenge=so.nextDouble();
    
    if (Laenge > 10) {
      
      System.out.print("Die Länge darf nicht 10m überschreiten!");
      System.exit(1);
    }
    if (Mgewicht > 20000 ) {
      
      System.out.print("Das Ladegewicht wurde überschritten, es können keine Rohre mehr verladen werden!");
      System.exit(1);
    }
    else {
      
      Volumen=Math.PI*Laenge/4*(Außendurchmesser*Außendurchmesser-Innendurchmesser*Innendurchmesser);
      System.out.println("Das Volumen des Stahlrohres beträgt:"+ Volumen+"m³");
      
      Masse=Volumen* Dichte;
      System.out.println ("Die Masse des Stahlrohres beträgt:"+Masse+"Kg");
      
      Mgewicht=Mgewicht-Masse;
      System.out.println ("Das aktuelle Gewicht beträgt:"+Mgewicht+"Kg");
    }
  }
  public static void Aluminiumrohre(){
    double Außendurchmesser;
    double Innendurchmesser;
    double Laenge=10;
    double Pi=3.14;
    double Volumen;
    double Mgewicht=20000;
    double Masse1;
    double Dichte=2.7;
    Scanner so=new Scanner(System.in);
    
    System.out.print("Bitte geben Sie den Außendurchmesser in Metern ein!:");
    Außendurchmesser=so.nextDouble();
    
    System.out.print("Bitte geben Sie den Innendurchmesser in Metern ein!:");
    Innendurchmesser=so.nextDouble();
    
    System.out.print("Bitte geben Sie die Länge in Metern ein!:");
    Laenge=so.nextDouble();
    if (Laenge >= 10){
      
      System.out.print("Die Länge darf nicht 10m überschreiten!");
      System.exit(1);
    }
    if (Mgewicht >= 20000 ){
      
      System.out.print("Das Ladegewicht wurde überschritten, es können keine Rohre mehr verladen werden!");
      System.exit(1);
    }
    else{
      
      Volumen=Pi*Laenge/4*(Außendurchmesser*Außendurchmesser-Innendurchmesser*Innendurchmesser);
      System.out.println("Das Volumen des Aluminiumrohres beträgt:"+ Volumen+"m³");
      
      Masse1=Volumen* Dichte;
      System.out.println ("Die Masse des Aluminiumrohres beträgt;"+Masse1+"Kg");
      
      Mgewicht=Mgewicht-Masse1;
      System.out.println ("Das aktuelle Gewicht beträgt:"+Mgewicht+"Kg");
      
    }
  }
}


nun was ich ganz konkret will ist, wenn ich einen Rohr verlade z.b dies ist dann 1000kg und am ende des berechnungs kommt ja das Aktuellegewicht das wäre dann theoretisch 19000kg.
Ab hier weiß ich nicht was ich machen soll.
die 19000kg sollte es speichern und wieder ausgeben wenn ich den zweiten Rohr verlade z.b dies ist auch wieder 1000kg, dann sollte es von 19t abziehen, aber nicht von 20t wie es bei mir zurzeit ist .

ich hoffe ich konnte mich gut ausdrücken, ich brauche eure hilfe!!!!!!
 
Du hast bei dem 2. Rohr 2t Gewicht. Die ziehst du einfach von den 20t ab.

Du hast 2 Varianten: entweder du merkst dir wie viel du schon drauf hast oder du merkst dir wie viel noch drauf kann. Den anderen Wert kannst du dir ja jeweils ausrechnen, da du ja weist, wie viel drauf passt.
 
Den Tipp mit der Rohr-Klasse haste aber schon mitbekommen, oder? Denn Stahl- und Aluminumrohre sind ja prädestiniert für sowas.
Java:
class Rohr {
    double Außendurchmesser;
    double Innendurchmesser;
    double Volumen;
    double Laenge;
    double Mgewicht;
    double Masse;
    double Dichte;

    Rohr (double außen, double innen, double volumen, double gewicht, double masse, double dichte) {
        Außendurchmesser = außen;
        Innendurchmesser = innen;
        ...
    }

    double getGewicht() {return Mgewicht;}
}

Java:
class Stahlrohr extends Rohr {
    Stahlrohr(...) {
        super(...)
    }
}

Java:
class AluRohr extends Rohr {
...
}

In deiner Hauptklasse baust du dir eine Liste von Rohren und eine Methide, die über diese Liste iteriert, um das Gesamtgewicht zu bekommen:

Java:
class MyClass {
    List<Rohr> rohre = new ArrayList<Rohr>();

    public static void main(String[] args) {
        Rohr stahl = new StahlRohr(<alle Eingangsparameter>);
        Rohr alu = new AluRohr(<alle Eingangsparameter>);

        rohrLaden(stahl);  
        rohrLaden(alu);
    }

    public rohrLaden(Rohr rohr) {
        if (gesamtGewicht() + rohr.getGewicht() < 20000) rohre.add(rohr);
        else System.out.printf("Kann nicht geladen werde");
    }

    public double gesamtGewicht() {
        double gesamt = 0;
        for (Rohr r: rohre) gesamt += r.getGewicht();
        return gesamt;
    }
}
Aber wenn du´s unbedingt anders haben willst, musst du dir nur in deiner Hauptklasse das Gesamtgewicht merken und das dann jedes Mal, wenn du ein neues Rohr anlegen willst, neu berechnen (die methode sieht so ähnlich aus wie die, die ich gerade beschrieben habe).
 
Zuletzt bearbeitet:
Ich finde schon sehr gut das du mir geholfen hast; aber leider ist es was du hingeschrieben hast; hat mich verwirrt.

1:eingangsparameter?
2:es gibt zu viele einzelne codes die du für mich gepostet hast aber ich wei? Nicht wo hin die ich hunzufügen muss?? Z:b muss ich da eigene classe machen oder unter classe metallbaufirma hinzuüfge????
 
was meinst du mit dem alle Eingangsparameter ????
Die ganzen Maße zur Erzeugung eines Rohres (also Außen- und Innendurchmesser, Masse, ...), also die, die im Konstruktor der Klasse Rohr gefragt werden. Z.B. so:
Java:
Rohr stahl = new Stahlrohr(12.7, 12.0, 2000, 2000, 34)
Standardmäßig kommt jede Klasse in eine eigene Datei mit dem selben Namen (du kannst zwar auch mehrere Klassen in einer Datei haben, aber darum kümmern wir uns später vlcht.). Also eine Datei
Code:
Rohr.java
, eine
Code:
AluRohr.java
,
Code:
Stahlrohr.java
,
Code:
Metallbaufirma.java
 
du jast ja geschrieben das ich in eine datei mehrere klassen e8nbauen kann aber das geht leider beir mir nicht koenntest du vllt die bsp in mein code e8nbauen
 
Jede Datei darf nur eine public Toplevel Class haben. Was geht ist folgendes:

Datei Punkt.java
Java:
public class Punkt {

}

class AndererPunkt {

}

class NochEinPunkt {

}
 
Ich hab geschrieben, dass du das machen kannst, nicht, dass du´s auch machen sollst. Pack mal lieber deine Klassen in versch. Dateien, das ist erstmal übersichtlicher.
 

Zurück
Oben