# Mit dem letzten bis zum ersten Wert  aus Array rechnen



## Anfänger90 (27. Nov 2016)

Hallo,
ich habe folgendes Problem. Und zwar soll ich die Werte im Array mit absteigender Potenz ausrechnen lassen und die einzelnen Werte ausgeben. Heißt bei einem Array wie {8,6,9} soll die 9^2 die 6^1 und die 8^0 gerechnet werden. Zudem kann das Array eine unabänige Größe haben und somit weiß ich nicht welche die erste Hochzahl ist. Dies soll zur Umrechnung von Zahlensystemen dienen. Die Befüllung des Array habe ich hinbekommen. Muss ich die Werte des Arrays umdrehen oder gibt es eine andere Möglichkeit? Und wie kann ich die einzelnen Werte dann zwischenspeichern, da ich die Rechnung mit ausgeben muss?


----------



## DrZoidberg (27. Nov 2016)

Du könntest z.B. eine for Schleife verwenden und die Zählervariable in jedem Durchlauf um eins verringern.


----------



## Anfänger90 (27. Nov 2016)

Ok das wäre so in etwa oder ?
for (int k=array.length; k=0; k--) {
}

Nur wie bekomme ich die Rechnung hin das er mit der höchsten Potenz und der letzten Zahl anfängt. Geht das irgendwie über array.length - 1 ?


----------



## mrBrown (27. Nov 2016)

Potenz ist in dem Fall doch einfach der Index

Warum rechnest du nicht einfach von vorne nach hinten?


----------



## Robat (27. Nov 2016)

Deine Bedingung der for-Schleife, genauer gesagt `k = 0` würde ich noch mal überdenken


----------



## Anfänger90 (27. Nov 2016)

Ja stimmt das müsste auch gehen. Dann müsste ich die erste Zahl im Array hoch 0 nehmen bis zur Array länge. 
Allerdings komm ich nicht darauf wie ich die Werte des Arrays gerechnet bekommen mit den aufsteigenden oder absteigen Potzenten.

@Robat: muss k==0 sein


----------



## Robat (27. Nov 2016)

Überleg mal, die for-Schleife wird solange ausgeführt wie die Bedingung erfüllt ist. Wenn du k==0 setzt, dann wird die for-schleife solange ausgeführt, wie k den Wert 0 hat. Wenn du k am Anfang auf die Länge des Arrays setzt dann wird sie also gar nicht ausgeführt. 
Was du willst ist, dass die Schleife solange ausgeführt wird wie k größer oder gleich 0 ist


----------



## mrBrown (27. Nov 2016)

Anfänger90 hat gesagt.:


> Allerdings komm ich nicht darauf wie ich die Werte des Arrays gerechnet bekommen mit den aufsteigenden oder absteigen Potzenten.


Die Potenz ist gleich der Index, also `werte[i]^i`. Die Funktion zum Potenzen berechnen ist `Math.pow`[/i]


----------



## Anfänger90 (27. Nov 2016)

```
double dezimal;
  double dezimal1 = 0;
  double summe = 0;
  int a=0;
  for(int k=Dezimalarray.length; k>=0; k--)

  {
  double b = Math.pow(15, a);
  dezimal =  Dezimalarray[a] * b;
  dezimal1 = dezimal1 + dezimal;
  System.out.println(""+Dezimalarray[a]+" mal 15 hoch "+a+" ist "+dezimal);
  System.out.println("Summe "+dezimal1+" ist der Wert im Dezimalsystem");
  a++;
  }
```

Habe dies jetzt Programmiert. Das Array ist vorgeben. Allerdings rechnet er jetzt genau falsch rum heißt er holt die letzte Zahl mal der letzten Indexzahl. Ist wahrscheinlich nur ein kleiner Fehler aber ich hänge fest.


----------



## DrZoidberg (27. Nov 2016)

Jetzt hast du zwei Zählervariablen. a und k. a zählt vorwärts und k rückwärts. In welche Richtung willst du die Indexzahlen durchlaufen?


----------



## Anfänger90 (27. Nov 2016)

Die letzte Zahl im Array soll mit der ersten Indexzahl multipliziert werden. Habe wenn ich das Array  umdrehe funktioniert es. Sitzte schon den ganzen Tag hier dran deswegen erkenn ich den Fehler wahrscheinlich auch nicht.


----------



## DrZoidberg (27. Nov 2016)

Versuch mal das hier:

```
double dezimal;
double dezimal1 = 0;
int a=0;
for(int k=Dezimalarray.length-1; k>=0; k--)
{
double b = Math.pow(15, k);
dezimal = Dezimalarray[a] * b;
dezimal1 = dezimal1 + dezimal;
System.out.println(""+Dezimalarray[a]+" mal 15 hoch "+k+" ist "+dezimal);
System.out.println("Summe "+dezimal1+" ist der Wert im Dezimalsystem");
a++;
}
```


----------



## Robat (27. Nov 2016)

Ich würde dir eig. nicht empfehlen das Array von hinten zu durchlaufen weil dann die Ausgabe auch von hinten anfängt und das lt. Aufgabenstellung ja nicht sein soll.
Einfacher wäre das hier:


```
/*
* Array mit den Zahlen
*/
int[] numArray = {9, 7, 6, 8};

// Durchlaufe das Array von vorne
for(int i = 0; i < numArray.length; i++)
{
    // ermittle den Exponenten. Dieser Ergibt sich aus der Länge des Arrays - 1 (da der größte Index ja die Länge -1 ist weil man bei 0 anfängt)
    // Das erste Element soll den höchsten Exp haben und das letzte Element den kleinsten Exp.
    // Wenn man von diesem Wert i abzieht hat man seinen Exponenten (siehe Tabelle weiter unten)
    int exp = (numArray.length-1)-i;
    double erg = Math.pow(numArray[i], exp);
    System.out.println(numArray[i] + "^" + exp + " = " + erg);
}
```

*Tabelle:
durchlauf     numArrayLength-1     i       exp*
     0                       3                        0       3-0=3
     1                       3                        1       3-1=2
     2                       3                        2       3-2=1
     3                       3                        3       3-3=0

*PS: *Das ist nicht genau auf dein Problem abgestimmt. Aber die Berechnung solltest du ja alleine hinkriegen 
oder du machst es nach @DrZoidbergs Variante


----------



## Anfänger90 (27. Nov 2016)

Perfekt. Danke!
@Robat Das ist egal. Ich brauche nur die richtige Dezimalzahl und die einzelnen Rechenschritte. Denn ich muss jetzt die Dezimalzahl in ein anderes Zahlensystem überführen. 
Kann sein das ich eure Hilfe noch brauchen werde.  Trotzdem danke


----------



## Anfänger90 (28. Nov 2016)

Bräuchte nochmal kurz eure Hilfe. Und zwar muss ich die Dezimalzahl die ich gespeichert habe nun umrechnen ins 9er. Das habe ich mit folgendem Code gelöst.

do {
  zahl1 = dezimal1%9;
  zahl = (dezimal1-zahl1)/9;
  myPage.println("Die Zahl "+dezimal1+" / 9 = "+zahl+" Rest: "+zahl1+"<br>");
  dezimal1 =  zahl;
  } while (zahl > 0);

Das funktioniert auch soweit. Gerne würde ich das Resultat jetzt noch ausgeben. Heißt mit println die modoli (mehrzahl?) in umgekehrter Reihenfolge ausgeben. Ich dachte dazu ein Array zu initialisieren und diesen mit den Werten füllen und später das Array umgedreht auszugeben. 
Gibt es eine Möglichkeit ein Array zu erstellen ohne die Größe vorher zu Wissen? Habe was zu Arraylist gelesen allerdings funktionierte das nicht wirklich.


----------



## Anfänger90 (28. Nov 2016)

Hab es gelöst habe es in einen String eingelesen


----------

