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
Alexander ±0

@pezi: Du musst

statt
~~~\nSystem.out.println(symbol);\n~~~
schreiben. Sonst erzeugst du nach jedem Symbol einen Zeilenumbruch!

@1125215: Hast du in de
Michael ±0

ich sehs mir grade durch und du machst ja genau das selbe. erst lasst du je nach case ein I erstellen und das liest du dann später in der nächsten switch-case wieder ein. und genau das geht ohne ersichtlichen grund bei mir ja ned. dass ich jetz potenzen und schönheitsfehler bei den einlesenden maßen hab, sei mal ausser acht gelassen. mich feigelts eher daran, warum er vom ersten switch-case das trägheitsmoment ned übernehmen kann und im zweiten einließt.

ps: es müsst ja an sich egal sein in welcher reihenfolge was ich und wo einlese, er speichert ja sowieso alles dann ab oder ned?

Alexander ±0

Bist du dir sicher, dass du es dir genau angesehen hast? Egal, ich erklärs dir rasch so ;)


brauchst du nicht! 

Dann machst du hier einen Fehler: 

~~~\n System.out.print("Geben sie die Breiten/Durchmesser an : "); float laenge = eingabe_sc.nextFloat(); \n~~~

Du musst Länge und Querschnittsgröße separat einlesen, und zwar vorm ersten switch/case und idealerweise auch noch bevor du die Querschnittsform abfragst.

Womit wir schon beim nächsten Fehler wären, du berechnest I nicht mit der Querschnittsgröße sondern mit deiner Länge!?

Die Variablen traegheit und biegung solltest du übrigens gleich mit 0 initialisieren, und du solltest einheitliche Datentypen überall verwenden, sprich double (wegen pi).

Nächster Fehler ist, dass im print Q, K und I "verlangt" werden und du im switch/case dann Kleinbuchstaben stehen hast.

Nächster Fehler: Richtig ist E=210E3, zwecks Einheiten! 

Auch beim nächsten switch/case hast du wieder Kleinbuchstaben stehen, obwohl du erst große Buchstaben verlangst.

Die Berechnungs- und Ausgabefehler sollten sich hiermit auch von selbst erledigen, bitte sieh dir aber jedenfalls meine und Marko's Lösung nochmal genau an. Vor allem der Aufbau deines Programms ist teilweise sehr schwammig.

Grüße
Alex
Michael ±0

na wie gesagt, die "formfehler" sind ja nur schönheit (also groß klein schreibung bei dne switch sachen zb), das mit den einheiten auch. das mach ich dann sowieso noch alles. und weil du sagst ich berechne es mit einer länge. die formeln sind ja jeweils a^4*... ich habs halt laenge statt a getauft, das is alles. aber das sind alles sachen, die keinen fehler bei meiner zweiten switch-case hervorrufen dürften. aber egal, ich will ned undankbar erscheinen und schreibs nochmal schön und etepetete auf und hoff, dass der fehler ned nochmal auftaucht. ansonsten gut nacht und vlt kopier ich ansonsten dreißt ein paar code segmente soferns gestattet is :p

Alexander ±0

Naja, Formfehler ist gut... Etwas sehr optimistisch formuliert.

Von mir aus kannst du a nennen wie du willst, aber warum nennst du a laenge wenn l die laenge ist. Vor allem wenn du laenge dann in der Formel für I und (!) f verwendest... Aber gut, ich wollte nur helfen.

Michael ±0

jo, ich habs mir grad dacht, dass ich ganz unten wirklich an dummen fehler hab, hast recht ja. ich machs einfach wirklich schöner neu. ich muss mir halt a gscheitere form generell angewöhnen, aber nachdem ich komplett neu bin im gebiet programmieren, fehlt mit wohl manchmal a bissl der blick fürs gute design -_-

Michael ±0
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pkg0926990_1;
import java.util.Scanner;
/**
 *
 * @author Mike
 */
public class Bsp5_0926990_1 
{
    public static void main(String args[])
    {
        
        double db;
        double I;
        double E = 210E9;
        Scanner eingabe_sc = new Scanner(System.in);
        
        
        System.out.println("Geben sie an welche Querschnittsform ihr Träger hat : ");
        System.out.println("Kreis (k) , Quadrat (q) oder I-Träger (i)");
            char traeger = eingabe_sc.next().charAt(0);
       
        System.out.println("Geben sie die Querschnittsgröße (mm) an : ");
            double a = 10E-3*eingabe_sc.nextDouble();
            
        System.out.println("Geben sie die Balkenlänge (mm) an : ");
            double l = 10E-3*eingabe_sc.nextDouble();
                     
        System.out.println("Geben sie die einwirkende Kraft (N) an");
            double f = eingabe_sc.nextDouble();
            
        System.out.println("Geben sie die Lagerun des Balkens an : ");
        System.out.println("Beidseitig gelagert, Kraft in der Mitte (b)  \nEinseitig eingespannt, Kraft am ende (e)");
            char lagerung = eingabe_sc.next().charAt(0);
            
            
            
                switch(traeger)
                {
            case 'q' : 
                I = (Math.pow(a,4)/16);
                break;                            
            case 'k' :
                I = (Math.pow(a,4)*3.14/4);
                break;
            case 'i' :
                I = (Math.pow(a,4)*10/144);
                break;
            default : System.out.println("fehlerhafte Eingabe!");
                }
                
                
                switch(lagerung)
                {
            case 'b' : 
                db = f*l*l*l/(48*E*I); //<---
                break;                            
            case 'e' :
                db = f*l*l*l/(3*E*I); //<---
                break;
            default : System.out.println("fehlerhafte Eingabe!");
                }            
            
            
            //hier dann noch die Ausgaben die aus db folgen sollten.
            
            
        
    }
    
    
    
    
    
}
\n~~~


so siehts nun aus, ich hoffe es is übersichtlicher. Allerdings hab ich erneut genau Das Problem, dass er I unten in dem zweiten switch-case ned annimmt. glaub ich bin einfach zu dumm dafür >:(



edit:  ok es is wirklich dummheit. nachdem mir eben gesagt wurde, dass er db als auch I als IRGENDWAS initialisiert haben will, weil im falle des default switch-case ergebnisses eine un-initialisierte variable da wäre..
Alexander ±0
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author Mike
 */

import java.util.Scanner;

public class Bsp5_0926990_1 {

    public static void main(String args[]) {

        double f=0,I=0;
        double E=210E3;
        double pi = Math.PI;

        Scanner eingabe_sc = new Scanner(System.in);
       
        System.out.println("Geben sie die Querschnittsgröße (mm) an : ");
        double a = eingabe_sc.nextDouble();
        System.out.println("Geben sie die Balkenlänge (mm) an : ");
        double l = eingabe_sc.nextDouble();
        System.out.println("Geben sie die einwirkende Kraft (N) an");
        double F = eingabe_sc.nextDouble();

        System.out.println("Wählen Sie eine Querschnittsform:"
                + "\nQuadrat (q)"
                + "\nKreis (k)"
                + "\nI-Träger (i)");
        char traeger = eingabe_sc.next().charAt(0);
            
        switch(traeger) {
            case 'q' : 
                I = Math.pow(a,4)/12;
                break;                            
            case 'k' :
                I = Math.pow(a,4)*pi/4;
                break;
            case 'i' :
                I = Math.pow(a,4)*10/144;
                break;
            default:
                System.out.println("Fehlerhafte Eingabe!");
                break;
        }
                
        System.out.println("Geben sie die Lagerun des Balkens an:"
                + "\nBeidseitig gelagert, Kraft in der Mitte (b)"
                + "\nEinseitig eingespannt, Kraft am ende (e)");
        char lagerung = eingabe_sc.next().charAt(0);
                
        switch(lagerung) {
            case 'b' : 
                f = F*Math.pow(l,3)/(48*E*I);
                break;

            case 'e' :
                f = F*Math.pow(l,3)/(3*E*I);
                break;

            default:
                System.out.println("Fehlerhafte Eingabe!");
                break;
        }            

        System.out.println("Flächenträgheitsmoment: " + I + " mm^4");
        System.out.println("Maximale Durchbiegung:  " + f + " mm");

    }

}
\n~~~

have fun...
Jürgen ±0

Beispiel 1.3 Schleife:

int hilfsvariable = n;
        while(i > 0)         
        {
            while(n-1 > 0)
            {
                System.out.print(zeichen+" ");  //print: Ausgabe ohne Umbruch
                n--;                                     //Immer 1 weniger, um keine Endlosschleife zu produzieren
            }
            System.out.println(zeichen);        //println: Ausgabe mit Umbruch
            i--;                           
            n = hilfsvariable;                       //damit die innere Schleife wieder von vorne beginnt!
        }
\n~~~
Mateen ±0

Hier meine vollständige HÜ, hoffe es hilft wem. Wenn jemandem Fehler auffallen bitte mitteilen.

Btw. ohne Gewähr, hatte nicht die Zeit zur genauen Kontrolle.

Grüße Alex

Danke fürs Hochladen!

Könnte mir noch jemand erklären, wie ich das alles korrekt ins NetBeans bekomme (mit den Classen kenn ich mich nicht aus...) und dann entsprechend abspeichere um es im Tuwel hochladen zu können?

Danke!

Alexander ±0

Kein Thema, würde dich aber bitten das Ganze nicht einfach zu kopieren. Wenn du's nicht selber programmierst (bzw. schreibst) wird's dich ziemlich sicher beim Abgabegespräch böse aufhauen. Man merkt das nämlich relativ rasch ob man sich beim programmieren Gedanken gemacht hat oder nicht ;)

Zu deiner Frage: siehe PDF "Abgabekonventionen" im TUWEL-Kurs.

Grüße Alex

Mateen ±0

Mathe 2 Test hat gerade Priorität und über die Osterferien war ich leider zu faul.

Hab mir aber fest vorgenommen den Stoff nachzulernen und die zweite HÜ selbst zu machen ;)

Benjamin-Montgomery ±0

hallo ihr lieben, eine frage^^ habe bsp2 selbst ständig ( leider falsch gelöst). Habe ohne do while schleife gearbeitet. Nun zur eigendlichen frage:

                  i = sc.nextInt();
                              
                        if ( i == 1) 
                            i = 1;  //wenn Neuberechnung
                        else i = 2; //wenn Abbruch 
                       }
               while (i == 1)
\n~~~

wieso ist bei while ( i==1 ). Sollte das dann nicht wenn ich 1 eingebe in die Do schleife springen MFG =)
Yigitcan ±0

Ich hab noch probleme mit uploaden..hab die dokumente auch als jar. gewechselt und glaube nur diese jar. daten zu schichken aber wenn ich diese jar. daten beim irgenanderen pc aufmachen will geht das nicht..wie kann ich diese daten uploaden yu tuwel ?? vielen Dank

Mateen ±0

Du musst es mit unzip / unrar / anderen Entpackungsprogrammen öffnen, hast du das versucht?

Sorry, die Kommentarfunktion ist geschlossen.