Summe und Produkt von zwei Feldern ( arrays)

Status
Nicht offen für weitere Antworten.
A

Andi2342

Gast
Hallo,
Um mit beliebig großen natürlichen Zahlen rechnen zu können, sollen in dieser Aufgabe natürliche
Zahlen als Arrays von int-Werten aus dem Intervall [0,9] in natürlicher Weise repräsentiert
werden. Die Zahl 12345 wird also durch das Array [1] [2] [3] [4] [5] dargestellt.


Ich möchte ein Programm schreiben, dass zwei Zahlen als String einliest, auf oben beschriebene
Art repräsentiert und die Summe bzw Produkt der eingelesenen Zahlen ausgibt.

Also z.B. 4 5 6 + 5 8 7 = 1 0 4 3

Wobei dann [6] + [7] = [3] ergibt und +1 zum [i-1] Feld addiert werden muss.

Wie kann ich dass am besten umsetzen?

Jmd. einen Lösungvorschlag.

Mfg

Andi
 

Marco13

Top Contributor
Lösungsvorschlagt? Nun, keinen der "detaillierter" ist, als das, was du in der ... zweiten Klasse gelernt hast.

1. Addiere die letzten Stellen.
2. Wenn der neue Übertrag 0 is, bist du fertig.
3. Andernfalls addiere die nächstletzten Stellen und den Übertrag, und gehe zu 2.
 
A

Andi2342

Gast
Und was sollte ich bei der Multiplikation machen ?

Wie kann ich das Feld dann ausgeben, dann müsste ich es ja eigentlich wieder zurück in ein String wandeln?

mfg
 

Tharsonius

Bekanntes Mitglied
Was Du auf alle Fälle bedenken musst ist, dass das Ergebnis Array eventuell größer ist als die beiden einzelnen Summanden.

Wenn Du die Addition fertig hast, dann ist eine Multiplikation letztendlich nichts anderes als eine vielfache Addition. Wobei das ganze bei großen zahlen schon ein ganzes weilchen dauert.

ich würde eine Multiplikation aufsplitten in mehrfache Additionen.

[x1] [x2] * [y1] [y2]

=> ([x1] [x2] *10) * [y1] + [x1] [x2] * [y2]

In einem weiteren schritt lässt Du einfach für jede teilmultiplikation eine Schleife laufen, die entsprechend oft die zahl auf sich selbst aufaddiert.

[x1] [x2] * 3

=> [x1] [x2] + [x1] [x2] + [x1] [x2]

Wobei gerade *10 auch recht einfach gelöst werden kann, im dem Du einfach eine 0 anhängst.
 

Marco13

Top Contributor
Sowas wie x * 5 zu implementieren als x+x+x+x+x würde ich nicht empfehlen. Stattdessen sollte die Mutliplikation erstmal auch so ablaufen, wie man sie schriftlich eben macht. (Über Optimierungen haben sich die Prozessorbauer schon viele Gedanken gemacht - da kann man sich weitere Inspiration holen). Für das Ergebnis kannst du genug Speicher bereitstellen: Bei der Addition kann das Ergebnis höchstens eine Stelle mehr haben, als der größere Summand. Bei einer Multiplikation ist die Anzahl der Stellen höchstens die Summe der Stellen der Faktoren.
 
A

Andi2342

Gast
Hallo,

Das ist bislang mein Code:

MiniJava benutzen wir in der UNI:



Code:
public class natzahl extends MiniJava {
public static void main(String[] args) {

String zahl1 = readString();
String zahl2 = readString();


int[] a; // Deklaration
int n1 = zahl1.length();
a = new int[n1];
// Anlegen des Felds
int i = 0;
while (i < n1) {
a[i] = (int)(zahl1.charAt(i)) - (int)'0';
i = i+1;
}     //jetzt sind alle Werte von Zahl1 im Feld1 a gespeichert

int[] b; // Deklaration
int n2 = zahl2.length();
b = new int[n2];
// Anlegen des Felds
i = 0;
while (i < n2) {
b[i] = (int)(zahl2.charAt(i)) - (int)'0';
i = i+1;
}     //jetzt sind alle Werte von Zahl1 im Feld2 b gespeichert

// NUN HABEN WIR DIE BEIDEN ARRAYS


if (n1 >= n2){
int zaehler = n2;
i = 0;
int[] c;
c = new int[n1+1]; // +1 da bei Addition höchstens eine Stelle dazukommen kann
int n3 = c.length;
while (i < n1){
i = i + 1;
if (i <= zaehler){
c[n3] = a[n1] + b[n2];
n2 = n2 - 1;
}
else {
c[n3] = b[n2];
}
n1 = n1 - 1;
n3 = n3 - 1;
}
}
else
{
int zaehler = n1;
i = 0;
int[] c;
c = new int[n2+1]; // +1 da bei Addition höchstens eine Stelle dazukommen kann
int n3 = c.length;
while (i < n2){
i = i + 1;

if (i <= zaehler){
c[n3] = b[n2] + a[n1];
n1 = n1 - 1;
}
else {
c[n3] = b[n2];
}
n2 = n2 - 1;
n3 = n3 - 1;
}
return c;
}

// JETZT MUESSEN WIR NOCH DAFUER SORGEN, DASS ES KEINE ZWEISTELLIGEN ZAHLEN IN EINEM FELD GIBT

int zaehler =  c.lenght;      //evtl. wird zur Laenger die c[0] nicht addiert
i = 0;
while (i < zaehler){
if (c[n3] >= 10){
c[n3] = c[n3] - 10;
c[n3-1] = c[n3-1] + 1;
}
n3 = n3 - 1;
i = i + 1;
}
// Nun muss der Array noch in ein String umgewandelt werden

String res = "";

for(int i=0; i<a.length; i++)
  res += c[i]; // entspricht b = b + a[i];

write(res);

}
}

Leider lässt er sich nicht kompilieren, da anscheinend das Feld c[] nur für eine Operation gespeichert wird.
Kann mir jemand einen Tipp geben, wie ich das lösen kann?
 

Marco13

Top Contributor
Jo, jetzt ist es compilierbar. Den/die übrigen Fehler mußt du selbst finden...
Code:
public class natzahl extends MiniJava
{
    public static void main(String[] args)
    {

        String zahl1 = "123"; //readString();
        String zahl2 = "456"; //readString();

        int[] a; // Deklaration
        int n1 = zahl1.length();
        a = new int[n1];
// Anlegen des Felds
        int i = 0;
        while (i < n1)
        {
            a[i] = (int) (zahl1.charAt(i)) - (int) '0';
            i = i + 1;
        } //jetzt sind alle Werte von Zahl1 im Feld1 a gespeichert

        int[] b; // Deklaration
        int n2 = zahl2.length();
        b = new int[n2];
// Anlegen des Felds
        i = 0;
        while (i < n2)
        {
            b[i] = (int) (zahl2.charAt(i)) - (int) '0';
            i = i + 1;
        } //jetzt sind alle Werte von Zahl1 im Feld2 b gespeichert

// NUN HABEN WIR DIE BEIDEN ARRAYS

        int[] c;
        int n3;
        if (n1 >= n2)
        {
            int zaehler = n2;
            i = 0;
            c = new int[n1 + 1]; // +1 da bei Addition höchstens eine Stelle dazukommen kann
            n3 = c.length;
            while (i < n1)
            {
                i = i + 1;
                if (i <= zaehler)
                {
                    c[n3] = a[n1] + b[n2];
                    n2 = n2 - 1;
                }
                else
                {
                    c[n3] = b[n2];
                }
                n1 = n1 - 1;
                n3 = n3 - 1;
            }
        }
        else
        {
            int zaehler = n1;
            i = 0;
            c = new int[n2 + 1]; // +1 da bei Addition höchstens eine Stelle dazukommen kann
            n3 = c.length;
            while (i < n2)
            {
                i = i + 1;

                if (i <= zaehler)
                {
                    c[n3] = b[n2] + a[n1];
                    n1 = n1 - 1;
                }
                else
                {
                    c[n3] = b[n2];
                }
                n2 = n2 - 1;
                n3 = n3 - 1;
            }
            //return c;
        }

// JETZT MUESSEN WIR NOCH DAFUER SORGEN, DASS ES KEINE ZWEISTELLIGEN ZAHLEN IN EINEM FELD GIBT

        int zaehler = c.length; //evtl. wird zur Laenger die c[0] nicht addiert
        i = 0;
        while (i < zaehler)
        {
            if (c[n3] >= 10)
            {
                c[n3] = c[n3] - 10;
                c[n3 - 1] = c[n3 - 1] + 1;
            }
            n3 = n3 - 1;
            i = i + 1;
        }
// Nun muss der Array noch in ein String umgewandelt werden

        String res = "";

        for (i = 0; i < a.length; i++)
            res += c[i]; // entspricht b = b + a[i];

        write(res);

    }
}
 
A

ANdi2342

Gast
Kann den Fehler einfach nicht finden warum es ein ARRAYINDEXOUTOFBOUNDS gibt in Zeile 46?

Für mich macht alles Sinn ?
Kann mir jmd. weiterhelfen?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zeppi Summe von Fibonacci Allgemeine Java-Themen 10
gotzi242 Array Summe bestimmen tipps? Allgemeine Java-Themen 14
H Summe aller Vielfachen von 3 oder 5 unter 1000. Allgemeine Java-Themen 7
C Array Summe Allgemeine Java-Themen 8
P Werte in Array zählen und Summe der einzelnen Teile ausgeben Allgemeine Java-Themen 10
G Programm zur Berechnung von Summe, Median, Erwartungswert, usw von einem Array Allgemeine Java-Themen 7
A MD5 Summe von einer CDROM Bilden Allgemeine Java-Themen 3
J Eigenes Produkt Upgrade / Update-fähig halten? Allgemeine Java-Themen 16
O Text aus einer Textdatei rausholen, der zwischen zwei Schlüsselworten steht Allgemeine Java-Themen 4
D Zwei Listen vergleichen Allgemeine Java-Themen 7
Tobero Wie berechnet man ob zwei Linien sich schneiden? Allgemeine Java-Themen 2
kodela Zwei gleichzeitig gedrückte Steuertasten Allgemeine Java-Themen 10
X Bedingung zwei mal überprüfen Allgemeine Java-Themen 4
Zrebna Random Number - Generische Formel zwischen zwei INKLUSIVEN Werten Allgemeine Java-Themen 16
D Input/Output Zwischen zwei ID-Räumen unterscheiden und Objekt löschen Allgemeine Java-Themen 16
D OOP Gemeinsamen ID-Raum für zwei Klassen implementieren Allgemeine Java-Themen 7
S Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? Allgemeine Java-Themen 15
S Kann man Variablen oder Felder definieren deren Typ zwei Interfaces ist..? Allgemeine Java-Themen 9
K Aus String zwei Jahreszahlen auslesen Allgemeine Java-Themen 18
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
VfL_Freak Double mit zwei festen NK-Stellen ausgeben Allgemeine Java-Themen 9
Neoline Methoden Zwei Arrays abwechselnd zusammenführen Allgemeine Java-Themen 15
J Zwei Wavdateien gleichzeitig mit SourceDataLine abspielen Allgemeine Java-Themen 0
D Best Practice Die niedrigste Differenz zwischen zwei Listen ermitteln. Allgemeine Java-Themen 10
J Fahrroute zwischen zwei Punkten finden Allgemeine Java-Themen 1
J Kollision von zwei Kreisen Allgemeine Java-Themen 15
J Transfer von Integer zwischen zwei Clients - RMI Allgemeine Java-Themen 4
S Variablen split-Funkton mit zwei Variabeln verwenden? Allgemeine Java-Themen 4
T Alle Kombinationen aus zwei Arrays Allgemeine Java-Themen 8
G Liste zwischen zwei Kalenderdaten erstellen Allgemeine Java-Themen 3
AssELAss Zwei Arrays / ArrayLists inhaltlich vergleichen Allgemeine Java-Themen 2
H RegularExpression zwischen zwei Strings Allgemeine Java-Themen 2
P Zwei Applikationen mit einem Job Allgemeine Java-Themen 0
A Lineare Interpolation mit zwei Arrays Allgemeine Java-Themen 4
E Berechnung des Schnittpunktes von zwei Geraden Allgemeine Java-Themen 1
S Zwei String vergleichen, Fehler markieren Allgemeine Java-Themen 3
G Matrix reduzieren zwei Methoden Allgemeine Java-Themen 2
Dechasa Vergleichen von zwei Arrays Allgemeine Java-Themen 4
P Zwei ArrayLists: Ohne die eine überhaupt anzurühren, wird sie verändert Allgemeine Java-Themen 2
S Anwendung zum ausrechnen der Differenz von zwei Tagen Allgemeine Java-Themen 9
F Zwei LinkedHashMaps iterieren und vergleichen Allgemeine Java-Themen 2
M Zwei unterschiedliche JAR Dateien mit ANT erstellen Allgemeine Java-Themen 8
B Fehler beim Auslesen von Einstellungen. Zwei ähnliche Blöcke, nur eins geht. Allgemeine Java-Themen 5
L Zwei Files miteinander vergleichen und Grafisch darstellen Allgemeine Java-Themen 1
T Zwei Wortendungen vergleichen ohne .equals Allgemeine Java-Themen 10
F Webstart zwei Java Versionen / aktivieren bzw deaktivieren Allgemeine Java-Themen 2
S Zwei Comparable (compareTo) vergleichen Allgemeine Java-Themen 6
E zwei Gleitkommazahlen durcheinander dividieren Allgemeine Java-Themen 2
X Generic muss zwei Klassen/Interfaces erfüllen Allgemeine Java-Themen 5
turmaline OOP zwei gleiche Methoden mit kleinen Unterschieden Allgemeine Java-Themen 15
C Threads Zwei Threads greifen auf LinkedList zu. Allgemeine Java-Themen 12
T Wie heißt ein Binärbaum, dessen Knoten immer zwei Kinder haben müssen? Allgemeine Java-Themen 2
C ActionListener zwei Buttons zuweisen Allgemeine Java-Themen 11
M Eclipse drei slashs durch zwei ersetzen? Allgemeine Java-Themen 3
1 zwei Strings vergleichen Allgemeine Java-Themen 16
C Buchstaben, die in zwei Wörtern vorkommen Allgemeine Java-Themen 13
J Gleiche Packagestruktur in zwei *.jar Dateien Allgemeine Java-Themen 4
G Zwei bytes vergleichen Allgemeine Java-Themen 2
B zwei-dimensionale Collections bzw. Array mit Indizes Allgemeine Java-Themen 3
C Zwei Arrays vereinen Allgemeine Java-Themen 3
K Objekt-Austausch zwischen zwei Programmen über System-Clipboard Allgemeine Java-Themen 5
H Zwei verschiedene Dateien mittels einem Binärstream übertragen? Allgemeine Java-Themen 13
N hashCode() für zwei ints Allgemeine Java-Themen 5
turmaline Gleichheit von zwei Maps Map <String, Map <String, String>> Allgemeine Java-Themen 30
N Wie Listenabgleich auf zwei CPU Cores auslagern? Allgemeine Java-Themen 6
D Zufall wahr bzw. falsch mit zwei Faktoren Allgemeine Java-Themen 10
H Datenaustausch zwischen zwei Java-Programmen Allgemeine Java-Themen 5
H Ausgabe von zwei Textfeldern Allgemeine Java-Themen 3
H Zwei unabhängige Threads miteinander kommunizieren lassen Allgemeine Java-Themen 3
G zwei mal synchronized Allgemeine Java-Themen 5
Z zwei Daten vergleichen Allgemeine Java-Themen 4
C ArrayList anhand von zwei Attributen sortieren Allgemeine Java-Themen 4
S Alle Elemente von zwei Listen vergleichen Allgemeine Java-Themen 10
T IText: Zwei A4 PDF´s auf ein A3 PDF´s Allgemeine Java-Themen 2
J Verschachtelte ListIteratoren um in zwei Listen hin und herzugehen Allgemeine Java-Themen 5
A Differenz zwischen zwei Uhrzeiten Allgemeine Java-Themen 7
H Shortcut ruft zwei Menu-punkte auf Allgemeine Java-Themen 5
J Zwei konstruktoren? Allgemeine Java-Themen 8
A zwei listen vergleichen und unterschiede anzeigen Allgemeine Java-Themen 3
J Zwei sortierte Listen zusammenfassen Allgemeine Java-Themen 8
G Linked List zwischen zwei Threds übergeben Allgemeine Java-Themen 11
J zwei HashMaps vereinen Allgemeine Java-Themen 3
C Viele Informationen aus zwei Collections vergleichen Allgemeine Java-Themen 2
G Jfreechart zwei charts Allgemeine Java-Themen 2
S Zwei Anwendungen unter Tomcat Allgemeine Java-Themen 4
T Anzahl Tage zwischen zwei Daten - Stunde fehlt? Allgemeine Java-Themen 2
V Zwei ArrayList(s) vergleichen Allgemeine Java-Themen 6
T Überprüfen ob zwei Farben ähnlich sind Allgemeine Java-Themen 14
M zwei main-Methoden Allgemeine Java-Themen 7
P zwei JFrames zusammenhängen Allgemeine Java-Themen 4
M HashMap kapselt zwei Objekte aber wie baut man eine Matrix? Allgemeine Java-Themen 2
H zwei Date Variablen überschreiben sich Allgemeine Java-Themen 2
2 Tage zwischen zwei Datumsdaten zählen Allgemeine Java-Themen 2
G Tage zwischen zwei Datumsdaten zählen Allgemeine Java-Themen 3
J Zwei String auf ähnlichkeiten untersuchen? Allgemeine Java-Themen 3
C kürzester weg zwischen zwei Punkten, Koordinaten finden Allgemeine Java-Themen 15
B zwei Bilder miteinander vergleichen Allgemeine Java-Themen 25
L Anzahl Tage zwischen zwei Kalenderdaten Allgemeine Java-Themen 5
P Threadprogrammierung - zwei Threads parallel - einer beendet Allgemeine Java-Themen 3
G Kommunikation von zwei Java-Programmen Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben