Hilfe zur Do while schleife...

vin030

Mitglied
Dies ist meine Aufgabe zum lösen: Erstellen Sie ein Programm Umrechnung im Paket praktikum4, welches mit einem selbst zu erstellenden Algorithmus die Umrechnung einer positiven Dezimalzahl (int) in ein Zahlensystem mit einer Basis (int) zwischen 2 und 16 durchführt. Für Stellenwerte größer 9 sind Buchstaben (A, B, C,…) zu verwenden. Die Stellenwerte sind in einer String – Konstanten zu hinterlegen. Prüfen Sie bei der Eingabe die Dezimalzahl und die Basis und beenden Sie bei Verletzung der Anforderungen das Programm mit einer entsprechenden Fehlermeldung.

Meine Frage nun ich soll einen Algorithmus schreiben welcher die Zahlensystem zwischeb 2 und 16 umwandeln kann richtig ?
soweit so gut dies wollte ich mit einer do while schleife tun, da die Zahl auch noch positiv sein soll wollte ich nach der do while schleife ein break setzen vorausgesetzt (x<0) dann soll in die Zeile zurückgesprungen werden in der steht "Bitte geben sie eine beliebige POSÌTIVE Zahl ein:" was passiert ist dass der compiler nun die aussage bei einem Wert unter 0 einfach unendlich lange wiederholt. Ich bitte um hilfe.
liebe grüße Vin.
 

Robat

Top Contributor
Hey vin030,

du hast die Aufgabe falsch verstanden (mMn.)

Lt. Aufgabe, sollst ein User eine beliebige positive Zahl eingeben können und diese dann in einem Zahlensystem mit der Basis 2 - 16 ausgeben. Das bedeutet, du baust einen Rechner der Zahlen in andere Zahlensysteme umrechnet.

Wenn du nicht weißt wie das funktioniert, dann hier eine schöne Seite. http://www.arndt-bruenner.de/mathe/scripts/Zahlensysteme.htm .. dort kannst du jede Zahl in jedes Zahlensystem umrechnen lassen.
Du sollst vom Dezimalsystem in jedes andere Zahlensystem umrechnen lassen. Dort wird dir auch erklärt wie man das macht.

Tipp: Der Algo ist immer der selbe. Du teilst die Zahl solange durch die Basis und merkst dir den Rest, bis der Quotient 0 ist. (wenn der Rest > 9 < 15 ist, dann nimmt man die Buchstaben A-F.. also 10=A, 11=B, 12=C, 13=D, 14=E, 15=F).

Gruß
Robert
 

vin030

Mitglied
@Robat erstmal danke für die schnelle Antwort und hilfe, ich weiß wie ich die Zahlen umrechene wie ich es für das Binärsystem umsetzen würde wäre x/2= Y
X%2= R
When(Y>0) do y/2 = y und
Y%2= R.
Ich hoffe der Ansatz dessen ist richtig .
Mein Problem ist aber wenn die Zahl die als Integer eingegeben wird eine negative ist soll halt das ganze so ausgeführt werden dass man zurück zur Eingabe verwiesen wird mit Aufforderung jetzt doch bitte eine positive zahl einzugeben.

Btw Sorry falls ich wie ein Noob wirke lol der prof hält die Vorlesungen immer erst nach den Aufgaben...
 

Robat

Top Contributor
Du willst also eine Schleife einbauen, die solange den Text ausgibt, bis eine positive Zahl eingegeben wurde?

Das geht so:

Java:
public static void main(String args[])
{
     Scanner s = new Scanner(System.in);
     int input = 0;
   
     while(input<= 0)
     {
          System.out.print("Bitte eine positive Zahl eingeben: ");
          input = Integer.parseInt(s.nextLine());  
     }
}
 

Robat

Top Contributor
X%2= R
When(Y>0) do y/2 = y und
Y%2= R.
Ich hoffe der Ansatz dessen ist richtig .

Der Ansatz stimmt.. ums mal in Java auszudrücken:
Java:
        int number = 5;
        String convertedNumber = "";
       
        StringBuilder b = new StringBuilder(convertedNumber);
       
        while(number != 0)
        {
            b.append(String.valueOf(number%2));
            number /= 2;
        }
       
        System.out.println(b.reverse().toString());

Das ganze musst du jetzt noch mit der o.g. while verknüpfen und eben für alle Zahlensysteme machen. (von 2 - 16). Wie gesagt als kleiner Tipp: Du teilst ja immer nur die Basis.. bei den Zahlensystemen wo es > 9 sein kann musst du eben mit der replace() Methode die Zahlen durch A-F ersetzten.
 

vin030

Mitglied
@Robat Genau dass mit den Strings ist für mich alles nachvollziehbar danke ! Ich hatte Probleme das umzusetzen.
Wäre es eigentlich möglich via Array alle Systeme anzugeben dass man sich ein gewünschtes halt aussucht über dieses Feld ?
 

vin030

Mitglied
Leider hab ich den Code nicht mehr aber ich hab mir ne Vorlage via PaP Designer gemacht so einen Ablaufplan halt
 

Anhänge

  • received_10211649334859563.jpeg
    received_10211649334859563.jpeg
    70,8 KB · Aufrufe: 31

Robat

Top Contributor
Du könntest alle Basen in einem int[] Array ablegen, das Array durchlaufen, prüfen ob das Array an der Stelle i deiner eingegebenen Basis entsprechicht und dann über eine eigene Methode die Zahl und die Basis übergeben.
Dann teilst du deine Zahl eben nicht durch 2 sondern durch die mitgelieferte / übergebene Basis:

Java:
public static void main(String[] args)
{
     int[] baseArray = { 2, 3, 4, 5,..,16 };
 
     for(int i =0; i < baseArray.length; i++)
    { 
         if(baseArray[i] == inputBase) convert(num, baseArray[i]);
    }

}

public String convert(int num, int base)
{
         String convertedNumber ="";
    
        StringBuilder b =new StringBuilder(convertedNumber);
 
      // dann sieht das hier halt so aus:
     while(number != 0)
     {
           b.append(String.valueOf(num%base));
          num /= base;
     }

    return b.reverse(;
}

Wobei es nicht ganz so einafch ist.. mit Base 16 bswp hast du ja noch A-F drinne, da musst du dann einfach mit replace die Zahlen ersetzten
 

vin030

Mitglied
@Robat Das war halt mein Gedanke bin mir nur nicht so sicher gewesen ob das mit dem Array sinnvoll wäre aber wenn man sich die Basis auswählt wäre es im Grunde genommen einfacher und das ganze über ein array.
Gut danke nochmals :D
 

vin030

Mitglied
Java:
package praktikum4;

import util.IO;

public class StringSpilt {

    void execute(){
   
    System.out.println("Programm zur Umrechnung von Zahlensystem (Basen von 2-16)");
    System.out.println("Bitte geben Sie die gewschte Base an:");
    int ziffer = IO.readInt("");
    System.out.println("jetzt nur noch eine positive Zahl angeben die Sie konvertieren m鐼hten");
    int base = IO.readInt("");
   
   
    int [] baseArray = {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; {for(
    int i = 0;i<baseArray.length;i++)
    {
        if (baseArray[i] == base)
            convert (ziffer, baseArray[i]);
    }
    }

public String convert (int ziffer, int base){
    String convertedNumber = "";
    StringBuilder b = new StringBuilder (convertedNumber);
   
    while (ziffer != 0)
    {
        b.append(String.valueOf(num%base));
        num/=base;
    }
   
    return b.reverse ( ;
    }

    public static void main(String[] args) {
        StringSpilt prg = new StringSpilt();
        prg.execute();
    }

       
    }

    private void convert(int ziffer, int i) {
        // TODO Auto-generated method stub
       
    }
}


Was hab ich falsch gemacht ?._.
 

vin030

Mitglied
Haha wie gesagt ich bin ein Noob
Also die Variablen wurden zugeordnet return muss ich noch vervollständigen aber irgendetwas fehlt noch :eek:
 

Joose

Top Contributor
Ich habe deinen Code halbwegs korrekt eingerückt:
Java:
package praktikum4;

import util.IO;

public class StringSpilt {

   void execute() {
     System.out.println("Programm zur Umrechnung von Zahlensystem (Basen von 2-16)");
     System.out.println("Bitte geben Sie die gew?schte Base an:");
     int ziffer = IO.readInt("");
     System.out.println("jetzt nur noch eine positive Zahl angeben die Sie konvertieren m?hten");
     int base = IO.readInt("");


     int [] baseArray = {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; {for(
     int i = 0;i<baseArray.length;i++)
     {
       if (baseArray[i] == base)
         convert (ziffer, baseArray[i]);
     }
     }

     public String convert (int ziffer, int base) {
       String convertedNumber = "";
       StringBuilder b = new StringBuilder (convertedNumber);

       while (ziffer != 0)
       {
         b.append(String.valueOf(num%base));
         num/=base;
       }

       return b.reverse ( ;
     }

     public static void main(String[] args) {
       StringSpilt prg = new StringSpilt();
       prg.execute();
     }
   }

   private void convert(int ziffer, int i) {
     // TODO Auto-generated method stub
   }
}

Dadurch sollte dir schon das erste Problem ersichtlich werden: Methoden dürfen nur innerhalb einer Klasse deklariert werden, aber nicht innerhalb einer anderen Methode.
Zwar kein Fehler aber eine sehr eigenartige Schreibweise: Der Kopf deiner for-Schleife ist irgendwie aufgeteilt. Auch kein Fehler, aber fehler anfällig: Auch wenn du das if ohne {}-Klammern schreiben kannst (weil der Compiler es erlaubt), gewöhne dir an sie trotzdem zu schreiben.

EDIT: Desweiteren beachte in Zukunft wenn du eine Frage stellst und Code postest, dass du auch die Fehler welche der Compiler wirft oder die Exception die vom Programm geworfen werden hier zu posten. Wir wollen nicht erst raten müssen wo was für ein Problem vorliegt.
 

Oben