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

Rechtsclick auf ComboBox -> Properties -> model und alles was da drinnen steht löschen :P

Ich hätte auch eine Frage zu Bsp4 -- wo soll ich bitte den ArrayList deklarieren? Hab schon mehrere Stellen versucht aber es funktioniert einfach nicht :/

Thorsten-Louis +1

Mein Code vom 2. Bsp:

package Bsp2_1027223_4;

import java.util.EmptyStackException;
import java.util.Scanner;
import java.util.Stack;


public class Bsp2_1027223_4 {

    public static void main(String[] args) {
        
        Scanner input = new Scanner(System.in);
        
        Stack<Double> zahlenstack = new Stack();
        
        String eingabe;
                System.out.println("Running. For exit please type 'exit' ");
        while(true){
            
         eingabe = input.next();
         try{
            
            if(eingabe.matches("exit")){
                break;                
            }
            char x = eingabe.charAt(0);
            double oberste,ergebnis;
            
            switch(x){
                case '+': oberste=zahlenstack.pop();
                          ergebnis=oberste+zahlenstack.pop();
                          zahlenstack.add(oberste);
                          zahlenstack.add(ergebnis);break;   
                    
                case '-': oberste=zahlenstack.pop();
                          ergebnis=oberste-zahlenstack.pop();
                          zahlenstack.add(oberste);
                          zahlenstack.add(ergebnis);break;
                    
                case '*': oberste=zahlenstack.pop();
                          ergebnis=oberste*zahlenstack.pop();
                          zahlenstack.add(oberste);
                          zahlenstack.add(ergebnis);break;
                    
                case '/': oberste=zahlenstack.pop();
                          ergebnis=zahlenstack.pop()/oberste;
                          zahlenstack.add(oberste);
                          zahlenstack.add(ergebnis);break;
                    
                default: zahlenstack.add(Double.parseDouble(eingabe));
                      }  
            System.out.println(zahlenstack.lastElement());
            }
          catch(NumberFormatException e){
                System.out.println("Inkorrekte Eingabe!");                        
                 }
          catch(EmptyStackException e){
                System.out.println("Zuerst zwei Zahlen eingeben!");           
                
          }
        }
        
    }
}
\n~~~
Benjamin ±0

Ist es bei deiner Division absicht, dass bei man bei der Division zuerst den Divisor eingeben muss? Denn wenn man 10 und 5 eingibt, spuckt er 0,5 aus. Wenn man aber 5 und 10 eingibt, dann gibt er 2 aus. Ist das gewollt oder solln wir das noch abändern...

Ronny ±0

Ich habe ein Problem beim 4. Beispiel und zwar wenn ich einen Thread starte wird mein GUI-Fenster inaktiv. Jemand eine Lösung?

Thorsten-Louis ±0

Oberst_SteinIst es bei deiner Division absicht, dass bei man bei der Division zuerst den Divisor eingeben muss? Denn wenn man 10 und 5 eingibt, spuckt er 0,5 aus. Wenn man aber 5 und 10 eingibt, dann gibt er 2 aus. Ist das gewollt oder solln wir das noch abändern...

Nein war nicht Absicht, wurde editiert!

Lisa ±0

Könnte bitte jemand seine Lösung von Bsp 4 hochladen? Ich komm einfach nicht weiter. Danke im vorraus.

Dieter ±0

Zwei Fragen: a) Was meinen die beim dritten Beispiel mit: Fangen Sie Eingabefehler ab und lassen Sie den Benutzer wissen wo ein Fehler aufgetreten ist!

Ist das auf die Konsole bezogen(das wissen lassen) oder auf das Fenster?

b)(auch 3.Bsp)Ich habe mein Fenster mittels Flowlayout erstellt, und immer wenn ich jetzt das Programm starte zeigt es mir erst alle Elemente an, wenn ich die Fenstergröße manuell verändert habe; auf die mit setSize eingestellte Fenstergröße will mir der Layoutmanager die Elemente einfach nicht einrichten und ich hab keinen Plan wieso :-( aja und noch eine Frage zu Layoutmanagern: Ich habe meine Elemente in Panels zusammen gefasst(weil ich mir dachte, dass das FlowLayout die dann schöner anordnen kann) und diese Panels mittels Boxlayout eingerichtet zB

        benennungTextfelder.setLayout(new BoxLayout(benennungTextfelder, BoxLayout.Y_AXIS));
        add(benennungTextfelder);\n~~~
Jetzt weiß ich aber leider nicht wie ich es schaffe, dass es mir Elemente innerhalb des Pannels mittig anzeigt :-/
Weiß da jemand Rat?
Ronny ±0

Hilfestellung Beispiel 4:

  • Einlesen aus den Textboxen dürfte wohl kein Problem sein (Passendes Exception Handling)
  • Neuen Thread erzeugen wie es im Rep behandelt wurde
  • Array List beschreiben wie im Rep
  • ComboBox füllen mit combo_name.addItem(threadname)
  • Alle Threads beenden wie im Rep mittels Schleife und Array List
  • Einzelner Thread beende : String aus ComboBox auslesen (String)combo.getSelectedItem(), selbige Schleife wie bei stop all um die Array List zu durchlaufen, den eingelesenen Wert mit Array List vergleichen und wenn vorhanden Thread stoppen
  • Klasse WaitingThread die selbe wie im Rep verwenden und eben die Zeit mit übergeben

Hoffe die Anleitung hilft euch weiter :)

Max ±0

Hab n Problem beim Beispiel 3.. ich will auf den Wert "auswahl" zugreifen, das geht aber nicht, weil ich die Methode void deklarieren muss. Nur wie komm ich dann an die Information ran, ob die Box ausgewählt ist, oder nicht? Grüße Max

public void itemStateChanged( ItemEvent e){

        if (e.getSource()==buttonQuadrat){
       if(buttonQuadrat.isSelected()){
           System.out.println("buttonQuadrat");
        auswahl = 1; }}
        
       if (e.getSource()==buttonKreis){
       if(buttonKreis.isSelected()){
           System.out.println("buttonKreis" );
        auswahl = 2; }}
       
       if (e.getSource()==buttonITraeger){
       if(buttonITraeger.isSelected()){
           System.out.println("buttonITraeger");
        auswahl = 3; }}
      
       
       if (e.getSource()==buttonAuflager){
       if(buttonAuflager.isSelected()){
         auswahl2=1;    }}
       
       if (e.getSource()==buttonKragtraeger){
       if(buttonKragtraeger.isSelected()){
          auswahl2=2;  }}}
Berat Kivanc ±0

wäre auch sehr dankbar falls jemand doch das 4. bsp hochladen würde ..

Ronny ±0

hast du mit Radio Buttons gearbeitet wenn ja sieht das ganze so aus //Auswahl der Form if(rb_kreis.isSelected()) wahl = 2; else if(rb_quadrat.isSelected()) wahl = 1; else if(rb_i.isSelected()) wahl = 3; else { fehler = true; fehlertext = "Sie haben keinen Querschnitt gewählt"; }

Claudia ±0

kann vielleicht wer alle Bsp. hochladen? Das wäre wirklich hilfreich! Danke :)

Claudia ±0

Kann mir vielleicht wer sagen was bei dem 1 Bsp. falsch ist?

Dieter ±0

Ich hatte leider keine Zeit für das Rep. - was wurde denn da zu diesem Punkt gesagt:

  • Alle Threads beenden wie im Rep mittels Schleife und Array List
Ronny ±0

Du kannst dir das Rep ja runter laden :)

            {
                //Alle Threads stoppen
                for(int i=0; i < al.size(); i++){
                    al.get(i).interrupt();
                    combo.removeAllItems();
                }
            }\n~~~
Das meinte ich
Sorry, die Kommentarfunktion ist geschlossen.