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~~~
Lukas ±0

catch(java.lang.StackOverflowError e){ //negative Zahlen o.ä. System.out.println("Overflow..."); }

Daniela ±0

Was bedeuted hier public static long?

Lukas ±0

Das der Rückgabewert der Funktion Fakulataet vom Typ long ist.

long: The long data type is a 64-bit signed two's complement integer. It has a minimum value of -9,223,372,036,854,775,808 and a maximum value of 9,223,372,036,854,775,807 (inclusive). Use this data type when you need a range of values wider than those provided by int.

Manuel ±0

Das mit der StackOverflowError funktioniert bei mir nicht. Das Programm überschreibt mir den integer wieder von vorne. habs auch schon mit einer if(fakultaet < integer.MAX_VALUE) probiert. Hat aber auch nicht funktioniert. Hat das Bsp schon jemand?

Dolmade ±0

OverflowError einfach unter den 1.Error hängen:

    catch (StackOverflowError er) {
        System.out.println(&quot;Overflow Error, versuchen Sie es mit einer kleineren Zahl erneut!&quot;);
    }

Hat bei mir funktioniert.

Aber mal andere Frage: Kommt bei euch auch bei eingabe von z.b. "99" "0" raus?

Daniela ±0

ja laut dem tutor heute im tutorium macht das nix...

Florian ±0
  1. Bsp Hab ein kleines Problem.... Ich hab die double a ganz am Anfang der Klasse initialisiert, genauso wie balken der Klasse Balken. seta(double a) ist meine Methode von den vorherigen Klassen die mir für balken den Durchmesser setzt.

Das Problem ist jetzt aber dass er die Variable a anscheinend nicht übergeben kann... wenn ich abfrage was a ist kommt immer 0.0 raus. (Genauso gehts mir bei allen anderen auch die ich versuche an balken zu übergeben...

private void TextDurchmesserActionPerformed(java.awt.event.ActionEvent evt) { //automatisch Erstellt
        a = Double.parseDouble(TextDurchmesser.getText()); //TextDurchmesser ist das Textfeld
        balken.seta(a);
    }\n~~~

Muss ich bei diesem Beispiel eigentlich auch was in die Main Methode schreiben oder kommt da alles zu diesen ActionPerformed Methoden?
Kann mir da wer helfen? :confused:
Florian ±0

Okay hat sich erledigt. Man muss die Zuweisungen auch im ActionPerformed von dem Berechnungsbutton machen... dann gehts :-)

Luis ±0

also wenn die zahl zu groß ist kommt 0 raus. und das soll nichts machen? ist dafür nicht grade die overflow exeption gedacht um solche fehler zu vermeiden? grüße

Maximilian ±0

ja eben. nur das mit dem stackoverflowerror macht hier keinen unterschied.

Wolfgang ±0
Bsp 3 - bis auf ein paar kleinigkeiten fertig
 /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Bsp3;

import Bsp5_0928804_2.*;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.util.Scanner;
import javax.swing.*;

/**
 *
 * @author Wolfgang
 * @date 04.06.2012
 */
public class Bsp3_0928804_4 extends JFrame {

    private JPanel jContentPane = null;
    private JTextField jTextField_Laenge = null;
    private JTextField jTextField_Durchmesser = null;
    private JTextField jTextField_Kraft = null;
    private JTextField jTextField_Durchbiegung = null;
    private JLabel jLabel_Laenge = null;
    private JLabel jLabel_Durchmesser = null;
    private JLabel jLabel_Kraft = null;
    private JLabel jLabel_Kreis = null;
    private JLabel jLabel_Quadrat = null;
    private JLabel jLabel_I_Traeger = null;
    private JLabel jLabel_Auflagerbalken = null;
    private JLabel jLabel_Kragtraeger = null;
    private JButton jButton_Berechnen = null;
    private JTextField jTextField_Result = null;
    private JRadioButton jRadioButton_Kreis = null;
    private JRadioButton jRadioButton_Quadrat = null;
    private JRadioButton jRadioButton_I_Traeger = null;
    private JRadioButton jRadioButton_Auflagerbalken = null;
    private JRadioButton jRadioButton_Kragtraeger = null;
    
    int Querschnitt;
    private final int Auflagerbalken = 1;
    private final int Kragtraeger = 2;
    boolean a,b,Kreis1,Quadrat1,I_Traeger1;
    
    public Bsp3_0928804_4() throws HeadlessException {
        super();
        initialize();
    }
    
    public Bsp3_0928804_4(GraphicsConfiguration gc) throws HeadlessException {
        super(gc);
        initialize();
    }
    
    public Bsp3_0928804_4(String title) throws HeadlessException {
        super(title);
        initialize();
    }
    
    public Bsp3_0928804_4(String title, GraphicsConfiguration gc) throws HeadlessException {
        super(title, gc);
        initialize();
    }
    
    public void initialize ()   {
        this.setSize(300,400);
        this.setResizable(false);
        this.setContentPane(getJContentPane());
        this.setTitle(&quot;Add Values&quot;);
    }
    
    private JPanel getJContentPane()    {
        if(jContentPane == null)    {
            
            FlowLayout flowLayout = new FlowLayout();
            flowLayout.setAlignment(java.awt.FlowLayout.LEFT);
            
            jLabel_Laenge = new JLabel();
            jLabel_Laenge.setText(&quot;Laenge&quot;);
            jLabel_Laenge.setPreferredSize(new Dimension(100,30));
            
            jLabel_Durchmesser = new JLabel();
            jLabel_Durchmesser.setText(&quot;Durchmesser&quot;);
            jLabel_Durchmesser.setPreferredSize(new Dimension(100,30));
            
            jLabel_Kraft = new JLabel();
            jLabel_Kraft.setText(&quot;Kraft&quot;);
            jLabel_Kraft.setPreferredSize(new Dimension(170,30));
            
            jLabel_Kreis = new JLabel();
            jLabel_Kreis.setText(&quot;Kreis&quot;);
            jLabel_Kreis.setPreferredSize(new Dimension(100,30));
            
            jLabel_Quadrat = new JLabel();
            jLabel_Quadrat.setText(&quot;Quadrat&quot;);
            jLabel_Quadrat.setPreferredSize(new Dimension(100,30));
            
            jLabel_I_Traeger = new JLabel();
            jLabel_I_Traeger.setText(&quot;I-Tr&auml;ger&quot;);
            jLabel_I_Traeger.setPreferredSize(new Dimension(100,30));
            
            jLabel_Auflagerbalken = new JLabel();
            jLabel_Auflagerbalken.setText(&quot;Auflagerbalken&quot;);
            jLabel_Auflagerbalken.setPreferredSize(new Dimension(120,30));
            
            jLabel_Kragtraeger = new JLabel();
            jLabel_Kragtraeger.setText(&quot;Kragtr&auml;ger&quot;);
            jLabel_Kragtraeger.setPreferredSize(new Dimension(120,30));
            
            jContentPane = new JPanel();
            jContentPane.setLayout(flowLayout);
            
            jContentPane.add(getJTextField_Laenge(),null);
            jContentPane.add(jLabel_Laenge,null);
            jContentPane.add(getJTextField_Durchmesser(),null);
            jContentPane.add(jLabel_Durchmesser,null);
            jContentPane.add(getJTextField_Kraft(),null);
            jContentPane.add(jLabel_Kraft,null);
            jContentPane.add(getJRadioButton_Kreis(),null);
            jContentPane.add(jLabel_Kreis,null);
            jContentPane.add(getJRadioButton_Auflagerbalken(),null);
            jContentPane.add(jLabel_Auflagerbalken,null);
            jContentPane.add(getJRadioButton_Quadrat(),null);
            jContentPane.add(jLabel_Quadrat,null);
            jContentPane.add(getJRadioButton_Kragtraeger(),null);
            jContentPane.add(jLabel_Kragtraeger,null);
            jContentPane.add(getJRadioButton_I_Traeger(),null);
            jContentPane.add(jLabel_I_Traeger,null);
            jContentPane.add(getJtextField_Result(),null); 
            jContentPane.add(getJButton_Berechnen(),null);
           
        }
        return jContentPane;
    }
    
    private JRadioButton getJRadioButton_Kreis() {
        if (jRadioButton_Kreis == null) {
            try {
                jRadioButton_Kreis = new JRadioButton();
                jRadioButton_Kreis.setEnabled(true);
                jRadioButton_Kreis.setSelected(false);
                jRadioButton_Kreis.addActionListener((new java.awt.event.ActionListener() {

                    @Override
                    public void actionPerformed(java.awt.event.ActionEvent e) {
                        jRadioButton_Kreis.setSelected(true);
                        jRadioButton_Quadrat.setSelected(false);
                        jRadioButton_I_Traeger.setSelected(false);
                        Kreis1 = jRadioButton_Kreis.isSelected();
                        Quadrat1 = false;
                        I_Traeger1 = false;
                    }
                }));
            } catch (java.lang.Throwable e) {
                //
            }
        }
        return jRadioButton_Kreis;
    }
    
    private JRadioButton getJRadioButton_Quadrat() {
        if (jRadioButton_Quadrat == null) {
            try {
                jRadioButton_Quadrat = new JRadioButton();
                jRadioButton_Quadrat.setEnabled(true);
                jRadioButton_Quadrat.setSelected(false);
                jRadioButton_Quadrat.addActionListener((new java.awt.event.ActionListener() {

                    @Override
                    public void actionPerformed(java.awt.event.ActionEvent e) {
                        jRadioButton_Kreis.setSelected(false);
                        jRadioButton_Quadrat.setSelected(true);
                        jRadioButton_I_Traeger.setSelected(false);
                        Quadrat1 = jRadioButton_Quadrat.isSelected();
                        Kreis1 = false;
                        I_Traeger1 = false;
                    }
                }));
            } catch (java.lang.Throwable e) {
                //
            }
        }
        return jRadioButton_Quadrat;
    }
    
    private JRadioButton getJRadioButton_I_Traeger() {
        if (jRadioButton_I_Traeger == null) {
            try {
                jRadioButton_I_Traeger = new JRadioButton();
                jRadioButton_I_Traeger.setEnabled(true);
                jRadioButton_I_Traeger.setSelected(false);
                jRadioButton_I_Traeger.addActionListener((new java.awt.event.ActionListener() {

                    @Override
                    public void actionPerformed(java.awt.event.ActionEvent e) {
                        jRadioButton_Kreis.setSelected(false);
                        jRadioButton_Quadrat.setSelected(false);
                        jRadioButton_I_Traeger.setSelected(true);
                        I_Traeger1 = jRadioButton_I_Traeger.isSelected();
                        Kreis1 = false;
                        Quadrat1 = false;
                    }
                }));
            } catch (java.lang.Throwable e) {
                //
            }
        }
        return jRadioButton_I_Traeger;
    }
    
    private JRadioButton getJRadioButton_Auflagerbalken() {
        if (jRadioButton_Auflagerbalken == null) {
            try {
                jRadioButton_Auflagerbalken = new JRadioButton();
                jRadioButton_Auflagerbalken.setEnabled(true);
                jRadioButton_Auflagerbalken.setSelected(false);
                jRadioButton_Auflagerbalken.addActionListener((new java.awt.event.ActionListener() {

                    @Override
                    public void actionPerformed(java.awt.event.ActionEvent e) {
                        jRadioButton_Auflagerbalken.setSelected(true);
                        jRadioButton_Kragtraeger.setSelected(false);
                        a = jRadioButton_Auflagerbalken.isSelected();
                        b = false;
                    }
                }));
            } catch (java.lang.Throwable e) {
                //
            }
        }
        return jRadioButton_Auflagerbalken;
    }
    
    private JRadioButton getJRadioButton_Kragtraeger() {
        if (jRadioButton_Kragtraeger == null) {
            try {
                jRadioButton_Kragtraeger = new JRadioButton();
                jRadioButton_Kragtraeger.setEnabled(true);
                jRadioButton_Kragtraeger.setSelected(false);
                jRadioButton_Kragtraeger.addActionListener((new java.awt.event.ActionListener() {

                    @Override
                    public void actionPerformed(java.awt.event.ActionEvent e) {
                        jRadioButton_Auflagerbalken.setSelected(false);
                        jRadioButton_Kragtraeger.setSelected(true);;
                        b = jRadioButton_Kragtraeger.isSelected();
                        a = false;
                    }
                }));
            } catch (java.lang.Throwable e) {
                //
            }
        }
        return jRadioButton_Kragtraeger;
    }
    
    private JTextField getJTextField_Laenge()    {
        if (jTextField_Laenge == null)  {
            try {
                jTextField_Laenge = new JTextField();
                jTextField_Laenge.setPreferredSize(new Dimension(90,21));
            } catch (java.lang.Throwable e) {
                
            }
        }
        return jTextField_Laenge;
    }
    
    private JTextField getJTextField_Durchmesser()    {
        if (jTextField_Durchmesser == null)  {
            try {
                jTextField_Durchmesser = new JTextField();
                jTextField_Durchmesser.setPreferredSize(new Dimension(90,21));
            } catch (java.lang.Throwable e) {
                
            }
        }
        return jTextField_Durchmesser;
    }
    
    private JTextField getJTextField_Kraft()    {
        if (jTextField_Kraft == null)  {
            try {
                jTextField_Kraft = new JTextField();
                jTextField_Kraft.setPreferredSize(new Dimension(90,21));
            } catch (java.lang.Throwable e) {
                
            }
        }
        return jTextField_Kraft;
    }
    
    public static void main(String[] args)
        {
            Bsp3_0928804_4 thisClass = new Bsp3_0928804_4();
            thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            thisClass.setVisible(true);
                           
         }
       
    
    private JButton getJButton_Berechnen()  {
        if (jButton_Berechnen == null)  {
            try {
                jButton_Berechnen = new JButton();
                jButton_Berechnen.setPreferredSize((new Dimension(150,29)));
                jButton_Berechnen.setFont(new Font(&quot;Arial&quot;, Font.BOLD, 12));
                jButton_Berechnen.setText(&quot;Berechnen&quot;);
                jButton_Berechnen.addActionListener(new java.awt.event.ActionListener() {
                    public void actionPerformed(java.awt.event.ActionEvent e)   {
                        getInputAndAddValues();
                    }
                });
            } catch (java.lang.Throwable e) {
                //
            }
        }
        return jButton_Berechnen;
    }
    
    private JTextField getJtextField_Result()   {
        if (jTextField_Result == null)  {
            try {
                jTextField_Result = new JTextField();
                jTextField_Result.setPreferredSize(new Dimension(160, 21));
            }   catch (java.lang.Throwable e)   {
                //
            }
        }
        return jTextField_Result;
    }


    private void getInputAndAddValues() {
        
        Balken balken = new Balken();
        balken.setLength(Double.parseDouble(jTextField_Laenge.getText()));
        balken.setDiameter(Double.parseDouble(jTextField_Durchmesser.getText()));
        balken.setForce(Double.parseDouble(jTextField_Kraft.getText()));
        
       if (Kreis1 == true) {
                balken.setType('K');
       }
       else if (Quadrat1 == true) {
                balken.setType('Q');
       }
       else if (I_Traeger1 == true) {
                balken.setType('I');
        
        }
        
        if (a == true) {
                balken.setBalkenart(Auflagerbalken);
        }
        else if (b == true) {
                balken.setBalkenart((Kragtraeger));
        }
        
        switch (balken.getBalkenart()) {
                    case 1:
                        Auflagerbalken auflagerbalken = new Auflagerbalken(balken.getLength(), balken.getDiameter(), balken.getForce(), balken.getType());
                        jTextField_Result.setText(String.valueOf(auflagerbalken.getDurchbiegung()));
                        break;
                    case 2:
                        Kragtraeger kragtraeger = new Kragtraeger(balken.getLength(), balken.getDiameter(), balken.getForce(), balken.getType());
                        jTextField_Result.setText(String.valueOf(kragtraeger.getDurchbiegung()));
                        break;
                }
    }
}\n~~~
Luis ±0

ja eben. nur das mit dem stackoverflowerror macht hier keinen unterschied. sorry. das versteh ich nicht. wie meinst du das? ist doch ein overflow wenn die zahl zu groß wird??

Maximilian ±0

ja dass stimmt schon. ich meine dass der stackoverflowerror den fehler auffängt, wenn die eingabe zum beispiel eine negative zahl ist. wenn die eingabe aber zu groß ist (z.b.90), dass das ergebniss nicht mehr in die long variable passt (weil 90! eine zu große zahl ist), gibt das programm als ergeniss 0 aus. ich denke eben, dass man hier auch eine eigene exception braucht, ich hab aber noch nicht herausgefunden welche...

Daniel Sebastian ±0

Also was ich in Erfahrung bringen konnte greift der Stackoverflow wenn der Speicher für die Berechnung der Zahl nicht ausreicht, wenn also die Rekursion zu oft aufgerufen wird, sodass ihr aufgrund des Speichermangels nicht mehr "gefolgt" werden kann.

Felix Sebastian ±0

mal ne frage zu bsp 4;

bei mir steht in der combobox noch item 1 item 2 item 3 item 4

wie bekomm ich das denn raus?

Sorry, die Kommentarfunktion ist geschlossen.