Binärkonvertiereung

Kira_newbie

Aktives Mitglied
Huhu liebes Java Forum.
Ich brauche mal wieder eure Hilfe.
und zwar soll ich eine Klasse schreiben, die Dezimalzahlen in Binärzahlen konvertiert.

Attribute: Buffered Reader in; (kein scanner)

Methode 1:
Java:
 int readInt() throws NumberFormatException
NumberFormatException soll geworfen werden, wenn das Eingegebene keine ganze Zahl ist. IOExceptions müssen abgefangen werden. (den Teil kann ich nicht so richtig...)

Methode 2: [JAVA void binConvert(int n) [/code] ---> soll rekursiv arbeiten, und KEINE schleife verwenden

die main-Methode soll den Bediener (mit einer Schleife) auffordern eine Zahl einzugeben mittels
Java:
readInt()
Das Programm soll beendet werden, wenn der bediener eine Zahl kleiner / gleich 0 eingibt.

soweit bin ich bisher gekommen:
Java:
 import java.io.*;

public class BinaryConverter{

	
  public static void main(String args[]) throws IOException{
	  		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
	  			System.out.println("Enter the decimal value:");
	  			
	  			String hex = in.readLine();
	  			int i = Integer.parseInt(hex);  
	  			String by = Integer.toBinaryString(i);
	  			System.out.println("Binary: " + by);
  			}
}

würde mich freuen, wenn mir jemand weiterhelfen könnte :)
 

Kevin94

Top Contributor
Das mit dem Rekursiven spielt wahrscheinlich auf die den Algorithmus um eine Dezimalzahl in eine Binärzahl umzuwandeln an.
Ich beschreib ihn mal nicht rekursiv:
Java:
int x;
String erg="";
while(x>1)
{
    erg= (x%2)+erg;
    x=x/2;
}

soweit zu toBinaryString, ich hoffe das hilft dir weiter.
Und jetzt zum Rest: ich vermute mal du sollst dir mit readInt einen gekürzten Scanner selber schreiben. Je nachdem ob die Methode statisch sein soll oder nicht musst du entweder den BufferedReader als statische Variable deklarieren oder in der main-Methode deine Klasse instanziieren und den BufferedReader als Instanzvariable deklarieren. In die readInt Methode kommen dann einfache die Zeilen 10/11 rein und darum halt noch einen try-catch Block der die IOException abfängt. Also so:
[Java]
public /*static*/ int readInt() trhows NumberFormatException
{
try
{
String hex = in.readLine();
int i = Integer.parseInt(hex);
}
catch(IOException ex){}//Ignore
}
[/Java]

Ich denke das mit der wiederhohlung in einer while-Schleife solltest du selber hinkriegen.
 

Kira_newbie

Aktives Mitglied
naja also so wirklich auf den Trichter bin ich noch nicht gekommen....
ich brauche auf jeden fall noch ne void binConvert(int n) um die Zahl auszugeben.
hab nen Lösungstipp in dem steht, dass ich für die Lösung 2 Anweisungen brauche....

Java:
import java.io.*;

public class BinaryConverter{

	
  public static void main(String args[]) throws IOException{
	  		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
	  			System.out.println("Enter the decimal value:");
	  			
	  			public static int readInt() throws NumberFormatException{
	  			
	  			    try
	  			    {
	  			        String hex = in.readLine();
	  			        int i = Integer.parseInt(hex);  
	  			    }
	  			    catch(IOException ex){}
	  			}	  				
	  			
	  			String hex = in.readLine();
	  			int n = Integer.parseInt(hex);  
	  			String by = Integer.toBinaryString(n);
	  			System.out.println("Binary: " + by);
  			}
}
 

Baum17

Mitglied
Integer.toBinaryString(n) darf man nicht benutzen!

Ich hab die aufgabe gemacht. Die ist voll einfach.

PS: ich hab das Buch gelesen. Das bringt gar nichts
 

Kira_newbie

Aktives Mitglied
also, ich habs jetzt nochmal probiert, und bin auf einen anderen Lösungsansatz gekommen.
Bringe es aber nicht hin die Anforderungen 1:1 umzusetzen
- es fehlt das abfangen der Exception
- ich sollte eigentlich eine NumberFormatException werfen (wenn die eingegeben Zahl keine ganze Zahl ist)
- das ganze soll OHNE Schleife gehen...

Java:
import java.io.IOException;
import java.io.InputStreamReader;

public class BinaryConverter{
 
          public static void main(String[] args){  throws IOException
           int dec;
           String bin, conv;
                    int a=1;
                    while (a==1)
                    {
           BufferedReader buff = new BufferedReader(new InputStreamReader(System.in));
            
           System.out.println("Bitte zu berechnende Dezimalzahl eingeben" + "\n");
           bin = buff.next();
           dec = Integer.parseInt(bin);
           int max[] = new int[];
           int i = 0;
 
           if (dec/2!=0 || dec==1)
           {
              while(dec!=1)
              {
                 max[i]=dec%2;
                 dec = dec/2;
                 i++;
               }
                 max[i]=1;
            }
                    System.out.print("Die Binärzahl lautet"  );
            for (int z=i; z>0; z--)
            {
               System.out.print(max[z]);
            }
 
                   System.out.println("\n" + "Drücke 1 um eine weitere Zahl zu berechnen. Drücke 0 um das Programm zu beenden:");
                          String reply=buff.next();
                    int b=Integer.parseInt(reply);
                     if(b==1)
                    a=1;
                    else
                    a=0;
                    }
          }

Voraussetzungen in der Aufgabe:
- Attribut BuffaredReader in
- KEIN scanner
- Methode int readInt() throws NumeberFormatException
- IOEceptions sollen abgefangen werden
- Methode void binConverter(int n) <---- soll rekursiv arbeiten
- jeder rekursive Aufruf soll eine Stelle der Binärzahl ausgeben
- main-Methode in der Benutzer per Schleife zur eingabe einer Dezimalzahl aufgefordert wird
- mittels readInt() eingelesene Zahl soll konvertiert und ausgegeben werden
- gibt der Benutzer eine ZAhl kleiner gleich 0 ein endet das Programm
 

Kevin94

Top Contributor
und jetzt das ganze in Methoden auslagern. Du must die NumberFormatException übrigens nicht selber werfen, das tut Integer.parseInt() schon für dich. Was das Abfangen angeht hab ich schon gepostet wie's geht.
Was deine Schleife angeht, ist das konstrukt etwas umstänlich. Im allgemeinen macht man das so (wenn die Schleife nicht aus einem anderen Thread gestoppt werden soll):
Java:
while(true)
{
    //tu irgendwas
    if(abbruch)
    {
         break;
    }
}
Auf deine Situation bezogen:
Java:
while(true)
{
    //der rest
    int dec=Integer.parseInt(input);
    if(dec<0)
    {
         break;
    }
}


Was den rekursiven ansatz angeht, musst du auch mal selber denken. Kleiner Tipp: Die Methode führt einen durchlauf der Schleife durch und gibt dann das was der Erneute Aufruf zurückgibt plus das Ergennis zurück.
 

Kevin94

Top Contributor
Dann halt in Code:
Java:
public String toBinaryString(int zahl)
{
   //tu was
   return toBinaryString( ? )+ergebnis;
}

In das ganze muss natürlich noch ne Abbruchbedingung rein.
 
G

Gast2

Gast
Guck mal hier und lass dich inspirieren:

Java:
import java.util.ArrayList;
import java.util.List;
 
public class BinaryConverter{
 
		  static List<Integer> binary = new ArrayList<Integer>();
		  
          public static void main(String[] args){
        	  
        	  printBinary(255);
        	  printBinary(123);
        	  printBinary(178);
        	  printBinary(7);
          }
 
          public static void printBinary(int n){
        	  binConverter(n);
        	  for (int i = binary.size()-1 ; i >= 0; i-- ){
        		  System.out.print(binary.get(i));
        	  }
        	  System.out.println();
        	  binary.clear();
          }
          
          public static void binConverter(int n){
        	  binary.add(n % 2);
        	  if(n / 2 !=0){
        		  binConverter(n / 2);
        	  }
          }
}

Übringens [c]void binConverter(int n)[/c] vorzugeben ist ziemlicher Blödsinn...
 

Kira_newbie

Aktives Mitglied
Java:
public String toBinaryString(int zahl)
	{
	   if (zahl<=0) throw new Exception("Zahl muss positiv sein");
	   return toBinaryString( max )+ergebnis;
	}

so?....
 

Kira_newbie

Aktives Mitglied
Übringens [c]void binConverter(int n)[/c] vorzugeben ist ziemlicher Blödsinn...[/QUOTE]

sag das nicht mir... es ist auch blödsinn keine schleife zu benutzen... aber ich mache die Aufgaben nicht ;)
 
G

Gast2

Gast
Mach erstmal alles nacheinander....

Zuerst bau deine Dezimal - Binär Umwandlung, da hilft dir was ich dir geposted habe, dann baue eine eingabe drum rum, dann fange die möglichen Fehler der Eingabe ab.

Volia - fertig.

Nicht wild durcheinander arbeiten. Das bringt nix.
 

Kira_newbie

Aktives Mitglied
ich blicke solangsam echt überhaupt nichtmehr durch... dadurch, dass es so viele methoden und vorgaben gibt bin ciht total verwirrt... ich habe noch nie etwas rekursiv programmiert und verstehe die logik dahinter auch nicht wirklich.... :(
ich weiß, dass jede zahl der berechnung ausgegeben werden soll, so dass das Beispiel z.B. dem hier ähnelt, wenn ich Dezimal in Binär umwandle.
Die Dezimalzahl 10 wird ins 2er-System umgewandelt

Gehe nach folgendem Verfahren vor:
(1) Teile die Zahl mit Rest durch 2.
(2) Der Divisionsrest ist die nächste Ziffer (von rechts nach links).
(3) Falls der (ganzzahlige) Quotient = 0 ist, bist du fertig,
andernfalls nimm den (ganzzahligen) Quotienten als neue Zahl
und wiederhole ab (1).

10 : 2 = 5 Rest: 0
5 : 2 = 2 Rest: 1
2 : 2 = 1 Rest: 0
1 : 2 = 0 Rest: 1

Resultat: 1010
 
G

Gast2

Gast
sag das nicht mir... es ist auch blödsinn keine schleife zu benutzen... aber ich mache die Aufgaben nicht ;)

Das sehe ich nicht so. Durch den Verbot der Schleife bist du dazu gezwungen dich mit Rekursion auseinander zu setzten.

Das andere:

Siehe diesen Codeschnipsel und vergleiche:

Java:
import java.util.ArrayList;
import java.util.List;
 
public class BinaryConverter{
 
		  static List<Integer> binary = new ArrayList<Integer>();
		  
          public static void main(String[] args){
        	  
        	  // später diesen teil ersetzten
        	  int eingabe = 255;
        	  
        	  binConverter(eingabe);
        	  System.out.println();
        	  
        	  eingabe = 8;
        	  
        	  binConverter(eingabe);
          }
 
 
          
          public static void binConverter(int n){
        	  System.out.print(n % 2);
        	  if(n / 2 !=0){
        		  binConverter(n / 2);
        	  }
          }
}

Da ich ja in der rekursiven Funktion zumindest in dem Modulo Verfahren immer eine Zahl ausgebe bekomme ich die Binärzahl "andersherum" und müsste sie eigentlich noch einmal drehen. Das geht aber nur wenn ich sie zwischenspeicher also wäre ein return Wert der Funktion doch sehr wünschenswert, siehe hier:

Java:
public class BinaryConverter{
 
          public static void main(String[] args){
        	  System.out.println(new StringBuilder(binConverter(11)).reverse().toString());
          }
 
          public static String binConverter(int n){ 
        	  String binaer = (n % 2)+"";
        	  if(n / 2 !=0){
        		  binaer += binConverter(n / 2);
        	  }
        	  return binaer;
          }
}
 
Zuletzt bearbeitet von einem Moderator:

Kira_newbie

Aktives Mitglied
okay, ich habe jetzt nochmal ganz von vorne angefangen, und versucht mich an der Aufgabenstellung entlang zu hangeln.
Java:
import java.io.BufferedReader;
import java.util.ArrayList;
import java.util.List;

public class BinaryConverter{
	
		int Zahl;															
		
		void binConverter(int n){ 											//void ist vorgegeben!!! - soll die Binärzahl auf dem Bildschirm ausgeben
        String binaer = (n % 2)+"";											//rekursive Aufruf soll eine Stelle ausgeben
        if(n / 2 !=0){
            binaer += binConverter(n / 2);
        }
        return binaer;
    }
	
	BuffaredReader in;{ 													//Attribut
																			//Tastatureingabe lesen (Konstruktor)?
	}
	int readInt() throws NumberFormatException{	
		if (Zahl<=0){
			throw new NumberFormatException("Zahl muss posoitiv sein");			
			else{
		if(Zahl>0);															// was muss hier hin?
			}																// IO Exceptions abfangen?
			
		}
			}
		 
     public static void main(String[] args){								//main-Methode soll auffordern Zahl einzugeben (Schleife)
          }        															//mittels readInt() eingelesene Zahl konvertieren
}																			//Falscheingaben behandeln
 

Kira_newbie

Aktives Mitglied
ich hab jetzt noch nen Teil:

Java:
int readInt() throws NumberFormatException{	
		if (Zahl<=0){
			throw new NumberFormatException("Zahl muss posoitiv sein");			
				else{
					return Zahl; 
			}
 

Kevin94

Top Contributor
Also deine Formatierung ist graußig und wenn du zwischendurch mal Kompilieren würdes, würden dir auch die Tipp- und Logikfehler auffallen.
Ich schreib mal ins reine was du im Moment hast
 

Kira_newbie

Aktives Mitglied
ich weiß, dass es sich nicht kompilieren lässt. drum zeig ichs euch ja :)

um die Formatierung kann ich mich kümmern, wenns den überhaupt mal läuft
 
M

Marcinek

Gast
Also Du hast mehrere Probleme:

1. Dein Wissen über die Grundlagen von Java ist zu gering, als das dir das Forum hier helfen kann.

2. Du weißt nicht wie man ein Forum benutzt.

3. Steht die Lösung schon im Thread. (was mich wieder zu Punkt 2 bringt)

4. Bisschen mehr Eigeninitative. Das wird doch ein 1000 beiträge Spam Thread "kann das nicht kompilieren".

Alle Kompilermeldungen lassen sich via Google lösen. ALLE.
 

Kevin94

Top Contributor
So und hier mal der gereinigte und von mir ergänzte Code:
Java:
import java.io.BufferedReader;

public class BinaryConverter
{
    BufferedReader in;//Attribut
    
    public BinaryConverter(BufferedReader _in)
    {
        in=_in;
    }
    
    void binConverter(int n)//void ist vorgegeben!!! - soll die Binärzahl auf dem Bildschirm ausgeben
    {//Die Method hab ich jetzt geschrieben
        if(n==0) return; //Abbruchbedingung
        binConverter(n/2); //Rekursion
        System.out.print(n%2);        
    }

    int readInt() throws NumberFormatException // Die hättest du nur abschreiben müssen, hatte ich schon mal gepostet
    {
        try
        {
            String dec = in.readLine();
            return i = Integer.parseInt(hex);  
        }
        catch(IOException ex){return -1;}//Dadurch sollte das Prog sich beenden
    }

    public static void main(String[] args){ //Die musst du jetzt noch schreiben
    }
}

Edit: Ich gebe Marcinek in den Punkten 1. und 4. Recht.
Was die Lösung angeht, bis vor diesem Post nicht wirklich und auch mit diesem hat er immer noch keine abgabefertige Lösung
 
Zuletzt bearbeitet:

Kira_newbie

Aktives Mitglied
okay. ich habe es jetzt folgendermaßen gelöst:

Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class BinaryConverter
{
    BufferedReader in;
    
    public BinaryConverter(BufferedReader in)
    {
        this.in=in;
    }
    
    void binConverter(int n)
    {
        if(n==0) return; 
        binConverter(n/2); 
        System.out.print(n%2);        
    }
 
    int readInt() throws NumberFormatException 
    {
        try
        {
        	return Integer.parseInt(in.readLine());
		}
        catch(IOException ex){return -1;}
    }
 
    public static void main(String[] args)throws IOException{ 
    	  	
    	
    	/**
    	 * Schleife soll zur Eingabe einer Zahl dienen.
    	 * mittels readInt() eingelesene Zahl soll konvertiert und ausgegeben werden.
    	 * Falscheingaben sollen behandelt werden.
    	 * bei Eingabe von Zahl kleiner, gleich 0 soll das Programm beendet werden
    	 */
		 
		 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		 BinaryConverter bc = new BinaryConverter(br);
		 int n=bc.readInt();
		 
		 while(n>0){
			bc.binConverter(n);			 
			n = bc.readInt();	 
		 }
		 	 
    }
}

Problem ist nun aber, dass ich die Aufgabe nicht erfülle, da jede Berechnung ausgegeben werden soll.
Das ganze soll am ende ca. so aussehen:
10 : 2 = 5 Rest: 0
5 : 2 = 2 Rest: 1
2 : 2 = 1 Rest: 0
1 : 2 = 0 Rest: 1

Resultat: 1010

Das Ergebnis wird mir ja nun ausgegeben, aber die Zwischenberechnungen fehlen noch.
(Sind die Excaptions in meiner main-Methode richtig behandelt?)
 

Kevin94

Top Contributor
das throws bei der main-Method kannst du komplett weglassen, da nirgends (in main) eine IOException geworfen wird, sondern nur die NumberFormatException in readInt(), die aber eine sog. RuntimeException ist, d.h. man muss sie nicht angeben. Wenn du sie aber behandel willst dann gleich mit try-catch.

Was die Ausgabe angeht: du musst deine read int Methode umschreiben, auserdem brauchst du, beim Rückgabetyp void der methode binConverter noch eine Instanzvariable vom Typ String, in der du das Ergbnis zwischenspeicherst und dann bevor du die Rekursion abbricht ausgiebst.
 

Kira_newbie

Aktives Mitglied
okay. vielen Dank erstmal, dass du mir wieder hilfst :)
in der ersten Aufgabe steht bei mir: "IOExceprions müssen abgefangen werden"
in der Aufgabe zur main-Methode steht: "Falscheingaben müssen korrekt behandelt werden" <---- was das genau heißt weiß ich auch nicht.

mit der Instanzvariabel bin ich leider überforder (habe sowas noch nie gesehen geschweigenden selbst gemacht)
 

Kevin94

Top Contributor
OK, also ich wiederhol nochmal meine Aufforderung dir mal ein Java Buch anzuschauen.
Und als kurze Erklärung: Du nutzt bereits eine Instanzvariable nämlich [c]BufferedReader in;[/c].
Die IOException wird auc abgefangen und zwar in Zeile 27 des von dir zuletzt geposteten Codes.

Mit "Falscheingaben müssen korrekt behandelt werden" ist gemeint, dass die NumberFormatException auch abfangen sollst. (Die wird von Integer.parseInt() geworfen, wenn du einen flaschen String übergibst, z.B. "asdf")
 

Kira_newbie

Aktives Mitglied
ok. die Exception werde ich wohl hinbegkommen.
müsste meine 2. Instanzvariabel so aussehen:?
Java:
public class BinaryConverter
{
    BufferedReader in;
    String Ergebnis;
 

Kira_newbie

Aktives Mitglied
Baum du gehst mir auf n keks.
Ich glaube hier weiß jeder, dass du bisher noch ga nix hast und am ende einfach wieder den Code hier koppierst.... aber okay ;)
 

Kira_newbie

Aktives Mitglied
ok. also ich bin jetzt so weit, dass mir die einzelnen zwischenschritte angegeben werden (jetzt fehlt aber das Ergebnis)
Java:
import java.awt.Point;
import java.io.*;
 
public class BinaryConverter
{
    BufferedReader in;
     
    public BinaryConverter(BufferedReader in)
    {
        this.in=in;
    }
    
    void binConverter(int n)
    {
    	if(n==0) return; 
        binConverter(n/2);
        System.out.println(   n + "/ 2" + " ------> Rest" + n%2 ); 
    }
 
    int readInt() throws NumberFormatException 
    {
    	System.out.print("\nGeben sie hier ihre zu berechnende Dezimalzahl ein:");
		Object p = new Point();
        try
        {
        return Integer.parseInt(in.readLine());
		}
        catch(IOException ex){System.out.println("Kann nicht von Tastatur lesen!");
        }
        return (Integer) p;
        
     }               
 
 
    public static void main(String[] args){ 
    	 
      	 System.out.println("****BinaryConverter by XXX****");	 
      	
		 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		
		 BinaryConverter bc = new BinaryConverter(br);
		 int n=bc.readInt();
		 
		 while(n>0){
		    System.out.println("Die umgerechnete Binärzahl lautet:");
			bc.binConverter(n);	
			n = bc.readInt();	 
			}
		 System.out.println("\nDas Programm wurde beendet!");
	}
}
und die Exceptions funktionieren immer noch nicht....

Kleinere schönheitskorrekturen:
- wie kann ich die Berechnung des Rest so ausgeben, dass die eingegeben Zahl ganz oben (und nicht wie im mom ganz unten) steht?
- wie kann ich die Formatierung so einstellen, dass das "Rest" immer auf gleicher höhe steht egal ob die Zahl 5000 oder 5 ist?
 
Zuletzt bearbeitet:
M

Marcinek

Gast
Nach der while schleife kannst du das Ergebnisse ausgeben.

Wieso denkst du, dass deine exceptions nicht funktionieren? - weiß St du was das ist?

Man kann in der console nur unten einfügen.

Mit stringformat
 

Kevin94

Top Contributor
Es kommt auf die Reienfolge der Anweisungen in binConvert() an. Wenn das System.out.println("Rest usw") ganz am Anfang steht (vor der Rekursion) wird, das ganze in der richtigen Reihenfolge ausgegeben. Auserdem ist mir grad aufgegangen, das es auch ohne zusätzliche Instanzvariable geht:
Java:
void binConverter(int n)
    {
        if(n==0)
        {
           System.out.print("Das Ergebnis ist: ");
           return; 
        }
        System.out.println(   n + "/ 2" + " ------> Rest" + n%2 ); 
        binConverter(n/2);
        System.out.print(n%2);
    }
 

Dekker

Bekanntes Mitglied
Du solltest vielleicht mal erklären, was du bei der Exception erwartest. Außerdem würde mich interessieren was der abenteuerliche Teil mit dem Point soll. Ich bezweilfe kaum das du einen 2D Punkt für deine Berechnung brauchst.

Allgemein kommt mir dein Programmierstil so vor, als würdest du irgendwo was lesen und das dann einfach mal reinkloppen in deinen Code. Du solltest dir wirklich überlegen Java von Grund auf zu lernen und die ersten Kapitel der Javainsel durcharbeiten.
 

Kira_newbie

Aktives Mitglied
okay, also vielen Dank erstmal :)
@ Marcinek ich denke, dass die Exceptions nicht funktionieren, weil ichs ausprobiert habe.
- wenn ich z.B. abc anstelle von 123 eingebe bekomme ich nur den roten exception text, und ich möchte, dass da dan z.B. kommt "bitte geben sie eine gültige Zahl ein"

@Kevin94 vielen Dank, den Schritt habe ich verstanden :)

code sieht nun folgendermaßen aus:
Java:
import java.awt.Point;
import java.io.*;
 
public class BinaryConverter
{
    BufferedReader in;
    String temp;
     
    public BinaryConverter(BufferedReader in)
    {
        this.in=in;
    }
    
    void binConverter(int n)
    {
        if(n==0)
        {
           System.out.print("\nDie umgerechnete Binärzahl lautet:");
           return; 
        }
        System.out.println(   n + "/ 2" + " ------> Rest" + n%2 ); 
        binConverter(n/2);
        System.out.print(n%2);
    }
 
    int readInt() throws NumberFormatException 
    {
    	System.out.print("\n\nGeben sie hier ihre zu berechnende Dezimalzahl ein:");
		Object p = new Point();
        try
        {
        return Integer.parseInt(in.readLine());
		}
        catch(IOException ex){System.out.println("Kann nicht von Tastatur lesen!");
        }
        return (Integer) p;
     }               
 
 
    public static void main(String[] args){ 
    	 
      	 System.out.println("****BinaryConverter by XXX****");	 
      	
		 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		
		 BinaryConverter bc = new BinaryConverter(br);
		 int n=bc.readInt();
		 
		 while(n>0){
		    bc.binConverter(n);	
			n = bc.readInt();	 
	 }
		 System.out.println("\n~~~~~ Das Programm wurde beendet! ~~~~~");
	}
}

-die frage ist jetzt, ob man das mit dem point nicht irgendwie anderst lösen kann? - ich meine es funktioniert, aber dass es ziemlich abenteuerlich ist gebe ich offen zu

- dan gehts noch um die exceptions (die wie oben beschrieben arbeiten sollten)

- und bei der Ausgabe der Zwischenergebnisse hätte ich es am liebsten so:

10/ 2 = 5 ------> Rest0
5/ 2 = 2 ------> Rest1
2/ 2 = 1 ------> Rest0
1/ 2 = 0 ------> Rest1

(mit zwischenergebnissen) <<<--- ist das irgendwie möglich? (am liebsten sollte das "Rest" auch noch auf gleicher höhe stehen)
 
Zuletzt bearbeitet:
M

Marcinek

Gast
Naja du wirfst die Exception statt sie zu catchen und wenn du sie weiter wirfst, dann behandelst du sie nicht weiter.

Das mit dem Point ist einfach falsch. Und da bekommst du eine ClassCastException, wenn dieser Code einmal durchlaufen wäre.

Hier sollte die Numberformat Exception gefangen werden und nicht eine IOException, die hier vermutlich
garnicht auftreten kann.

Zum formatieren: String (Java 2 Platform SE 5.0)

KA warum man dafür nicht wenigstens google suche nutzen kann.

Rein aus interesse: Ist das ein Kernfach oder schule oder Nebenfach? - Dir fehlen massenweise Basics. Nimm ein Buch und lese Exceptions und Kontrollstrukturen nach.

Gruß,
Martin
 
Zuletzt bearbeitet von einem Moderator:

Kira_newbie

Aktives Mitglied
Das mit dem Point ist einfach falsch. Und da bekommst du eine ClassCastException, wenn dieser Code einmal durchlaufen wäre.

Hier sollte die Numberformat Exception gefangen werden und nicht eine IOException, die hier vermutlich
garnicht auftreten kann.

Schön und gut, aber meine Aufgabenstellung verlangt von mir : "IOExceptions müssen abgefangen werde"
und int readInt() throws NumberFormatException ist auch vorgegeben
und am Ende "Falscheingaben müssen korrekt behandelt werden"
Aus dieser Aufgabenstellung geht für mich hervor, dass ich die Number formatException werfe, und eine IOException abfange.

Wieso ist das mit dem point falsch? - es funktioniert doch einwandfrei, oder übersehe ich etwas?



LG Kira ;)
 
Zuletzt bearbeitet:
M

Marcinek

Gast
1. OK - Du sollst IO fangen und NFE (NumberFormatException) werfen. Aber dann musst du diese wieder fangen indem die methode readInt () wieder in einen try... catch() packst.

Mit einer while() schleife kann man das solange machen bis readInt() keine Exception wirft . Natürlich muss man hier nachdenken, wie man das geschickt macht, so dass die while beendet wird, wenn eine korrekte Zahl da drin steht.

---

Point ist nunmal kein Integer. (Stichwort Vererbung). Dies wird von Java nur zur Laufzeit analysiert und nicht während des compilierens. Weil Java keine abwärtshierarchie berechnet.

Wenn du also ein Point => Integer casten würdest (zur Laufzeit!!) dann würdest du hier einen Fehler bekommen. Der Code wird aber niemals durchlaufen, weil dafür eine IOException hätte kommen müssen, die einfach nicht kommt.

Lösung ist hier: Mach aus dem Point ein INteger. Fertig.
 

Kira_newbie

Aktives Mitglied
noch habe ich ja ga nichts geändert.
es funktioniert einwandfrei sop wie es soll.
aber ich weiß nicht ob ich die exceptions so fange und werfe wie es in der aufgabe gefordert ist?

und außerdem würde ich bei der Ausgabe noch gerne die zwischenergebnisse hinter der rechnung stehen haben, dann wäre ich wunschlos glücklich :)
 

Kevin94

Top Contributor
Kira_newbe hat gesagt.:
Java:
int readInt() throws NumberFormatException 
    {
        System.out.print("\n\nGeben sie hier ihre zu berechnende Dezimalzahl ein:");
        Object p = new Point();
        try
        {
        return Integer.parseInt(in.readLine());
        }
        catch(IOException ex){System.out.println("Kann nicht von Tastatur lesen!");
        }
        return (Integer) p;
     }

Kevin94 hat gesagt.:
Java:
int readInt() throws NumberFormatException 
    {
        try
        {
            return Integer.parseInt(in.readLine());
        }
        catch(IOException ex){return -1;}
    }

Wenn das für dich nicht verändert ist brauchst du definitiv ne Brille.
 

Neue Themen


Oben