Hallo ich habe 2 Klassen voll fertig ausprogrammiert die auch so keine Fehler enthalten ala ";" vergessen oder so aber beim kompilieren wirft es mir einen Fehler das irgendwas nicht stimmt mit "Java Heap Space". Ich bin prog anfänger und hab keine Ahnung wie ich das ausbessern soll =(
Könnte das bitte mal jemand komplieren und mir sagen wie ich den Fehler ausbessern muss, wäre wirklich super!
mfg bd
Ich konnte keinen button finde um die ganzen .java dateien einfach anzuhängen deshalb das ganze stück =/
Könnte das bitte mal jemand komplieren und mir sagen wie ich den Fehler ausbessern muss, wäre wirklich super!
mfg bd
Java:
public class AsciiImage{
private int hoehe;
private int breite;
String image;
public AsciiImage(){
int breite = 0;
int hoehe = 0;
image = "";
}
public boolean addLine(String line){
if (line.length() < 1) {
return false; }
else if (breite == 0) {
breite = line.length(); }
else if (line.length() != breite) {
return false; }
image = image + line;
hoehe ++;
return true;
}
// gibt die Breite des Bildes (die Länge der Zeilen) zurück.
public int getWidth(){
return breite;
}
// gibt die Höhe des Bildes (die Anzahl der Zeilen) zurück.
public int getHeight(){
return hoehe;
}
// Hier wird bekannt gegeben welcher char an der bestimmten Koordinate zu finden ist.
private char getPixel(int x, int y){
char place = image.charAt(breite*y +x);
return place;
}
// Hier wird der char auf der gewünschten Stelle mit dem gewünschten char vertauscht
private void setPixel(int x, int y, char c){
image = image.substring(0, breite*y +x) + c + image.substring ((breite*y +x +1), image.length());
}
// gibt eine lesbare Darstellung des ASCII-Bildes zurück. Die einzelnen Zeilen sollen dabei
// durch Zeilenumbrüche ‘\n’ getrennt werden.
public String toString(){
String temp = "";
for (int i = 0; i < hoehe; i++) {
temp += image.substring((breite*i), (breite * (i+1))) + "\n";
}
return temp.substring(0, temp.length());
}
// gibt zurück wieviele unterschiedliche Zeichen im Bild vorkommen. So enthält das einzeilige
// Bild abaaabac 3 unterschiedliche Zeichen.
public int getUniqueChars(){
int anzahl = 0;
String chars = "";
for (int i = 0; i < image.length(); i++) {
char aktuell = image.charAt(i);
if(!chars.contains(String.valueOf(aktuell))) {
chars += chars + aktuell;
}
}
anzahl = chars.length();
return anzahl;
}
// dreht das Bild vertikal um, sprich es vertauscht die Zeilen des Bildes (die erste mit der
// letzten, die zweite mit der vorletzten, usw.)
public void flipV(){
//Hier werden die temporären Linien eingespeichert.
String temp = "";
//In flip wird line hineinkopiert und am Ende in pic gespeichert.
String flipped = "";
for(int i = hoehe-1; i>=0; i--){
temp = image.substring((breite*i),breite*(i+1));
flipped += temp;
}
image = flipped;
}
// vertauscht Zeilen und Spalten des Bildes, sprich aus der ersten Zeile im Bild wird die erste
// Spalte usw. Dabei ändern sich Höhe und Breite des Bildes (vgl. Matrix_(Mathematik)). Diese
// Methode muss sicherstellen, dass abhängige Eigenschaften des Bildes (Höhe, Breite)
// aktualisiert werden.
public void transpose(){
//Im String transpose wird gearbeitet. Nach Beendigung wird er in pic gespeichert.
String transponiert = "";
int change = 0;
// Der erste Loop ist für die Breite
for(int i = 0; i < breite;i++){
// Der zweite Loop ist für die Höhe
for(int j = 0; j < hoehe;j++){
transponiert = transponiert + getPixel(i,j);
}
}
image = transponiert;
// Höhe und Breite werden vertauscht
change = breite;
breite = hoehe;
hoehe = change;
}
// Ersetzt das Zeichen an der Position (x,y) mit dem Zeichen c und ruft sich ggfs. selbst
// rekursiv auf (mit neuen Werten von (x,y) die den Nachbarpositionen entsprechen). Die Methode
// implementiert den rekursiven Floodfill Algorithmus (siehe Runde 3).
public void fill(int x, int y, char c){
if ( x > breite - 1 || y > hoehe - 1) {
System.out.println("OPERATION FAILED");
System.exit(0);
}
char aktuell = getPixel(x,y);
setPixel(x,y,c);
if (c == aktuell) {
return;
}
//Nach rechts schauen
if(x<breite-1 && getPixel(x+1,y)==aktuell){
fill(x+1,y,c);
}
//Nach links schauen
if(x>0 && getPixel(x-1,y)==aktuell){
fill(x-1,y,c);
}
// Nach unten schauen
if(y>0 && getPixel(x,y-1)==aktuell){
fill(x,y-1,c);
}
// Nach oben schauen
if(y<hoehe-1 && getPixel(x,y+1)==aktuell){
fill(x,y+1,c);
}
}
// In AsciiImage soll die Methode public boolean isSymmetricH() implementiert werden. Diese
// überprüft, ob das Bild horizontal symmetrisch ist - sprich ob jede Zeile für sich
// symmetrisch ist (oder anders formuliert: ob jede Zeile ein Palindrom ist - vgl. Palindrom).
// Diese Methode soll aufgerufen werden, falls der Befehl symmetric-h eingegeben wird. Das
// Ergebnis (true/false) soll dann unmittelbar (analog zum Befehl uniqueChars noch vor dem
// Bild) in einer eigenen Zeile ausgegeben werden.
}
Java:
import java.util.*;
public class AsciiShop{
//Hier wird vom Scanner ausgelesen und auch die Ausgabe findet hier statt.
public static void main (String args [])
{
int zeilen = 1;
String line;
Scanner eingabe = new Scanner(System.in);
AsciiImage ascii = new AsciiImage();
if( eingabe.hasNext()){
if( eingabe.next().equals( "read")) {
if(eingabe.hasNextInt()) {
zeilen = eingabe.nextInt();
}else {System.out.println ("INPUT MISMATCH");
return; }
}else {System.out.println ("INPUT MISMATCH");
return; }
}else {System.out.println ("INPUT MISMATCH");
return; }
eingabe.nextLine();
for (int i = 0; i < zeilen; i++) {
line = eingabe.nextLine();
if (ascii.addLine(line) == false) {
System.out.println("INPUT MISMATCH");
return;
}
}
while (eingabe.hasNext()) {
String methode = eingabe.next();
if( methode.equals ("flip-v")) {
ascii.flipV();
}
else if (methode.equals ("fill")) {
int x = eingabe.nextInt();
int y = eingabe.nextInt();
char c = eingabe.next().charAt(0);
ascii.fill(x,y,c);
}
else if (methode.equals ("uniqueChars")) {
System.out.println(ascii.getUniqueChars());
}
else if (methode.equals ("transpose")) {
ascii.transpose();
}
else { System.out.println("INPUT MISMATCH");
return;
}
}
System.out.println(ascii.toString());
System.out.print(ascii.getWidth() + " ");
System.out.println(ascii.getHeight());
}
}
Ich konnte keinen button finde um die ganzen .java dateien einfach anzuhängen deshalb das ganze stück =/