Thrown when the Java Virtual Machine cannot allocate an object because it is out of memory, and no more memory could be made available by the garbage collector.
aber mal so ne frage am rande... wie hast du's denn geschafft den gesammten Speicher voll zu bekommen? Hast du so wenig davon oder laufen bei dir einfach zu viele Programme? Ich glaub diese Exception tritt nicht sehr oft auf...
@deathbyaclown:
Entwerder kennst dus "zu Genüge" oder du kennst es "genügend" ein Mix daraus ist gramatikalisch unkorekt *anlfam*
die Fehlermeldung kann mal vorkommen wenn mit viel Daten gearbeited wird. würde den Code jedoch nochamals auf schlaufen und rekursionen überprüfen, die zu oft laufen.
oder vieleicht Vectoren die anstatt neu gefüllt immer das gleich angefügt wird....
bitte fragts mich das nicht! *gg* hab keine ahnung - also speicher hab ich genügend und programme laufen auch ned viel. ich hab in meinem programm nur fälschlicherweise eine if-anweisung gehabt, und die dann in eine while-schleife gemacht, und auf einmal kam dann diese fehlermeldung. eh in der methode vom blocksatz-programm (steht in meiner anderen frage).
nämlich bei der äußeren if-bed. von
Code:
if (buf.charAt(i)==' ') {
if (buf.charAt(i+1)!=' ') {
buf.insert(i,' ');
x--;
}
i++;
}
da würde doch ein while gehören... i kenn mi einfach hint und vorn nicht mehr aus... :cry:
if (buf.charAt(i)==' ') { // wenn bei i ein Leerzeichen
if (buf.charAt(i+1)!=' ') { // und auch bei i+1
buf.insert(i,' '); // dan füg es an der stelle i ein
// oha, bei i, i+1 und i+2 sind leerzeichen
x--;
}
i++; // hier setzt du i auf i+1, aber bei i+1 und i+2 sind sicher ' '
// im nächsten durchlauf gehst du wieder rein und so weiter ...
}
ich glaub du hast übersehen, dass in der zweiten zeile != und nicht == steht - oder? ich hab mir gedacht, dass er so automatisch zum letzten leerzeichen geht und erst dort dann das nächste einfügt (zb) bei i=12. dann erhöht er i um 1, also i=13, und an der stelle 13 fängt dann ja schon das nächste wort an. oder lieg ich da falsch?
du hast Recht, aber vielleicht war mein Argument trotzdem
brauchbar
Code:
if (buf.charAt(i)==' ') { // wenn bei i ein Leerzeichen
////////////////////////
if (buf.charAt(i+1)!=' ') { // und bei i+1 KEINES
buf.insert(i,' '); // dan füg es an der stelle i ein
// jetzt bei i, i+1 Leerzeichen, bei i+2 keines
x--;
}
////////////////////////////
i++; // hier setzt du i auf i+1, und zwar immer dann, wenn
// bei i ein Leerzeichen war
// wenn wir aber im != Zweig waren, dann ist
// bei dem neuen Index i+1 ein Blank
// und bei i+2 keines
// also springt er SICHER wieder in den != Zweig
}
ah... war ein scherz... mehr speicher ist zwar auch ne Möglichkeit, man sollte aber das nur im letzten Fall, wenn keinen Optimierung mehr möglich ist tun....
supa, jetzt kommt wenigstens mal diese komische fehlermeldung nicht mehr. jetzt hab ich nur noch das problem, dass alles in allem erst nicht funktioniert!
warum geht er denn in die äußerste schleife nicht noch einmal hinein, wenn noch leerzeichen zum verteilen übrig sind (x!=0)???? i müsste am schluss doch == buf.length() sein.
Code:
int x;
int i;
x = b-buf.length(); //noch zu verteilende Leerzeichen
do {
L:
for (i=0; i<b && x>0; i++) {
while (buf.charAt(i)==' ') {
if (buf.charAt(i+1)!=' ') {
buf.insert(i++,' ');
x--;
}
i++;
}
if (buf.charAt(i+1)==-1) {
break L;
}
}
} while (i==buf.length() && x!=0);