Wie kann ich mein Programm noch effizienter machen?

Hey, Ich habe gerade für einen Test gelernt und wollte fragen wie ich meinen Algorithmus, der die Ziffer einer Basis (Wie Oktal,Binär oder Hexadezimal) in das Dezimalsystem umrechnet, noch effizienter machen kann.
Um etwas in von z.b. Binär in Dezimalumzuwandeln muss man so vorgehen : 1010 = 1*2[SUP]3[/SUP] + 0*2[SUP]2[/SUP] + 1*2[SUP]1[/SUP] + 0*2[SUP]0[/SUP]

Jetzt müssen wir das mit dem Hornerschema machen das folgender Maßen geht (Beispiel mit Oktal): 123123[SUB]8[/SUB] = (((((1*8+2) *8+3)*8+1)*8+2)*8+3)*8 und so müssen wir das in Dezimal umrechnen....
Ich hab mir gedacht ich machs gleich ein bisschen besser ,also dass man von jeder beliebigen Basis eine Zahl in das Dezimalsystem umwandeln kann!
Hier der Code:

Java:
public static int inDezi(String zahlen,int basis)
    {
        //Erstelle ArrayList
        List<Integer> iListe = new ArrayList<Integer>();
        char zahl = ' ';
        int zahlhelp = 0;
        int ergebnis = 0;
        if(10<basis && basis <=16) {
            
            for(int i = 0;i<zahlen.length();i++){
               if(10<=(int)zahlen.charAt(i)-55&&(int)zahlen.charAt(i)-55<=16){
                    zahl = (char)(zahlen.charAt(i)-(65-10));//-10 weil 'A'=65 und -65 wäre dann 0, aber A = 10 deshalb A-55 denn dann ist der Integerwert=10
                    zahlhelp = (int)zahl;
                }else{
                    zahl = (char)(zahlen.charAt(i)-48);
                    zahlhelp = (int)zahl;
                     }
               iListe.add(zahlhelp);
               }    
        }else {for(int i = 0;i<zahlen.length();i++) {
                zahl = (char)(zahlen.charAt(i)-48);
                zahlhelp = (int)zahl;
                iListe.add(zahlhelp);

                }}
        ergebnis =0;
        for(int i = 0;i<iListe.size();i++)
        {
            if(i+1==iListe.size())
            {
               ergebnis += iListe.get(i); 
            }
            else{
            ergebnis = (ergebnis+iListe.get(i))*basis;}
        }
        return ergebnis;
        
    }

Vielen Dank für die Antworten, euer Alex 😀
 
Zuletzt bearbeitet:
"Jede beliebige Basis" bedeutet normalerweise nicht, dass bei Basis 16 Schluss ist...
Ansonsten sieht deine Implementierung schon recht performant aus, ggf. kann man sich das Zwischenspeichern in List<Integer> iListe sparen.
Afaik gibt's keine Klasse in der Java-Standard-Bibliothek, die das direkt erledigen würde.
 

Zurück
Oben