ArrayIndexOutOfBoundsException bei meinem ersten objektiorientierten Programm

Chrissicat

Mitglied
hey leute!
ich schreib gerade an meinem ersten objektorientierten programm und bin glaub ich fast fertig.
ich soll einen fernseher programmieren, bei dem der benutzer für einen bestimmten kanal einen namen speichern kann, mit anschließendem zappen.
eigentlich sollte er bei einer kanalanzahl von 200 (zb) bei "zapup" vonn 200 auf 0 springen. bzw bei zapdown von 0 auf 200
aber das klappt nicht. er gibt mir dann in zwei zeilen nen fehler aus, in meiner mainmethode und eben in der methode wo ich "getChannelname" machen möchte

wahrscheinlich ist das problem sehr einfach zu lösen, wie ich euch kenne 🙂
danke schon mal

hier der code:
Java:
package fernseher;

public class Fernseher {

    private float diagonale;
    private int x_resolution, y_resolution;
    private String farbe;
    private int numChannels; //anzahl der kanaele
    private String[] channelList;
    private boolean on;
    private int actualChannel;
    private String channelname;
    //...

    Fernseher() {
        diagonale = 110;
        x_resolution = 1890;
        y_resolution = 1080;
        farbe = "ahorn";
        numChannels = 200;

        on = false;
        actualChannel = 0;
        channelList = new String[numChannels];
        for (int i = 0; i < numChannels; i++) {
            channelList[i] = "";
        }
    }

    boolean turnOn() {
        on = true;
        actualChannel = 0;
        return on;
    }

    boolean turnOff() {
        on = false;
        return on;
    }

    boolean getState() {
        return on;
    }

    void zapUp() {
        if (actualChannel == numChannels) {
            actualChannel = 0;
        } else {
            actualChannel++;
        }
    }

    void zapDown() {
        if (actualChannel == 0) {
            actualChannel = numChannels;
        } else {
            actualChannel--;
        }
    }

    String getChannel() {
        return channelList[actualChannel];
    }

    void setName(int channel, String name) {
        channelList[channel] = name;
    }

    int getNumberOfChannels() {
        return numChannels;
    }

    int getActual() {
        return actualChannel;

    }
}

und die mainmethode:
Java:
package fernseher;

import Prog1Tools.IOTools;

public class Main {

    public static void main(String[] args) {
        Fernseher meinFernseher;

        meinFernseher = new Fernseher(); //jetzt erst gibt es den fernseher
        meinFernseher.turnOn();

        char beenden = 'x';
        int channelX;

        System.out.println("Fernseher ist " + meinFernseher.getState());
        for (int i = 0; i < meinFernseher.getNumberOfChannels(); i++) {
            meinFernseher.setName(i, "noName");
        }
        do {
            do {
                channelX = Prog1Tools.IOTools.readInt("Geben Sie den Kanal ein, den Sie benennen wollen: ");
                if (channelX >= meinFernseher.getNumberOfChannels()) {
                    System.out.println("Kanal nicht vorhanden, bitte wiederholen Sie Ihre Eingabe!");
                }
            } while (channelX >= meinFernseher.getNumberOfChannels());
            String channelname = Prog1Tools.IOTools.readString("Geben Sie den Namen für ihren Kanal ein: ");
            meinFernseher.setName(channelX, channelname);
            System.out.println("Ihr " + channelX + " Kanal lautet " + channelname);
            beenden = Prog1Tools.IOTools.readChar("Drücken Sie eine andere Taste, falls Sie einen weiteren Kanal "
                    + "einstellen möchten, oder x um zu beenden: ");
        } while (beenden != 'x');

        System.out.println("Zappen Sie nun beliebig auf oder ab! ");
        char updown;
        do {
            updown = IOTools.readChar("Geben sie a ein um rauf zu zappen, oder b um runter zu zappen: ");
            if (updown == 'a') {
                meinFernseher.zapUp();
            }
            if (updown == 'b') {
                meinFernseher.zapDown();
            }
            System.out.println("Fernseher zeigt Kanal " + meinFernseher.getActual() + " mit Namen " + meinFernseher.getChannel());
            beenden = IOTools.readChar("Geben Sie x ein um nicht mehr zu zappen, andernfalls eine beliebige andere Taste: ");
        } while (beenden != 0);

        meinFernseher.turnOff();
    }
}
 
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 200
at fernseher.Fernseher.getChannel(Fernseher.java:62)
at fernseher.Main.main(Main.java:44)
Java Result: 1

das gibt mir die konsole aus 🙂
 
[JAVA=53]
void zapDown() {
if (actualChannel == 0) {
actualChannel = numChannels;
} else {
actualChannel--;
}
}
[/code]
Ohne jetzt den rest genau durchzugucken: vermutlich sollte das eher
Code:
numChannels-1
heißen.
 

Zurück
Oben