Forum / Grundlagen des Programmierens / 4. Hausübung

4. Hausübung

Hallo, Weiß irgendjemand wie man beim 1. Beispiel die Exception für Overflows machen kann?

import java.util.Scanner;
import java.util.InputMismatchException;
import java.lang.Exception;

public class Bsp1_1127390_4 {
   
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        try{
            System.out.println("Bitte geben Sie eine Zahl ein, von der Sie die Fakultät berechnen wollen!");
            int y = sc.nextInt();
        
            long z = fakultaet(y);
            System.out.println("Das Ergenbiss lautet:");
            System.out.println(y + "! = " + z);
            
        }catch(InputMismatchException e){
            System.out.println("Fehlerhafte Eingabe: " + e);
        }//2. Exception für Owerflows!!!!
        
    }
    public static long fakultaet (int x){
        if (x == 1){
            return 1;
        }else{
            return fakultaet(x-1)*x;
        }
    }
}
\n~~~
Dieter ±0

Eine schöne Methode beim Bsp drei wäre(bzgl dem Exception Handling), den "berechnen" Button über die Listener nur dann zu aktivieren, wenn sowohl Zahlen in dem Textfeldern stehen, als auch alle Auswahlen über die Radiobuttons getroffen wurden-so habs ich gemacht=)

Martin ±0

stimmt. würde mit auch gut gefallen! habs so gelöst, das die radio buttons standardmäßig auf dem ersten wert stehen => radio buttons fallen weg, .... eingabefehler hast dann halt einfach keine?! btw. mich wüde interessieren wie es geht das man ein feld löscht sobald der cursor darin ist, nicht nur bei mausclick?!

Dieter ±0

Alsooo wie das bei mir aussieht: Ich hab das bei mir auf die Art gelöst(prinzipieller Aufbau): -Über einen CaretListener wird überprüft ob eine Eingabe in einem der Textfelder durchgeführt wurde, und je nachdem in welchem, wird dann bei der entsprechenden Variable versucht, den erhaltenen String(aus dem Textfield) in einen double-Wert umzuwandeln(umgeben mittels try-catch damit das Programm nicht abschmiert wenn es den String nicht in eine Zahl umwandeln kann(bei falscher Eingabe)-bei catch wird aber nichts ausgeführt) -Über einen ItemListener wird überprüft, ob und welcher RadioButton aktiviert wurde(standartgemäß habe ich keinen aktiviert beim Programmstart) weiters wird in diesem ItemListener mittels einer if-Abfrage überprüft, ob SOWOHL ein RadioButton bzgl Querschnitt, ALS AUCH einer bzgl Auflagerkombi aktiviert wurde(mittels
.isSelected() ) Ist dies der Fall wird in ein Textfield (welches nicht im Fenster angezeigt wird, sondern welches ich nur für den "trick" brauche den berechnen button zu aktivieren) ein String
geschrieben(mittels setText() ) zB bei mir "Alles ausgewaehlt" Ist dies nicht der Fall wird in dieses Textfeld etwas anderes geschrieben zB bei mir "nicht alle Auswahlen getroffen" -Dann habe ich in jenem CaretListener den ich oben schon genannt habe noch eine if-Abfrage geschrieben, die folgendes überprüft: Wenn alle folgenden Abfragen true sind: in allen drei Textfeldern in denen etwas eingegeben werden muss, muss eine Zahl stehen( jeweils mittels NameDeinesTextFields.getText().matches("[0-9]+") ) UND in dem Textfeld, welches ich schon im ItemListener erwähnt habe, muss der String (zB bei mir) "Alles ausgewaehlt" stehen - dies kann man überprüfen mittels NameDeinesTextFields.getText().equals("Alles ausgewaehlt") Wenn all dies erfüllt ist, wird mein berechnen button auf auswählbar gestellt: mittels .setEnabled(true) Werden nicht alle if-Klauseln erfüllt, wird er auf nicht auswählbar gestellt: .setEnabled(true)

Dadurch schmiert das Programm auch nicht ab, wenn man nur Zahlen eingibt, aber keine RadioButtons auswählt, da man dann ja einfach nicht auf berechnen klicken kann^.^

Martin ±0

Abschmieren tut meines auch auf keinen fall ;) soweit is mein programm schon sicher ;) keine sorge ;)

Claudia ±0

Weiß zufällig jemand, was an meinem Programm falsch ist? Bei mir sind die RadioButtons immer unterwellt... Sonst hab ich noch ein Programm für Balken, Balkenbieger, Auflagerbalken, Kragträger, MainJAva , Querschnitt und Waiting Thread... In meinem Waiting Thread Programm funktioniert auch irgendas nicht... Wäre sehr dankbar für Hilfe!

 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import java.util.Scanner;
/**
 *
 * @author Claudia
 */
public class Bsp3_1029379_4 extends javax.swing.JFrame {
    
    
    String Kraft;
    String Durchmesser;
    String Laenge;
    float fKraft;
    float fDurchmesser;
    float fLaenge;
    float fErgebnis;
    String Ergebnis;
    
    /**
     * Creates new form Bsp3_1029379_4
     */
    public Bsp3_1029379_4() {
        initComponents();
    }
    /**
     * This method is called from within the constructor to initialize the form
     * Warning: Don't modify this code. The content of this method is always 
     * regenerated by the form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-Begin:initComponents
    private void initComponents() {
        
        jLabel1 = new javax.swing.JLabel();
        buttonGroup1 = new javax.swing.ButtonGroup();
        buttonGroup2 = new javax.swing.ButtonGroup();
        LaengeInput = new javax.swing.JTextField();
        DurchmesserInput = new javax.swing.JTextField();
        KraftInput = new javax.swing.JTextField();
        DurchmesserOutput = new javax.swing.JLabel();
        LaengeOutput = new javax.swing.JLabel();
        KraftOutput = new javax.swing.JLabel();
        jLabelErgebnis = new javax.swing.JLabel();
        jButtonBerechnen = new javax.swing.JButton();
        jRadioButtonKreis = new javax.swing.JRadioButton();
        jRadioButtonQuadrat = new javax.swing.JRadioButton();
        jRadioButtonI = new javax.swing.JRadioButton();
        jRadioButtonAuflagerbalken = new javax.swing.JRadioButton();
        jRadioButtonKrag = new javax.swing.JRadioButton();
        
        jLabel1.setText("jLabel1");
        
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        
        LaengeInput.setText("Länge");
        LaengeInput.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                LaengeInputActionPerformed(evt);
            }
        });
                
                DurchmesserInput.setText("Durchmesser");
                
                KraftInput.setText("Kraft");
                
                DurchmesserOutput.setText("Durchmesser");
                
                LaengeOutput.setText("Länge");
                
                KraftOutput.setText("Kraft");
                
                jLabelErgebnis.setText("Ergebnis");
                
                jButtonBerechnen.setText("Berechnen");
                jButtonBerechnen.addActionListener(new java.awt.event.ActionListener()
                {
                        
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
                            jButtonBerechnenActionPerformed(evt);
                        }
});
                buttonGroup1.add(jRadioButtonKreis);
                jRadioButtonKreis.setText("Kreis");
                
                buttonGroup1.add(jRadioButtonQuadrat);
                jRadioButtonQuadrat.setText("Quadrat");
                
                buttonGroup1.add(jRadioButtonI);
                jRadioButtonI.setText("I-Träger");
                
                buttonGroup2.add(jRadioButtonAuflagerbalken);
                jRadioButtonAuflagerbalken.setText("Auflagerbalken");
                
                buttonGroup2.add(jRadioButtonKrag);
                jRadioButtonKrag.setText("Kragträger");
                
                javax.swing.GroupLayout layout = new
                        javax.swing.GroupLayout(getContentPane());
                getContentPane().setLayout(layout);
                layout.setHorizontalGroup(
                        
                        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createSequentialGroup()
                        
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createSequentialGroup()
                        .addGap(51, 51, 51)
                        
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING,false)
                        .addComponent(LaengeInput)
                        .addComponent(DurchmesserInput,javax.swing.GroupLayout.DEFAULT_SIZE, 80, Short.MAX_VALUE)
                        .addComponent(KraftInput))
                        .addGap(74, 74, 74)
                        
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                        .addComponent(DurchmesserOutput)
                        .addComponent(LaengeOutput)
                        .addComponent(KraftOutput)))
                        .addGroup(layout.createSequentialGroup()
                        .addGap(144, 144, 144)
                        .addComponent(jButtonBerechnen))
                        .addGroup(layout.createSequentialGroup()
                        .addGap(50, 50, 50)
                        
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jRadioButtonQuadrat)
                        .addGroup(layout.createSequentialGroup()
                        .addComponent(jRadioButtonI)
                        .addGap(45, 45, 45)
                        .addComponent(jLabelErgebnis))
                        .addComponent(jRadioButtonKreis))))
                        .addContainerGap(135, Short.MAX_VALUE))
                        .addGroup(layout.createSequentialGroup()
                        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,Short.MAX_VALUE)
                        
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jRadioButtonAuflagerbalken)
                        .addComponent(jRadioButtonKrag))
                        .addGap(59, 59, 59))
                        );
                
                layout.setVerticalGroup(
                        
                        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createSequentialGroup()
                        .addGap(24, 24, 24)
                        
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                        .addComponent(jRadioButtonAuflagerbalken)
                        .addGroup(layout.createSequentialGroup()
                        
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(LaengeInput,
                        javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
                        javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(LaengeOutput))
                        .addGap(26, 26, 26)
                        
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(DurchmesserInput,
                        javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
                        javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(DurchmesserOutput))
                        .addGap(18, 18, 18)
                        
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(KraftInput,
                        javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
                        javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(KraftOutput))
                        .addGap(18, 18, 18)
                        .addComponent(jRadioButtonkreis)))
                        
                        .addPreferredGap.(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createSequentialGroup()
                        .addGap(3, 3, 3)
                        .addComponent(jRadioButtonQuadrat)
                        
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        
                        .addGroup(layout.createSequentialGroup()
                        .addGap(0, 22, Short.MAX_VALUE)
                        .addComponent(jLabelErgebnis)
                        .addGap(18, 18, 18)
                        .addComponent(jButtonBerechnen)
                        .addGap(28, 28, 28))
                        .addGroup(layout.createSequentialGroup()
                        .addComponent(jRadioButtonI)
                        addContainerGap())))
                        .addGroup(layout.createSequentialGroup()
                                .addComponent(jRadioButtonKrag)
                                .addContainerGap())))
                        );
                        
                        pack();
                        
    }//</editor-fold>//GEN-END:initComponents
    
    private void jButtonBerechnenActionPerformed(java.awt.event.ActionEvent evt)
    {//GEN-FIRST:event_jButtonBerechnenActionPerformed
        
        Laenge = LaengeInput.getText();
        fLaenge = Float.parseFloat(Laenge);
        Kraft=KraftInput.getText();
        fKraft = Float.parseFloat(Kraft);
        Durchmesser=DurchmesserInput.getText();
        fDurchmesser = Float.parseFloat(Durchmesser);
        Scanner input = new Scanner(System.in);
        
        Balken_ balken = null; //erzeugt Balken der Form class Balken
        
        //Abfrage der Balkenart
        
        if(jRadioButtonAuflagerbalken.isSelected()){
            balken = new Auflagerbalken();
        }
        else if(jRadioButtonKrag.isSelected()){
            balken = new Kragtraeger();
        }
        else{
            jLabelErgebnis.setText("Keine Tägerart ausgewählt");
        }
        if(jRadioButtonkreis.isSelected()){
            balken.setQuerschnitt_art('k');
        }
        else if(jRadioButtonQuadrat.isSelected()){
            balken.setQuerschnitt_art('q');
        }
        else if(jRadioButtonI.isSelected()){
            balken.setQuerschnitt_art('i');
        }
        else{
            jLabelErgebnis.setText("Keine Trägerart ausgewählt");
        }
        balken.setQuerschnitt_abmessung(fDurchmesser);
        balken.setLaenge(fLaenge);
        balken.setKraft(fKraft);
        //Abfrage der Form des Querschnitts
        fErgebnis = balken.getAbsenkung();
        Ergebnis= Float.toString(fErgebnis);
        System.out.println(fErgebnis);
        jLabelErgebnis.setText(Ergebnis);
      
    }//GEN-LAST:event_jButtonBerechnenActionPerformed
    
    private void LaengeInputActionPerformed(java.awt.event.ActionEvent evt)
    {//GEN-FIRST:event_LaengeInputActionPerformed
        
        //TODO add your handling code here:
    }//GEN-LAST:event_LaengeInputActionPerformed
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /*
         * Set the Nimbus look and feel
         */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code ">
        /*
         * If Nimbus (introduced in JavaSE6) is not available, stay with the
         * default
         
        [How to Set the Look and Feel (The Java™ Tutorials > Creating a GUI With JFC/Swing > Modifying the Look and Feel)](https://studify.com/outgoing?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2Ftutorial%2Fuiswing%2Flookandfeel%2Fplaf.html)
        */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info:
                    javax.swing.UIManager.getInstalledLookAndFeels()){
                if ("Nimbus".equals(info.getName())){
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            
            java.util.logging.Logger.getLogger(Bsp3_1029379_4.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }catch (InstantiationException ex) {
            
            java.util.logging.Logger.getLogger(Bsp3_1029379_4.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }catch (IllegalAccessException ex) {
            
            java.util.logging.Logger.getLogger(Bsp3_1029379_4.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }catch (javax.swing.UnsupportedLookAndFeelException ex) {
            
            java.util.logging.Logger.getLogger(Bsp3_1029379_4.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>
        
        /*
         * Create and display the form
         */
        java.awt.EventQueue.invokeLater(new Runnable() {
            
            public void run() {
                new Bsp3_1029379_4().setVisible(true);
            }
        });
    }
    //Variabel decleration - do not modify//GEN-BEGIN: variables
    private javax.swing.JTextField DurchmesserInput;
    private javax.swing.JLabel DurchmesserOutput;
    private javax.swing.JTextField KraftInput;
    private javax.swing.JLabel KraftOutput;
    private javax.swing.JTextField LaengeInput;
    private javax.swing.JLabel LaengeOutput;
    private javax.swing.ButtonGroup buttongroup1;
    private javax.swing.ButtonGroup buttongroup2;
    private javax.swing.JButton jButtonBerechnen;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabelErgebnis;
    private javax.swing.JRadioButton jRadioButtonAuflagerbalken;
    private javax.swing.JRadioButton jRadioButtonI;
    private javax.swing.JRadioButton jRadioButtonKrag;
    private javax.swing.JRadioButton jRadioButtonKreis;
    private javax.swing.JRadioButton jRadioButtonQuadrat;
    // End of decleration//GEN-END:variables
   
}\n~~~
Martin ±0

(Blöde Frage aber deine klasse heißt balken_ ? bzw wäre der grund der unterwellung interessant..) inzwischen kommt mir die frage noch dümmer vor :D sorry ;)

Claudia ±0

(Blöde Frage aber deine klasse heißt balken_ ? bzw wäre der grund der unterwellung interessant..) inzwischen kommt mir die frage noch dümmer vor :D sorry ;)

Oja ... war ein Fehler... hab jetzt alles ausgebessert und aufjeden Fall kein Rufzeichen mehr... aber kannst du mir sagen ob das normal ist, wenn ich auf run gehe und es kommt folgendes:?

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Component must be non-null at javax.swing.GroupLayout$ComponentSpring.<init>(GroupLayout.java:2878) at javax.swing.GroupLayout$ComponentSpring.<init>(GroupLayout.java:2858) at javax.swing.GroupLayout$Group.addComponent(GroupLayout.java:1490) at javax.swing.GroupLayout$SequentialGroup.addComponent(GroupLayout.java:1771) at javax.swing.GroupLayout$SequentialGroup.addComponent(GroupLayout.java:1713) at javax.swing.GroupLayout$Group.addComponent(GroupLayout.java:1471) at javax.swing.GroupLayout$SequentialGroup.addComponent(GroupLayout.java:1746) at Bsp3_1029379_4.initComponents(Bsp3_1029379_4.java:150) at Bsp3_1029379_4.<init>(Bsp3_1029379_4.java:31) at Bsp3_1029379_4$4.run(Bsp3_1029379_4.java:307) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:646) at java.awt.EventQueue.access$000(EventQueue.java:84) at java.awt.EventQueue$1.run(EventQueue.java:607) at java.awt.EventQueue$1.run(EventQueue.java:605) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) at java.awt.EventQueue.dispatchEvent(EventQueue.java:616) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Can ±0

Bsp1: ''static long faktorielle(long Zahl)'' illegal start of expression Bsp2: ''static float addition(Stack s) throws EmptyStackException'' illegal start of expression Hat jemand eine Ahnung

Livia ±0

könnte jemand bitte so lieb sein und die 4.hausübung online stellen?wäre echt super...

Lukas ±0

Hat der liebe Kollege Martin_ schon ne Seite zuvor gemacht ;)

Martin ±0

Hat der liebe Kollege Martin_ schon ne Seite zuvor gemacht ;) Hoch lebe die sufu ;)

Martin ±0

Oja ... war ein Fehler... hab jetzt alles ausgebessert und aufjeden Fall kein Rufzeichen mehr... aber kannst du mir sagen ob das normal ist, wenn ich auf run gehe und es kommt folgendes:?

at Bsp3_1029379_4.initComponents(Bsp3_1029379_4.java:150) at Bsp3_1029379_4.<init>(Bsp3_1029379_4.java:31) at Bsp3_1029379_4$4.run(Bsp3_1029379_4.java:307)

normal isses nicht wenn dein programm crasht ;) bzw eine methode ;) also die 3 zeilen die ich da rausgnommen hab können dir schon mal aufschluss geben wo denn das problem liegen könnte, man mag mich berichtigen, aber ich such meistens nach zeilen in meinem programm im fehler code.. was nun explizit der grund is kann ich leider net sagen. (ein klügerer programmierer möge mich korrigieren wenn ich irre ;) )

Alexander ±0

Bzgl. meinen Codes: Ich werde sie heute Abend oder morgen hier (mit ausreichend Kommentaren versehen) hochladen und bei Fragen gerne nochmal für alle erklären. Bitte verschont mich aber mit Privaten Nachrichten zu der HÜ, da ich die ganzen Nachrichten hier und auf Facebook einfach nicht mehr beantworten kann.

Fragen zum Abgabegespräch werden größtenteils in Wolfgangs Thread geklärt, ansonsten bitte einfach dazuschreiben!

Grüße Alex

Alexander +1
Meine Lösung

Hier wie versprochen meine Lösung der vierten HÜ mit Kommentaren.

Fragen beantworte ich gerne hier im Thread, bitte jedoch nicht via privater Nachricht etc. nachfragen!

Grüße Alex

Sorry, die Kommentarfunktion ist geschlossen.