www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Java" - Array schrittweise vergrößern
Array schrittweise vergrößern < Java < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Java"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Array schrittweise vergrößern: Idee
Status: (Frage) beantwortet Status 
Datum: 00:12 Di 13.11.2012
Autor: Maurizz

Aufgabe
Das Pascalsche Dreieck stellt die Binomialkoeffizenten n graphisch dar. Ihre Methode getNextPascalRow() soll bei jedem Aufruf die jeweils nächste Zeile des Pascaldreiecks beginnen bei [1] zurückgeben, allerdings nur solange jeder einzelne Eintrag in der Zeile noch mit dem Datentyp des zurückzugebenen Arrays darstellbar ist. Sobald letzteres nicht mehr möglich ist, soll die Methode wieder bei [1] beginnen und so einen „unendlichen zirkulären Strom von Pascaldreieck-Zeilen“ bereitstellen.



Hallo,

meine Frage lautet, ob es möglich ist ein Array Schrittweise zu erhöhen. D.h wenn ich die Methode erneut aufrufe soll er lediglich die Arraylaenge um 1 erhöhen und nicht ein völlig neues erstellen wo die alten Werte nicht mehr vorhanden sind. Jegliche meiner Versuche haben entweder ein komplett neues Array angelegt, oder waren nicht kompilierbar.

Da fällt mir grad ein... es muss doch möglich sein ein Array unbestimmter größe zu erstellen, so dass ich einfach beliebig viele Elemente hinzufügen kann.

        
Bezug
Array schrittweise vergrößern: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 01:10 Di 13.11.2012
Autor: Maurizz

Gut ich habe vorerst eine Lösung gefunden:

public static int[] getNextPascalRow() {
if (pascal.length < 1)
{
       pascal = new int[1];
}
for (p = 0; p < pascal.length; p++)
{
       pascal[0] = 1; pascal[pascal.length - 1] = 1;
}
        truePascal = pascal.clone();
pascal = new int[p+1];
return truePascal;
}

Jetzt stellt sich natürlich die Frage wie ich die Lücken zwischen den [1].....[1] effektiv auffüllen kann. Ob das wohl am besten rekursiv zu lösen wäre?

Bezug
                
Bezug
Array schrittweise vergrößern: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 02:41 Di 13.11.2012
Autor: Maurizz

Das Problem ist gelöst!

public static int pascalscherLueckenfuellerX3000(int[] a) {  // Der Name ist Programm
if (truePascal[p-1] + truePascal[p] < 0) // Ueberprueft ob die Addition nach hinten los geht
{
       return -1;
}
       return truePascal[p-1] + truePascal[p];
}
public static int[] getNextPascalRow() {
  for (p = 0; p < dummyPascal.length; p++)
    {
       if (p == 0 || p == dummyPascal.length - 1)
        {
     dummyPascal[p] = 1;
        } else
     {
dummyPascal[p] = pascalscherLueckenfuellerX3000(truePascal);
if (dummyPascal[p] == -1)
{
     dummyPascal = new int[1]; // Ist die Addition nach hinten losgegangen muessen wir von vorne beginnen.
     return dummyPascal;  // Hier darf der dummy mal den truePascal spielen, wenn auch nur fuer eine Runde:)
}
       }
    }  

truePascal = dummyPascal.clone();
dummyPascal = new int[p+1];
return truePascal;
}

Bezug
                        
Bezug
Array schrittweise vergrößern: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 03:19 Di 13.11.2012
Autor: reverend

Hallo Maurizz,

ich hoffe, ich habe das richtig verstanden, dass Du allein mit dem Problem fertig geworden bist. Daher habe ich Deine Fragen auf den Status Mitteilung geändert.

Wenn das auf einem Missverständnis beruht, sag hier einfach Bescheid. Dann ändert es jemand zurück, vielleicht sogar ich. ;-)

Übrigens: mit dem Datentyp double könntest Du ziemlich große Pascalsche Dreiecke erzeugen...
Um vorher herauszufinden, wie groß, braucht man nicht nur die Formel für die Binomialkoeffizienten, sondern auch die []Stirling-Formel.
Dann kannst Du auch Dein Array gleich in der nötigen Größe anlegen.

Grüße
reverend

PS: Ach ja - der größte Binomialkoeffizient steht immer in der Mitte, in der Hälfte der Fälle sogar gleich zweimal. :-)


Bezug
        
Bezug
Array schrittweise vergrößern: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 14:12 Di 13.11.2012
Autor: Event_Horizon

Hallo!

Ich weiß nicht, ob du auf den Datentyp INT festgelegt bist. Ich würde empfehlen, UNSIGNED INT zu nehmen, dadurch verdoppelst du den möglichen Zahlenbereich, und wirst noch eine weitere Zeile berechnen können.

Den Überlauf kannst du dennoch feststellen: Die Summe der beiden Zahlen ist dann kleiner als die beiden Zahlen.


Bezug
                
Bezug
Array schrittweise vergrößern: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 14:58 Di 13.11.2012
Autor: Valerie20

In Java gibt es kein "unsigned".

Valerie


Bezug
                        
Bezug
Array schrittweise vergrößern: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 15:55 Di 13.11.2012
Autor: reverend

Hallo Valerie,

> In Java gibt es kein "unsigned".

Stimmt. Aber man kann es prima virtuell nachmachen, indem man einfach die passende Konstante addiert oder subtrahiert...

Trotzdem bringt das in der Tat nur eine Zeile mehr, und ein Rekordversuch war in der Aufgabe ja gar nicht gefordert. ;-)

Grüße
reverend


Bezug
                                
Bezug
Array schrittweise vergrößern: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 00:19 Mi 14.11.2012
Autor: Valerie20

Hi Reverend,

> Aber man kann es prima virtuell nachmachen, indem
> man einfach die passende Konstante addiert oder
> subtrahiert...

Stimmt. [winken]

Valerie  

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Java"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.mathebank.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]