Java代码 - ArrayIndexOutofBoundsException

时间:2014-06-03 00:34:20

标签: math

我编写了以下代码并继续遇到此错误:

线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:0     at yournamep3.Yournamep3test.main(Yournamep3test.java:23)

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;

public class Yournamep3test { 


    public static void main(String[] args) {

        // Check if target file exists
        File targetFile = new File(args[0]);


        try {

            PrintWriter out = new PrintWriter(targetFile);
            out.write("\r\nStringed musical Instrument program");

            for (int arrayIndex = 0; arrayIndex < 10; arrayIndex++) {

                out.write("\r\n\r\n");              
                out.write("\r\nCreating new Stringed Musical Instrument object now..............");
                Yournamep3 violinInstrument = new Yournamep3();

                violinInstrument.setNameOfInstrument("Violin # " + (arrayIndex+1));

                out.write("\r\nCreated instrument with name - "
                        + violinInstrument.getNameOfInstrument());

                int num = violinInstrument.getNumberOfStrings();
                out.write("\r\nNumber of strings in instrument is " + num);

                out.write("\r\nNames of String are ");
                String strings[] = violinInstrument.getStringNames();
                for (int counter = 0; counter < num; counter++) {
                    out.write("\r\n" + strings[counter]);
                }

                out.write("\r\nIs the Instrument playing - "
                        + violinInstrument.isPlaying());
                out.write("\r\nIs the Instrument tuned - "
                        + violinInstrument.isTuned());

                out.write("\r\nTuning now.........");

                violinInstrument.setTuned(true);
                out.write("\r\nIs the Instrument tuned - "
                        + violinInstrument.isTuned());

                out.write("\r\nCalling the Instrument play  method now..");
                violinInstrument.startPlayInstrument();
                out.write("\r\nIs the Instrument playing - "
                        + violinInstrument.isPlaying());



                out.write("\r\nStopping playing of instrument..............");
                violinInstrument.stopPlayInstrument();
                out.write("\r\nIs the Instrument playing - "
                        + violinInstrument.isPlaying());


            }
            out.close();
        } catch (IOException e) {
        }
    }
}

我认为问题在于第23行。任何建议都会受到赞赏,谢谢。

这是代码yournamep3

的另一部分

公共类Yournamep3 {

//fields to determine if the instrument is isTuned,
private boolean isTuned;

//如果仪器当前正在播放。    private boolean isPlaying;

私人字符串名称;

private int numberOfStrings = 4; //字符串数    private String nameofStringsInInstrument [] = {“E”,“C”,“D”,“A”}; //一个字符串名称数组

//A constructor method that set the isTuned and currently isPlaying fields to false.
public Yournamep3() {
    this.isTuned = false;
    this.isPlaying = false;
}


/**
 * @return the name
 */
public String getNameOfInstrument() {
    return name;
}

/**
 * @param name the name to set
 */
public void setNameOfInstrument(String nameOfInstrument) {
    this.name = nameOfInstrument;
}


// Other methods

public boolean isPlaying() {
    return isPlaying;
}

public void setPlaying(boolean playing) {
    this.isPlaying = playing;
}

public boolean isTuned() {
    return isTuned;
}

public void setTuned(boolean isTuned) {
    this.isTuned = isTuned;
}

public void startPlayInstrument() {
    System.out.println("The Instrument is now Playing.");
    isPlaying = true;
}

public void stopPlayInstrument() {
    System.out.println("The Instrument is not Playing anymore.");
    isPlaying = false;
}

public void startTuneInstrument() {
    System.out.println("The Instrument is Tuned.");
    isTuned = true;
}

public void stopTuneInstrument() {
    System.out.println("The Instrument is not Tuned.");
    isTuned = false;
}



public int getNumberOfStrings() {
   return this.numberOfStrings ;
}

public String[] getStringNames() {
    return nameofStringsInInstrument;
}  

}

2 个答案:

答案 0 :(得分:0)

我会查看你的violinInstrument的getStringNames()方法。在我看来,它没有正确填充你的String数组,或者getNumberOfStrings()方法没有给出正确数量的字符串。如果您为此提供代码,我可以提供更多帮助。

答案 1 :(得分:0)

第23行似乎是

Yournamep3 violinInstrument = new Yournamep3();

如果是这种情况,你应该检查Yournamemp3的构造函数

由于第23行是

File targetFile = new File(args [0]); 

表示您的args对象为空。抛出ArrayIndexOutOfBoundException以指示已使用非法索引访问数组。 0是非法索引。