Forum / Grundlagen des Programmierens / 1. Hausübung

1. Hausübung

Ok, ich habe eine relativ einfache Frage zur Aufgabe 1.3. Man soll dort mit Hilfe von Schleifen ein rechteckmuster erzugen. Mein Programm hat aber einen kleinen Fehler.

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Geben Sie bitte ein Zeichen ein:");
        String str = sc.nextLine();
        System.out.println("Geben Sie die Anzahl der Spalten ein:");
        int i = sc.nextInt();
        System.out.println("Geben Sie die Anzahl der Zeilen ein:");
        int n = sc.nextInt();
      while (i > 0) {
      while (n > 0) {System.out.print(str); System.out.println(str);
      
      i--;n--;
                  }
\n~~~

Das ist mein aktueller Programmcode den ich verwende. Habe das Programm folgendermasen gerunt:
Geben Sie bitte ein Zeichen ein:
x
Geben Sie die Anzahl der Spalten ein:
5
Geben Sie die Anzahl der Zeilen ein:
7
xx
xx
xx
xx
xx
xx
xx

wo liegt hier mein Fehler im Code? so kompliziert is das gar neda ber mir fällt keine lösung grad ein bin für jede HIlfe dankbar
Georg ±0

grad drübergesehen, das ist teils ned schlecht aber teilweise ned so gut gelöst. so ist in Aufgabe 2 die while schleife vielleicht geschickter, allerdings sieht die aufgabenstellung eine if else verzweigung vor. davon abgesehen versteh ich da eh ned was du da geschrieben hast^^ In Aufgabe 3 brauchst du 3 schleifen du hastnur eine geschrieben. Aufgabe 5: du hast das kreuzprodukt zweimal drinnen ^^ das eine ist überflüssig. und das is was persönliches aber wenn wir schon mit chars programmieren können würd ich fpr die schleifenwiederholung in der 5. aufgabe auch chars wie j/n oder Y/n oder gleich strings hernehmen^^ statt zahlen.

sind nur vorschläge

David ±0

Habs mir auch durchgschaut und find eig Aufgabe 2 passt so, man soll die if/else Verknüpfung doch nur beim zurückspringen bzw Abfragen ob man das Programm neu starten will oder nicht verwenden, und das geschieht ja auch der Angabe entsprechend. Denk nicht das das ein Problem sein sollt..

Wolfgang ±0

Finde die Angabe von Bsp 2 auch sehr verwirrend. Erstens steht "Eingaben mittels Console via Dialog abfragen". Wenn man jetzt nach Dialog sucht im Internet, findet man irgendwelche grafischen Eingabedialoge !? Ist aber nicht notwendig bei dem Beispiel. Und eine Menüstruktur hab ich mit if/else auch nicht gemacht (warum sollte man das auch mit if/else schleifen machen !? ). If/Else ist bei mir auch nur das Prüfen ob man erneut berechnen möchte. Die BMI Methode steht auch in der main, steht auch nichts dass man die irgendwo anders schreiben soll.

Bang ±0

zu aufgabe 1.2: ich habe da vergessen die zwei anderen schleifen rein zu kopieren zu aufgabe 1.5: von den zwei kreuzprodukten ist keines überflüssig, da eines für char 'x' und das andere für char 'X' bestimmt ist. obwohl die abfrage case sensitiv ist, ist es so programmiert, dass groß-/kleinschreibung egal ist

Georg ±0

dann kannste auch strings hernehmen und kannste es mit uppercase machen, funktioniert genauso. 1.2. ich meinte auch ned das er da was falsch hat sondern das er auch ein modell vorschlägt also hinter der if else habe, was man statt einem if else machen könnte, das hätte bei manchen zur verwirrung führen können das war alles was ich gemeint hab.

Wolfgang ±0

Bräuchte mal Hilfe beim 1.3 Ich bekomme immer eine Zeile zuviel :confused:

        
public class Aufgabe31_1028797_1 {
    
public static void main ( String[] args ) {     
    
    Scanner sc = new Scanner(System.in);
    System.out.print("Bitte Zeichen eingeben: ");
    String zeichen = sc.nextLine(); 
    System.out.print("Spaltenanzahl: ");
    int s = sc.nextInt();
    System.out.print("Zeilenanzahl: ");
    int z = sc.nextInt();

    for( int n = 0; n <= s ; n++) {

            for( int i = 1; i < z ; i++) {
            System.out.print(""+zeichen);  
            } 
        System.out.println(""+zeichen);        
      }
 System.out.println("");
} \n~~~

~~~\nBitte Zeichen eingeben: X
Spaltenanzahl: 5
Zeilenanzahl: 5
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX\n~~~

Hat jemand eine Idee ?
Georg ±0

zum einen muss das = bei n<= s weg, davon abgeehen hast du einen dreher drinnen, den das was du als zeilen hast, sind eigentlich deine spalten und umgekehrt, wenn du also im moment eine 3 x 5 matrix erstellst erhälts du eine 5 x3 matrix

Wolfgang ±0

hab aus n=0, n=1 gemacht, ging auch.

Stimmt, den Dreher hab ich garnicht bemerkt, war mit der blöden Zeile beschäftigt. Jetzt läufts. Danke.

Georg ±0

ja oder so :D problem war halt bei dir das du die vertauschung nicht gesehen hast und bei 5x5 marix is das auch nicht zu erkennen ob das umgedreht ist^^ np

Wolfgang ±0

Ja weil ich zum testen immer quadratische formen genommen hab, weil es schneller zum eingeben ist :D

Wolfgang +1

Hier mal meine Aufgaben 1.1 bis 1.4 Sind zwar sicher nicht ideal geschrieben, aber sie funktionieren und sind recht simpel aufgebaut :wink:

Kommentare hab ich noch nicht überall hinzugefügt.


public class Aufgabe1_1028797_1 {
    
    public static void main ( String[] args ) {   
        System.out.println(&quot;1....Deutsch&quot;); //Auswahlmen&uuml;
        System.out.println(&quot;2....Englisch&quot;);
        System.out.println(&quot;3....Spanisch&quot;);
   
        Scanner sc = new Scanner(System.in); //einlesen der Tastatureingabe
        System.out.print(&quot;Bitte w&auml;hlen Sie eine Sprache aus: &quot;);
        int i = sc.nextInt(); //zuweisen der Eingabe in eine Variable
            
        if ( i == 1 || i == 2 || i == 3 ) { // Pr&uuml;fen der G&uuml;ltigkeit der Eingabe
            switch( i ) {   //Mehrfachanweisung
                case 1: 
                    System.out.println(&quot;Hallo Welt!&quot;);
                    break;
                case 2:
                    System.out.println(&quot;Hello World!&quot;);
                    break;
                case 3:
                    System.out.println(&quot;Hola Mundo!&quot;);
                    break;
            }
        }
        else { //Ausgabe falls Pr&uuml;fung fehlgeschlagen
          System.out.println(&quot;Keine g&uuml;ltige Auswahl getroffen !&quot;);  
        }
        }
}\n~~~

~~~\n
/**
 *
 * @author Wolfgang Maierhofer e1028797
 */
import java.util.Scanner; //import f&uuml;r scanner

public class Aufgabe2_1028797_1 {
    
    public static float bmi (float groesse, float gewicht) {  //Method f&uuml;r BMI Berechnung
        float bmi = gewicht/ (groesse*groesse);
        return bmi; //R&uuml;ckgabewert der Berechnung
            }
    public static void main ( String[] args ) { //Main-Method
//
     int i; //Deklaration, Laufvariable
     Scanner sc = new Scanner(System.in);
     System.out.println(&quot;#### Willkommen beim BMI-Rechner ####&quot;);  //Welcomemessage
     System.out.println(&quot;-------------------------------------\n&quot;);   
                   do { 
                System.out.print(&quot;Bitte geben Sie ihre Gr&ouml;&szlig;e in Meter an: &quot;);
                float groesse = sc.nextFloat(); //zuweisen der Eingabe in eine Variable
//          
                System.out.print(&quot;Bitte geben Sie ihre Gewicht in kg an: &quot;); 
                float gewicht = sc.nextFloat(); //zuweisen der Eingabe in eine Variable
                
                /*Aufrufen der BMI Methode inkl. &Uuml;bergabe Variablen zur Berechnung. 
                Anschlie&szlig;end Ausgabe des BMI*/
                System.out.println(&quot;\nIhr BMI Betr&auml;gt: &quot; + bmi(groesse,gewicht)); 
                
                //Men&uuml;abfrage f&uuml;r Neuberechnung   
                         System.out.println(&quot;\n#### Auswahlmen&uuml; ####&quot;);
                         System.out.println(&quot;1...BMI erneut Berechnen&quot;);
                         System.out.println(&quot;2...Programm beenden\n&quot;);
                         System.out.print(&quot;Bitte W&auml;hlen: &quot;);
                  i = sc.nextInt();
                //Pr&uuml;fen der Men&uuml;auswahl                  
                        if ( i == 1) 
                            i = 1;  //wenn Neuberechnung
                        else i = 2; //wenn Abbruch 
                       }
               while (i == 1)  // Schleife, solange BMI Neu berechnet werden soll
                       System.out.println(&quot;\nAuf Wiedersehen&quot;);    
                }               
}
\n~~~

~~~\n/*
 *
 * @author Wolfgang Maierhofer e1028797
 */
//Programm 1 for-schleife
import java.util.Scanner;
        
public class Aufgabe31_1028797_1 {
    
public static void main ( String[] args ) {     
    
    Scanner sc = new Scanner(System.in);
    System.out.print(&quot;Bitte Zeichen eingeben: &quot;);
    String zeichen = sc.nextLine(); 
    System.out.print(&quot;Spaltenanzahl: &quot;);
    int s = sc.nextInt();
    System.out.print(&quot;Zeilenanzahl: &quot;);
    int z = sc.nextInt();

    for( int i = 1; i &lt;= z ; i++) {

            for( int n = 1; n &lt; s ; n++) {
            System.out.print(zeichen);  
            } 
        System.out.println(zeichen);        
      }
 System.out.println(&quot;&quot;);
}         
\n~~~

~~~\n/*
 *
 * @author Wolfgang Maierhofer
 */
//Programm 2 do-while-schleife
import java.util.Scanner;
        
public class Aufgabe32_1028797_1 {
    
public static void main ( String[] args ) {     
    
    Scanner sc = new Scanner(System.in);
    System.out.print(&quot;Bitte Zeichen eingeben: &quot;);
    String zeichen = sc.nextLine(); 
    System.out.print(&quot;Spaltenanzahl: &quot;);
    int s = sc.nextInt();
    System.out.print(&quot;Zeilenanzahl: &quot;);
    int z = sc.nextInt();
    int i=0, n=0;
           do {
               n=1;
                do {
                     System.out.print(zeichen);
                       n++;
                      } while (n &lt; s);
                        
               System.out.println(zeichen);
               i++;
             } while ( i &lt; z );
}
}
\n~~~

~~~\n/*
 *
 * @author Wolfgang Maierhofer
 */
//Programm 3 while-schleife
import java.util.Scanner;
        
public class Aufgabe33_1028797_1 {
    
public static void main ( String[] args ) {     
    
    Scanner sc = new Scanner(System.in);
    System.out.print(&quot;Bitte Zeichen eingeben: &quot;);
    String zeichen = sc.nextLine(); 
    System.out.print(&quot;Spaltenanzahl: &quot;);
    int s = sc.nextInt();
    System.out.print(&quot;Zeilenanzahl: &quot;);
    int z = sc.nextInt();
    int i=0, n=1;
           while ( i &lt; z) {
               n=1;
               while ( n &lt; s) {
                   System.out.print(zeichen);
                   n++;
                }    
                     System.out.println(zeichen);
                       i++;
                      } 
}
}
\n~~~

~~~\n/*
 * @author Wolfgang Maierhofer e1028797
 */
import java.util.Scanner;
        
public class Aufgabe4_1028797_1 {

public static void main ( String[] args ) {
    
    Scanner sc = new Scanner(System.in);

    int[] v1; v1=new int[3];
    int[] v2; v2=new int[3];
    System.out.print(&quot;Bitte geben Sie die X-Koordinate des ersten Vektors an: &quot;);
    v1[0] = sc.nextInt();
    System.out.print(&quot;Bitte geben Sie die Y-Koordinate des ersten Vektors an: &quot;);
    v1[1] = sc.nextInt();
    System.out.print(&quot;Bitte geben Sie die Z-Koordinate des ersten Vektors an: &quot;);
    v1[2] = sc.nextInt();
    System.out.print(&quot;Bitte geben Sie die X-Koordinate des zweiten Vektors an: &quot;);
    v2[0] = sc.nextInt();
    System.out.print(&quot;Bitte geben Sie die Y-Koordinate des zweiten Vektors an: &quot;);
    v2[1] = sc.nextInt();
    System.out.print(&quot;Bitte geben Sie die Z-Koordinate des zweiten Vektors an: &quot;);
    v2[2] = sc.nextInt();
    System.out.println();
    
    System.out.println(&quot;1....Vektoraddition &quot;);
    System.out.println(&quot;2....Vektorsubtraktion &quot;);
    System.out.println(&quot;3....Kreuzprodukt &quot;);
    System.out.println();
    System.out.println(&quot;9....Abbrechen &quot;);
    System.out.println();
    System.out.print(&quot;Geben sie die Berechnungsart an: &quot;);
    int a = sc.nextInt();
    System.out.println();
    
    switch( a ) {   //Mehrfachanweisung
                case 1: 
                     int[] add_erg; add_erg=new int[3];
                     System.out.println(&quot;Ergebnis der Vektoraddition: &quot;);
                     add_erg[0] = v1[0]+v2[0];
                     add_erg[1] = v1[1]+v2[1];
                     add_erg[2] = v1[2]+v2[2];
                     System.out.println(&quot;X-Koordinate: &quot; + add_erg[0]);
                     System.out.println(&quot;Y-Koordinate: &quot; + add_erg[1]);
                     System.out.println(&quot;Z-Koordinate: &quot; + add_erg[2]);
                    break;
                case 2:
                     int[] sub_erg; sub_erg=new int[3];
                     System.out.println(&quot;Ergebnis der Vektorsubtraktion: &quot;);
                     sub_erg[0] = v1[0]-v2[0];
                     sub_erg[1] = v1[1]-v2[1];
                     sub_erg[2] = v1[2]-v2[2];
                     System.out.println(&quot;X-Koordinate: &quot; + sub_erg[0]);
                     System.out.println(&quot;Y-Koordinate: &quot; + sub_erg[1]);
                     System.out.println(&quot;Z-Koordinate: &quot; + sub_erg[2]);
                    break;
                case 3:
                     int[] kreuz_erg; kreuz_erg=new int[3];
                     System.out.println(&quot;Ergebnis Kreuzprodukt: &quot;);
                     kreuz_erg[0] = (v1[1]*v2[2])-(v2[1]*v1[2]);
                     kreuz_erg[1] = (v1[2]*v2[0])-(v1[0]*v2[2]);
                     kreuz_erg[2] = (v1[0]*v2[1])-(v1[1]*v2[0]);
                     System.out.println(&quot;X-Koordinate: &quot; + kreuz_erg[0]);
                     System.out.println(&quot;Y-Koordinate: &quot; + kreuz_erg[1]);
                     System.out.println(&quot;Z-Koordinate: &quot; + kreuz_erg[2]);
                    break;
                case 9:
                    System.out.println(&quot;-----kkthxbye----&quot;);
                     default;
            }

System.out.println(&quot;&quot;);
}
\n~~~

~~~\nimport java.util.Scanner; //import util f&uuml;r scanner

public class Aufgabe5_1028797_1 {

 //Abschnitt Berechnungen mittels Methoden
public static double qquerschnitt (float a, float l) {  
        double fmoment = (a*a*a*a)/12;
        return fmoment; 
            }
public static double kquerschnitt (float a, float l) {  
        double fmoment =  ((a*a*a*a)*3.14)/4;
        return fmoment; 
            }
public static double iquerschnitt (float a, float l) {  
        double fmoment = (10*(a*a*a*a))/144;
        return fmoment; 
            }
public static double beidseitig (double f, float n, float l) {  
        double biegung = (n*(l*l*l))/(48*210000*f);
        return biegung; 
            }
public static double krag (double f, float n, float l) {  
        double biegung = (n*(l*l*l))/(3*210000*f);
        return biegung; 
        }      
//Main Methode            
    public static void main ( String[] args ) {   
        Scanner sc = new Scanner(System.in);
        boolean wiederholen = true;
        
     do { 
        //Abschnitt Wertabfragen
        System.out.println(&quot;Querschnittsform ausw&auml;hlen &quot;);
        System.out.println(&quot;q....Quadratische Form&quot;); 
        System.out.println(&quot;k....Kreisform&quot;);
        System.out.println(&quot;i....I-Tr&auml;ger&quot;);
        System.out.println();
        System.out.print(&quot;Auswahl: &quot;);
        char m = sc.next().charAt(0);
        System.out.println(&quot;----------------------&quot;);
        System.out.print(&quot;Geben Sie die Abmessung in mm an: &quot;);
        float a = sc.nextInt();
        System.out.print(&quot;Geben Sie die L&auml;nge in mm an: &quot;);
        float l = sc.nextInt();
        System.out.print(&quot;Geben Sie die Kraft in N an: &quot;);
        float x = sc.nextInt();
        System.out.println();
        float n = x*1000; //Umrechnung Nm in Nmm
        double f=0;
        switch( m ) {   //Berechnungen der F-Momente
                case 'q': //Quadratquerschnittsfl&auml;chentr&auml;gheitsmomenberechnung
                    System.out.println(&quot;Fl&auml;chentr&auml;gheitsmoment:&quot; +qquerschnitt(a,l)+&quot; mm^4&quot;); //Methodenaufruf inkl. Parameter&uuml;bergabe + Ausgabe
                    f = qquerschnitt(a,l); //Zuweisung der Methodenr&uuml;ckgabe an die Variable f
                    break;
                case 'k'://Kreisquerschnittsfl&auml;chentr&auml;gheitsmomenberechnung
                    System.out.println(&quot;Fl&auml;chentr&auml;gheitsmoment:&quot; +kquerschnitt(a,l)+&quot; mm^4&quot;); //Methodenaufruf inkl. Parameter&uuml;bergabe + Ausgabe
                    f = kquerschnitt(a,l); //Zuweisung der Methodenr&uuml;ckgabe an die Variable f
                    break;
                case 'i': //I-Tr&auml;gerquerschnittsfl&auml;chentr&auml;gheitsmomenberechnung
                    System.out.println(&quot;Fl&auml;chentr&auml;gheitsmoment:&quot; +iquerschnitt(a,l)+&quot; mm^4&quot;); //Methodenaufruf inkl. Parameter&uuml;bergabe + Ausgabe
                    f = iquerschnitt(a,l); //Zuweisung der Methodenr&uuml;ckgabe an die Variable f
                    break;
                default:
                    break;
            }
        //Abschnitt Abfrage Auflagerform
        System.out.println();
        System.out.println(&quot;----------------------&quot;);
        System.out.println(&quot;Auflagerform ausw&auml;hlen &quot;);
        System.out.println(&quot;b....Beidseitig gelagert&quot;); 
        System.out.println(&quot;k....Kragtr&auml;ger&quot;);
        System.out.print(&quot;Auswahl: &quot;);
        char o = sc.next().charAt(0);

        switch( o ) {   //Berechnung Biegung
                case 'b': //Berechnung Durchbiegung bei zwei Auflagern
                    System.out.println(); 
                    System.out.println(&quot;Maximale Durchbiegung: &quot; +beidseitig(f,n,l)+&quot; mm&quot;); //Methodenaufruf inkl. Parameter&uuml;bergabe + Ausgabe
                    break;
                case 'k': //Berechnung Durchbiegung Kragtr&auml;ger
                    System.out.println();
                    System.out.println(&quot;Maximale Durchbiegung: &quot; +krag(f,n,l)+&quot; mm&quot;); //Methodenaufruf inkl. Parameter&uuml;bergabe + Ausgabe
                    break;
                default:
                    break;
                    }
                    //Abschnitt Programmwiederholung
                         System.out.println();
                         System.out.println(&quot;Neuberechnung starten... j&quot;);
                         System.out.println(&quot;Abbrechen ...............n&quot;);
                         System.out.print(&quot;Bitte W&auml;hlen: &quot;);
                         char w = sc.next().charAt(0);         
                         
                        if ( w == 'j') 
                            wiederholen = true;  //wenn Neuberechnung
                        else wiederholen = false; //wenn Abbruch
        
        } while (wiederholen == true);
System.out.println();
}
}\n~~~

update: Bsp 1.5 hinzugef&uuml;gt.
Georg ±0

ned schlecht, hab nen tipp, du kannst auch ergebnise als array festlegen, dann würdest du mit 3 arrays in beispiel 4 auskommen, und warum du in beispiel eins keine chars hernimmst versteh i ned is aber dein bier ;) ach ja und in beispiel 1 kannst du dir die if else schleife schenken wenn du eine default zeile machst, dann wird der code noch kürzer und schöner

sind nur tipps.

Wolfgang ±0

danke, aber es funktioniert und ich bin froh dass ich es so hinbekommen hab :) Warum unbedingt char nehmen in bsp 1 ? meinst für die menüauswahl? ist doch banane ob man A oder 1 drückt.

edit: das mit den array in bsp 4 hat mich jetzt doch interessiert, habs umgeändert :)

Wolfgang ±0

Hab mein Bsp 1.5 jetzt auch fertig und oben hinzugefügt. Vielleicht hilft es ja dem einen oder anderen.

Matthias ±0

Frage: Wie habt ihr das Projekt eigentlich aufgebaut? Einfach ein Package erstellt indem man alle einzelnen Beispiele als eigene Klassen hat und das erste Beispiel/Klasse die main Klasse ist?

Sorry, die Kommentarfunktion ist geschlossen.