# Addition von Strings



## X3los (15. Nov 2013)

OK Leute...

Also ich möchte einen Umrechner programmieren der :

Zwei eingegebene Dezimalzahlen zu Dualzahlen umwandelt und dann addiert

und dann wieder eine Dezimalzahl ausgibt...


Habt ihr eine Idee wie ich so etwas machen kann ?


----------



## Phash (15. Nov 2013)

Jede Menge.
Vor allem willst du nur zahlen addieren,  und meine Strings

Wenn du "2"+"3" rechnest kommt nämlich "23" dabei raus


----------



## Sebbe1993 (15. Nov 2013)

Ich versteh dein problem nicht ganz ....

Aber deine Überschrift verrät mir das irgenwas verkehrt ist bei dir  

Strings kann man nicht im eigentlichen Sinne addieren!
Wenn man zwei Strings mit einander "addiert" über den "+-operator" werden diese miteinander
verkettet!

Bsp:


```
String a = "Ich werde mit b";
String b = " verkettet!";

System.out.println(a+b);
```

Ausgabe: "Ich werde mit b verkettet!"!

Die Frage die ich mir stelle : Hast du Schwierigkeiten die schon übergeben Zahlen in form von Strings 
zu addieren oder hast du noch gar keinen plan wie du anfangen sollst?!

Gruß Sebastian


----------



## con0815 (15. Nov 2013)

Wie wäre es ganz einfach du zeigst uns, wenn vorhanden, den Code den du schon hast. So kann man wenigstens sehen, was genau du vorhast und ggf. könnte man das insgesamt etwas ändern. Weil Strings, naja Optimal ist anders


----------



## X3los (17. Nov 2013)

Ok... Also ich versuche mich folgender Aufgabe zu stellen....



Anforderungsdefinition:

Leistungsumfang

Das Programm soll in der Lage sein vom Benutzer einzugebende positive Dezimalzahlen in das Dualsystem zu konvertieren und umgekehrt.

Dann sollen zwei von Benutzer eingegebene Dezimalzahlen konvertiert, dual addiert, und die Summe wieder Dezimal ausgegeben werden können.

Funktionsumfang

F1: Umrechnung dezimal --> binär

F2: Umrechnung binär --> dezimal

F3: Addition





Bisher habe ich :


```
package umrechner;
import java.util.Scanner;

public class Umrechner {

    public static void main(String[] args) {
        
        //Abfrage der Option
        System.out.println("Wählen sie eine der folgenden Optionen:");
        System.out.println("1 - Dezimal ---> Binär");
        System.out.println("2 - Binär ---> Dezimal");
        System.out.println("3 - Addition zweier Dezimalzahlen");
        System.out.println("4 - Programm beenden");
        
        //Scan nach der Eingabe
        Scanner scan = new Scanner(System.in);
        int option = scan.nextInt();
        
        //Fall 1: Dezimal ---> Binär
        if (option == 1){
        System.out.println("Dezimal ---> Binär");
        System.out.println("Geben sie die umzuwandelnde Dezimalzahl ein:");
        
        //Scan nach der Dezimalzahl
            Scanner scan1 = new Scanner(System.in);
            int option1 = scan1.nextInt();
            int dual = Dezimal(option1);
                        }       
        
        //Fall 2: Binär ---> Dezimal
        if(option == 2){
            System.out.println("Binär ---> Dezimal");
            //Scan nach Eingabe
            Scanner scan2 = new Scanner(System.in);
            String option2 = scan2.nextLine();
            //Übertragen in String
            String dezi = Dual(option2);
                       }
        
        //Fall 3: Addition zweier Dezimalzahlen
        if(option == 3){
            System.out.println("Addition");
            //Scan nach Eingabe 1
            Scanner scan3 = new Scanner(System.in);
            String option3 = scan3.nextLine();
            String dezi1 = Dual(option3);
            //Scan nach Eingabe 2
            Scanner scan4 = new Scanner(System.in);
            String option4 = scan4.nextLine();
            String dezi2 = Dual(option4);
                       } 
        
        //Fall 4: Programm beenden
        if(option == 4){
            System.exit( 0 );
                       }

        
        
        
                                                }
        //Methode Array Dualzahlen
    
    public static int Dezimal(int dez)
    {
            //While Schleife teilt solange durch 2 bis Variable dez = 0 ist
        
            while (dez != 0) {
            if(dez % 2==0) {
            System.out.print("0");
            }
            else {
            System.out.print("1");
            }
            dez = dez / 2;
            }
           return dez;
        }
        public static String Dual (String dual)
        {
            
        //String zuweisen (eigentlich nicht nötig)   
        String dualzahl = dual;
        
   	//char Array erstellen
    	char[] binstellen = dualzahl.toCharArray();
   	
        //Übergangsvariablen definieren
    	int basis = 0;
   	 
    	int dezsum = 0;
   	 
        //Umrechnung --- Bei jedem Durchlauf Arraylänge um 1 verringern
        //           --- Bei Arraygröße i >= 0 stoppen
    	for (int i = binstellen.length-1; i >= 0; i--) {
            
           	//Wandle String zu Integer um
                //Kopiere den entsprechenden String
                //Setze einen Basiswert fest
        	if (Integer.parseInt(String.copyValueOf(binstellen,i,1))==1) basis = 2;
        	else basis = 0;
               	
                //Berechne den Wert durch anwenden der Basis auf Werte
        	dezsum = dezsum + (int)Math.pow(basis, binstellen.length-1-i);
       	 
    	}
        //Gebe Ergebnis aus
    	System.out.println(dezsum);
            return dual;
        }
        
        //Umrechnung auf Plattform unabhängiger Basis
        //Bisher hab ich kein Plan

                


    }
```


----------



## Gucky (17. Nov 2013)

Ich bin mir nicht sicher, ob dein Prof dich nicht verarscht, denn ausnahmslos alle Additionen werden auf einem Computer dual ausgeführt. Folglich wird auch die Konvertierung vom Compiler übernommen. Da musst du eigentlich gar nichts tun. Zum Beispiel ist eine 2, zugewiesen an eine byte Variable eine 00000010.

Die Wrapper Klasse Integer hat eine Methode, mit der du einen int-Wert in duale Zahlen umwandeln kannst. 
	
	
	
	





```
Integer.toBinaryString(int i)
```
. Diese Methode gibt einen String mit der Zahl im Binärsystem zurück.

Die Schleife in der Methode Dual 
	
	
	
	





```
Merke dir: Methoden NIE NIE NIE NIE NIE groß
```
 wird übersprungen, da jedes Array, wenn es initialisiert wurde eine Länge von 1 oder größer hat.


```
char[] binstellen = dualzahl.toCharArray();
```

Damit machst du ein char Array, in dem deine Zahl als Dezimalzahl steht. Aber die Zahlen stehen dort nicht als Werte, sondern im Ascii Code.

Die Methode Dezimal verstehe ich nicht. Du gibst nullen und einsen aus und dann eine 0 zurück.


Und mal ganz davon abgesehen sieht dein Code, sorry, grauenvoll aus. Bitte formatiere den noch einmal richtig.


----------



## X3los (17. Nov 2013)

Hast du denn eine Lösung dafür ?

Oder kannst du mir den ganzen Code einfach hier rein schreiben ???

Danke im Vorraus


----------



## Gucky (17. Nov 2013)

Dieses Forum ist nicht dazu da, den Code anderer Leute zu schreiben. Wir helfen dir gerne, solange du eigeninitiative zeigst und unsere Tipps umsetzt oder auf einem eigenen Weg ans Ziel kommst. Tut mir leid. Deinen Code wirst du selber schreiben müssen.
Lass doch erstmal meine Tipps mit einfßießen. Zum Beispiel das mit dem .toBinaryString(int); sollte dir schonmal stark helfen.


----------



## Sebbe1993 (17. Nov 2013)

Lies dich erstmal in das Thema Wrapper Klassen ein ! 
Also das Programm ist nun keine große Schwierigkeit mit nem gutem Basis wissen ! Aber es nützt dir nix wenn wir dir den Code geben ! 


Sent from my iPhone using Tapatalk


----------



## X3los (17. Nov 2013)

Mhhh ok danke


----------



## X3los (17. Nov 2013)

Ok also ich hab jetzt folgendes geschrieben....


```
public String umrechnen(String dezi1, String dezi2)
    {
        //Übergangs Variable initialisieren
        boolean uebergang = false;
        //Da Rechnung mit Integern durchgeführt wird
        //Initialisiere 2 Integer und weise die Strings den Integern zu
        int zahl1 = Integer.parseInt(dezi1);
        int zahl2 = Integer.parseInt(dezi2);
        
         while (zahl1 > 0 || zahl2 > 0)
       {
           //Weitere Übergangsvariablen um einzelne Ergebnisse zu prüfen
           boolean z1=false,z2=false; 
           if (zahl1%10==1)
               z1=true;
           if (zahl2%10==1)
               z2=true;
           uebergang = addieren(z1,z2,uebergang);
           zahl1 = zahl1/10;
           zahl2 = zahl2/10;
       }
       if (uebergang)
           System.out.print(1);
      
        return dezi1;
        }
     
            private boolean addieren(boolean z1, boolean z2, boolean uebergang) 
         {
             if (z1 && z2)
                  if (uebergang)
                  {
                     System.out.print(1);
                      return true;
                  }
                   else
                   {
                     System.out.print(0);
                      return true;
                  }
             else if (z1 || z2)
                   if (uebergang)
                  {
                       System.out.print(0);
                     return true;
                  }
                  else
                   {
                      System.out.print(1);
                        return false;
                 }
              else 
                  if (uebergang)
                   {
                       System.out.print(1);
                       return false;
                  }
                  else
                   {
                      System.out.print(0);
                        return false;
                   }
```

Das erfüllt aber noch nicht ganz seinen zweck oder ??

Es funktioniert auf jeden Fall noch nicht...


----------



## X3los (17. Nov 2013)

ok also ich habe jetzt folgendes geschrieben..

Aber was muss ich machen nachdem das ganze durch die Addition durch ist ?



```
public String umrechnen(String dezi1, String dezi2)
    {
     //Ergebnis Variable
     String endergebnis = " ";
     
     //Umformen der Variablen in einen Integer Wert
     int zahl1 = Integer.parseInt(dezi1);
     int zahl2 = Integer.parseInt(dezi2);
     
     //Umwandeln der 1.Eingabe zu einer Dualzahl
     String dual1 = "";
            
     while (zahl1 != 0) {
     if(zahl1 % 2==0) {
     dual1 = dual1 + "0";
     }
     else {
     dual1 = dual1 + "1";
     }
     zahl1 = zahl1 / 2;
            }
     dual1 = new StringBuffer(dual1).reverse().toString();
     
     //Umwandeln der 2.Eingabe zu einer Dualzahl
     String dual2 = "";
            
     while (zahl1 != 0) {
     if(zahl1 % 2==0) {
     dual2 = dual2 + "0";
     }
     else {
     dual2 = dual2 + "1";
     }
     zahl1 = zahl1 / 2;
            }
     dual2 = new StringBuffer(dual2).reverse().toString();
     
     //Umwandeln der beiden Dualzahlen zu Integern
     int bin1 = Integer.parseInt(dual1);
     int bin2 = Integer.parseInt(dual2);

     
     int[] z1 = new int[] {bin1};
     int[] z2 = new int[] {bin2};
     int[] e = new int[9999];
     int uebertrag = 0;
     for (int i=0; i < z1.length; i++) {
     int tmp = z1[i] + z2[i] + uebertrag;
     uebertrag = tmp > 1 ? 1 : 0;
     e[i] = tmp % 2;
     }
     return endergebnis;
    }
```


Kann mir vieleicht jemand den Code zur Addition der Dualzahlen bin1 und bin2 geben ?
Da hab ich keine Idee...


----------



## Gucky (18. Nov 2013)

Wandel die Zahl als Dualzahl in ein Array oder eine ArrayList aus boolean-Werten um.
Dann schreibst du dir die schriftliche Addition von Dualzahlen auf und setzt dann genau das um.
Wie gesagt. Den Code musst du selber schreiben. Das bringt dir nichts, wenn wir dir den Code geben, bis auf die Tatsache, das du dann mit den Hausaufgaben fertig bist.


----------

