Problem mit Array

friedmann

Mitglied
Hallo,
ich muss für die Uni ein Programm schreiben, welches Dezimalzahlen in Dualzahlen wandelt.
Jedoch komm ich nicht auf den Fehler,denn es werden nur irgendwelche Zeichen ausgegeben. Hoffentlich kann mir jemand weiterhelfen.
Danke im vorraus 🙂

Java:
public class DualZ {

	private static int[] printDual(int eingabe){
		int i;
		int k=eingabe;
		for(i=0;k!=0;i++){
			k/= 2;
		}//Array länge bestimmen
		
		int[] rest;
		rest = new int[i];
		for(int j=0;eingabe!=0;j++){
			rest[j]= eingabe%2;
			eingabe/=2;
		}//Dualzahl in Array schreiben
		return rest;	
	}//printDual

	public static void main(String[] args){
		System.out.println("Bitte geben sie eine positive ganze Zahl ein:");
		int Zahl=  new java.util.Scanner(System.in).nextInt(); 
		System.out.println(printDual(Zahl));
	}//main
	
}//class
 
Java:
for(i=0;k!=0;i++){
            k/= 2;
        }//Array länge bestimmen

Das Ergebnis einer Division kann nie 0 sein.

Es müßte viel einfacher gehen.
Java:
 import javax.print.DocFlavor.STRING;


public class binaer {


    
   
	private static String  printDual(int eingabe){
        String binz= "";
        int i;
        int k=eingabe;
        for (i=0;k>(i*i);i++){
        	if ((k&(i*i))>0){
        		binz="0"+binz;
        	}else{
        		binz="1"+binz;
        	}
        }
        return binz;
	}
    
           
       
    public static void main( String[] args ){
        System.out.println("Bitte geben sie eine positive ganze Zahl ein:");
        int Zahl=  new java.util.Scanner(System.in).nextInt();
        System.out.println(printDual(Zahl));
    }//main
   
}//class


In #27 bekomme ich eine Fehlermeldung in Eclipse (Ressource leak)
 
Zuletzt bearbeitet:
Wieso eigentlich so kompliziert ???

[TIPP]Die Wrapperklasse Integer bietet extra eine Methode .toBinaryString();[/TIPP]

Java:
package versuche;

import java.util.Scanner;


public class Binaer{

	static void umwandeln(){
		
		int dezimalZahl = new Scanner(System.in).nextInt(); // "Resource leak" da anonyme Scanner Instanz, lässt sich aber úmgehen


		System.out.println(Integer.toBinaryString(dezimalZahl));
			
	}
	
	public static void main(String[]args){
		Binaer.umwandeln();
	}
}
Ein / Ausgabe :

354 //Eingabe
101100010 //Ausgabe

so lässt sich der rescource leak umgehen :

Java:
package versuche;

import java.util.Scanner;


public class Binaer{

	static void umwandeln(){
		
		Scanner sc = new Scanner(System.in);
		
		int dezimalZahl = sc.nextInt();
		sc.close();
		
		System.out.println(Integer.toBinaryString(dezimalZahl));
			
	}
	
	public static void main(String[]args){
		Binaer.umwandeln();
	}
}


oder MUSST du es mit Schleifen machen ?
 
Zuletzt bearbeitet:
Java:
int i;
        int k=eingabe;
        for(i=0;k!=0;i++){
            k/= 2;
        }//Array länge bestimmen
Diesen Teil hab ich schon getestet und er funktioniert auch so wie ich mir das vorstellte, da k ja ein integer Wert ist wird ja immer abgerundet.

Verdammt die Aufgabenstellung müsste ich schon etwas näher erläutern. :bloed:
Also zur Lösung der Aufgabe soll nur die Rekursion verwendet werden (Bei mir ist das jetzt nicht der Fall) und es dürfen nur die mathematischen Funktionen, Division und Rest verwendet werden. Außerdem sollte die Funktion in einer eigenen Methode stehen.

Lieg ich mit meiner "Lösung" komplett falsch oder hab ich da jetzt nur einen Fehler gemacht.
Das Programm wird ausgeführt, jedoch kommen da immer solche Ergebnisse dabei raus: [I@406199.
 
Das liegt daran weil du ein integer array ausgibst. Sowas stellt sich halt so dar...

EDIT: Deine Methode scheint korrekt zu funktionieren. Allerdings müsstest du das Array "rückwärts" ausgeben. Also erst das letzte Element, dann das vorletzte usw.
 
Zuletzt bearbeitet:
Hallo friedmann,

muss deine Methode ein int[] zurückgeben? Wenn nicht, kannst du das int[] in einen String umwandeln:
Java:
String s = "";
for(int i : rest)
{
	s += "" + i;
}
return s;
MfG
 
Wenn du versuchst dein Array mit einem System.out.println() auszugeben, dann macht das programm alles richtig - deine Variable des Arrays ist ja ein verweis in den Heap Speicher. Du speicherst also nur, wo das Array genau im Speicher liegt. Willst du die einzelnen Elemnte allerdings ausgeben schlage ich vor, dass du in einer Schleife drübergehst

irgentwie so
Java:
public void printIntegerArray(int[] a){
  for(int i = 0; i < a.length; ++i){
    System.out.print(a[i]+" ");
  }
  System.out.println();
}

nur kurz am rande:
Java:
int i;
int k=eingabe;
  for(i=0;k!=0;i++){
    k/= 2;
  }
benutz mal nicht i++ sonder ++i. hat was mit performance zu tun
 
Das ist das erste mal dass ich höre dass ++i in einer for-Schleife schneller sein soll. i++ ist für mich hier der Standard und wird in so ziemlich allen Beispielen verwendet. Wenn du Quellen hast die deine Aussage bestätigen wäre ich nicht abgeneigt mich da mal einzulesen.
 

Neue Themen


Zurück
Oben