NotesWhat is notes.io?

Notes brand slogan

Notes - notes.io

Aufgabe 10:

Fehlerbehebungen

Aufgabe 1: Programme „reparieren“

Fehler 1:


package Fehlerbehebung;

import java.io.BufferedReader; //Automatisch importieren lassen
import java.io.IOException; //Automatisch importieren lassen
import java.io.InputStreamReader; //Automatisch importieren lassen

public class Debug
{

public static void main(String[] args) throws NumberFormatException, IOException
// “throws NumberFormatException, IOException von der automatischen Fehlerbehebung eingefügt“
{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);

System.out.print("Zahl 1: ");
int zahl1 = Integer.parseInt(br.readLine(), 10);
System.out.print("zahl 2: ");
int zahl2 = Integer.parseInt(br.readLine(), 10);

System.out.println("Summe = " + (zahl1+zahl2));
System.out.println("Quotient = " + ((double)zahl1/zahl2));
System.out.println("Quotient = " + zahl1/zahl2);
}
}



Berichtigte Ausgabe:
Zahl 1: 24
zahl 2: 35
Summe = 59
Quotient = 0.6857142857142857
Quotient = 0


Fehleranalyse:
Die benötigten Komponenten wurden nicht hinzugefügt, bzw. nicht importiert. 
Fehler 2:


package Fehlerbehebung;

import java.util.Scanner; //Solved

public class Debug2 {

public static void main(String[] args) {
Scanner tastaturScan = new Scanner(System.in);
System.out.print("Zahl1: ");
int zahl1 = tastaturScan.nextInt();
System.out.print("Zahl2: ");
int zahl2 = tastaturScan.nextInt();

System.out.println("n" + "Summe = " + (zahl1+zahl2)); //n abgetrennt
System.out.println("Devision = " + (double)zahl1/zahl2);
System.out.println("Devision = " + ((zahl1/zahl2)));
tastaturScan.close();
}
}


Ausgabe:
Zahl1: 53
Zahl2: 27

Summe = 80
Devision = 1.962962962962963
Devision = 1


Fehleranalyse:

Es fehlte wieder eine Importierung und n wurde mit Summe zusammen geschrieben. (nSumme, was nicht vom Programm als der gewollte Befehl interpretiert werden kann.

Fehler 3:


package Fehlerbehebung;

import java.io.BufferedReader; //Automatisch importieren lassen
import java.io.IOException;
import java.io.InputStreamReader; //Solved

public class Debug3 { //Eigl Altbersbeschränkung

public static void main(String[] args) throws IOException { //IOException Wieder automatisch hinzugefügt
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);

System.out.println("Einen Vodka bitte!");
System.out.println("Wie alt bist du?");
String eingabe = br.readLine();

int alter = Integer.parseInt(eingabe);

if(alter >= 18)
{
System.out.println("Hier ist dein besteller Vodka.");
}
else
{
System.out.println("Kein Vodka für dich. Wie wär's mit Milch Bubi?");
}
System.out.println("Programmende.");
}

}




Ausgabe:

Einen Vodka bitte!
Wie alt bist du?
34534435
Hier ist dein besteller Vodka.
Programmende.


Aufgabe 2: Fehleingaben herausfinden.


a) zahl1 = 1 und zahl2 = 2

(Programm1)
Summe = 3
Quotient = 0.5
Quotient = 0

b) zahl1 = 1.0 und zahl2 = 2

(Programm1)
Exception in thread "main" java.lang.NumberFormatException: For input string: "1.0"
Die 1.0 werden nicht als Integer sondern als string angesehen. Da der String nicht ohne weiteres in das Format eines Integers gebracht werden kann, gibt es die oben genannte Fehlermeldung.

c) zahl1 = wa? und zahl2 = 2

(Programm1)
Exception in thread "main" java.lang.NumberFormatException: For input string: "wa?"
Der “wa?” String wird nicht als Integer gelesen. Aufgrund des falschen Eingabetyps wird der oben gezeigte Fehlercode ausgegeben.

d) zahl1 = 1 und zahl2 = 0

(Programm1)
Summe = 1
Exception in thread "main" Quotient = Infinity
java.lang.ArithmeticException: / by zero

Die Summe ist noch möglich, 1 + 0 = 1. Da man aber beim Teilen durch die Zahl 0 Teilt, ist das Ergebnis als unendlich hoch anzusehen. Mathematisch gesehen kann man nicht durch null teilen. Zu sehen ist dies an der ausgegebenen Meldung, welche oben abgebildet ist.

e) finden Sie für das Programm Altersbeschraenkung eigene Fehleingabewerte:

Zahlen, welche die maximale Größe des Integers überschreiten,
Buchstaben jeglicher Art,
Satzzeichen,
Leere Eingabe.

Aufgabe 3: Fehlermeldungen interpretieren

Fehlermeldung 1 und 2- siehe oben.

Altersbeschränkung:
Einen Vodka bitte!
Wie alt bist du?
12345678901234567890
Exception in thread "main" java.lang.NumberFormatException: For input string: "12345678901234567890"
An dem Begriff “NumberFormatException” kann man erkennen, dass die Eingabe nicht dem erwarteten Datentyp entspricht. Da es sich aber offensichtlich um eine Zahl handelt, welche eingegeben wurde, kann es nur der Fall sein, dass diese größer als die maximale Größe des Integers ist.

Einen Vodka bitte!
Wie alt bist du?
a
Exception in thread "main" java.lang.NumberFormatException: For input string: "a"

Auch hier ist der Eingabewert wieder nicht in einen Integer konvertierbar. Den Formatkonflikt kann man wie bei der zu großen Zahl an den Schlagwörtern „string“, welcher hier nicht vorkommen dürfte und „NumberFormatException” erkennen.

Einen Vodka bitte!
Wie alt bist du?
,
Exception in thread "main" java.lang.NumberFormatException: For input string: ","

Erklärung siehe oben.


Aufgabe 4

Try n‘ catch mit Eingabehilfen.
Ich würde ein try – catch System einbauen und bei falschen Eingaben eine Hilfe anzeigen, wie die Eingaben richtig zu tätigen sind.

Vorgehensweise:
Mögliche Fehler finden,
mögliche Fehler abfangen,
schlaue Eingabehilfen finden.

Aufgabe 5

Try ‘n’ catch Systeme eingeführt.
(Neu: Markierungen “AUFGABE 5: XXX”)

(Fehlermeldung 1)


package Fehlerbehebung;

import java.io.BufferedReader; //Automatisch importieren lassen
import java.io.IOException; //Automatisch importieren lassen
import java.io.InputStreamReader; //Automatisch importieren lassen

public class Debug
{
static int zahl1 = 0; //AUFGABE 5: Jetzt hier deklariert
static int zahl2 = 0; //AUFGABE 5: Jetzt hier deklariert

public static void main(String[] args) throws NumberFormatException, IOException
// “throws NumberFormatException, IOException von der automatischen Fehlerbehebung eingefügt“
{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);

System.out.print("Zahl 1: ");
try //AUFGABE 5: Versuche aus der Eingabe einen Integer zu machen
{
zahl1 = Integer.parseInt(br.readLine(), 10);
}
catch (NumberFormatException e) //AUFGABE 5: Sollte etwas anders als eine ganzzahlige Zahl eingegeben worden sein, wird hier eine Fehlermeldung herausgegeben.
{
System.out.println("Es wurde eine Falsche eingabe detektiert.");
System.out.println(e.getMessage());
System.out.println("Bitte nur ganze Zahlen eingeben [z.B. 25]");
}
System.out.print("zahl 2: ");

try //AUFGABE 5: Versuche aus der Eingabe einen Integer zu machen
{
zahl2 = Integer.parseInt(br.readLine(), 10);
}
catch (NumberFormatException e) //AUFGABE 5: Sollte etwas anders als eine ganzzahlige Zahl eingegeben worden sein, wird hier eine Fehlermeldung herausgegeben.
{
System.out.println("Es wurde eine Falsche eingabe detektiert.");
System.out.println(e.getMessage());
System.out.println("Bitte nur ganze Zahlen eingeben [z.B. 25]");
}

System.out.println("Summe = " + (zahl1+zahl2));
try //AUFGABE 5: Versuche die Berechnung durchzuführen
{
System.out.println("Quotient = " + ((double)zahl1/zahl2));
}
catch (ArithmeticException e) //AUFGABE 5: Abfangen, falls diese nicht durchführbar ist.
{
System.out.println("Es wurde ein Mathematischer Fehler gefunden. (Quotient)");
System.out.println(e.getMessage());
System.out.println("Vermutlich wurde durch 0 geteilt.");
}

try //AUFGABE 5: Versuche die Berechnung durchzuführen
{
System.out.println("Quotient = " + zahl1/zahl2);
}
catch (ArithmeticException e) //AUFGABE 5: Abfangen, falls diese nicht durchführbar ist.
{
System.out.println("Es wurde ein Mathematischer Fehler gefunden. (Quotient)");
System.out.println(e.getMessage());
System.out.println("Vermutlich wurde durch 0 geteilt.");
}

}
}

Beispielausgabe:

Zahl 1: wat?
Es wurde eine Falsche eingabe detektiert.
For input string: "wat?"
Bitte nur ganze Zahlen eingeben [z.B. 25]
zahl 2: hää?
Es wurde eine Falsche eingabe detektiert.
For input string: "hää?"
Bitte nur ganze Zahlen eingeben [z.B. 25]
Summe = 0
Quotient = NaN
Es wurde ein Mathematischer Fehler gefunden. (Quotient)
/ by zero
Vermutlich wurde durch 0 geteilt.


(Fehlermeldung 2)


package Fehlerbehebung;

import java.util.InputMismatchException;
import java.util.Scanner; //Solved

public class Debug2
{

static int zahl1 = 0;
static int zahl2 = 0;

public static void main(String[] args)
{
Scanner tastaturScan = new Scanner(System.in);
System.out.print("Zahl1: ");
try
{
zahl1 = tastaturScan.nextInt();
}
catch(InputMismatchException e)
{
System.out.println("Es wurde eine Falsche eingabe detektiert.");
System.out.println(e.getMessage());
System.out.println("Bitte nur ganze Zahlen eingeben [z.B. 25]");

System.out.println("Programm beendet.");
System.exit(0);
}

System.out.print("Zahl2: ");
try
{
zahl2 = tastaturScan.nextInt();
}
catch(InputMismatchException e)
{
System.out.println("Es wurde eine Falsche eingabe detektiert.");
System.out.println(e.getMessage());
System.out.println("Bitte nur ganze Zahlen eingeben [z.B. 25]");
}

System.out.println("Summe = " + (zahl1+zahl2));
try //AUFGABE 5: Versuche die Berechnung durchzuführen
{
System.out.println("Quotient = " + ((double)zahl1/zahl2));
}
catch (ArithmeticException e) //AUFGABE 5: Abfangen, falls diese nicht durchführbar ist.
{
System.out.println("Es wurde ein Mathematischer Fehler gefunden. (Quotient)");
System.out.println(e.getMessage());
System.out.println("Vermutlich wurde durch 0 geteilt.");
}

try //AUFGABE 5: Versuche die Berechnung durchzuführen
{
System.out.println("Quotient = " + zahl1/zahl2);
}
catch (ArithmeticException e) //AUFGABE 5: Abfangen, falls diese nicht durchführbar ist.
{
System.out.println("Es wurde ein Mathematischer Fehler gefunden. (Quotient)");
System.out.println(e.getMessage());
System.out.println("Vermutlich wurde durch 0 geteilt.");
}
tastaturScan.close();

}

}

Beispielausgabe:

Zahl1: 25
Zahl2: g
Es wurde eine Falsche eingabe detektiert.
null
Bitte nur ganze Zahlen eingeben [z.B. 25]
Summe = 25
Quotient = Infinity
Es wurde ein Mathematischer Fehler gefunden. (Quotient)
/ by zero
Vermutlich wurde durch 0 geteilt.

(Vodka Verkauf)

package Fehlerbehebung;

import java.io.BufferedReader; //Automatisch importieren lassen
import java.io.IOException;
import java.io.InputStreamReader; //Solved

public class Debug3 { static //Eigl Altbersbeschränkung

int alter; //AUFGABE 5: Variable etwas früher eingeführt.

public static void main(String[] args) throws IOException { //IOException Wieder automatisch hinzugefügt
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);

System.out.println("Einen Vodka bitte!");
System.out.println("Wie alt bist du?");
String eingabe = br.readLine();
try //AUFGABE 5: Versuche die Eingabe in einen Integer zu laden.
{
alter = Integer.parseInt(eingabe);
}
catch (NumberFormatException e) //AUFGABE 5: Sollte es nicht gehen, werden hier einige Hinweise zum Fehler ausgegeben.
{
System.out.println("Es wurde eine Falsche eingabe detektiert.");
System.out.println(e.getMessage());
System.out.println("Bitte nur ganze Zahlen eingeben [z.B. 25]");
}

if(alter >= 18)
{
System.out.println("Hier ist dein besteller Vodka.");
}
else
{
System.out.println("Kein Vodka für dich. Wie wär's mit Milch Bubi?");
}
System.out.println("Programmende.");
}

}


Beispielausgabe:

Einen Vodka bitte!
Wie alt bist du?
drölf
Es wurde eine Falsche eingabe detektiert.
For input string: "drölf"
Bitte nur ganze Zahlen eingeben [z.B. 25]
Kein Vodka für dich. Wie wär's mit Milch Bubi?
Programmende.
     
 
what is notes.io
 

Notes.io is a web-based application for taking notes. You can take your notes and share with others people. If you like taking long notes, notes.io is designed for you. To date, over 8,000,000,000 notes created and continuing...

With notes.io;

  • * You can take a note from anywhere and any device with internet connection.
  • * You can share the notes in social platforms (YouTube, Facebook, Twitter, instagram etc.).
  • * You can quickly share your contents without website, blog and e-mail.
  • * You don't need to create any Account to share a note. As you wish you can use quick, easy and best shortened notes with sms, websites, e-mail, or messaging services (WhatsApp, iMessage, Telegram, Signal).
  • * Notes.io has fabulous infrastructure design for a short link and allows you to share the note as an easy and understandable link.

Fast: Notes.io is built for speed and performance. You can take a notes quickly and browse your archive.

Easy: Notes.io doesn’t require installation. Just write and share note!

Short: Notes.io’s url just 8 character. You’ll get shorten link of your note when you want to share. (Ex: notes.io/q )

Free: Notes.io works for 12 years and has been free since the day it was started.


You immediately create your first note and start sharing with the ones you wish. If you want to contact us, you can use the following communication channels;


Email: [email protected]

Twitter: http://twitter.com/notesio

Instagram: http://instagram.com/notes.io

Facebook: http://facebook.com/notesio



Regards;
Notes.io Team

     
 
Shortened Note Link
 
 
Looding Image
 
     
 
Long File
 
 

For written notes was greater than 18KB Unable to shorten.

To be smaller than 18KB, please organize your notes, or sign in.