将代码写入输出文件,以及非公共类型错误

时间:2013-10-31 22:48:22

标签: java output public-method

我在创建一类弦乐器问题时遇到了两个问题。首先要求是:

  1. main代码中输出文件的名称必须是命令行中指定的名称,您可以在其中找到所需的代码。根据要求中的规定,必须在命令行中使用参数启动测试类:
  2. java Mynamep3tst myfilename.txt here myfilename.txt是所有输出必须去的文件。该文件名应在程序中使用,如下所示:

    java.io.File file = new java.io.File(args [0]);

    java.io.PrintWriter output = new java.io.PrintWriter(file);

    当您有要发送到文件的消息时,

    output.println(消息);

    此时我一直收到错误:

    public static void printInstrumentArray(StringInstrument[] instruments)throws Exception{
    
            java.io.File file = new java.io.File(args[0]);
    
            java.io.PrintWriter output = new java.io.PrintWriter(file);
    

    错误说“找不到符号”,我知道它是在我没有声明数组的时候做的。当我声明数组args []时,它说“线程中的异常”主“java.lang.NullPointerException”。

    下一个问题

    1. 当我运行它时,它可以工作,但它不断弹出错误“通过公共API导出非公共类型”。我试过把公开放在“StringInstrument []乐器上;”。但是它会弹出错误“非法操作开始”。

        public static void main(String[] args) throws Exception{//begin main
       //declare instruments
       StringInstrument[] instruments;
      
       //create instrument array
       instruments = createInstrumentArray();
      
       //Print instrument array
       printInstrumentArray(instruments);
        }//end main 
      
        //Create an array of instrument objects
        public static StringInstrument[] createInstrumentArray(){//begin method
          StringInstrument[] instruments = new StringInstrument [10];
      
          //Loop that inputs random integers into the array
              for (int i = 0; i < instruments.length; i++){//begin loop
                  instruments[i] = new StringInstrument();
      
              }//end loop
            return instruments;
            }//End method           
           public static void printInstrumentArray(StringInstrument[] instruments)throws Exception{
      
          java.io.File file = new java.io.File(args[0]);
      
          java.io.PrintWriter output = new java.io.PrintWriter(file);
          //declare and initialize arrays
          String[] instrumentList = new String [10];
          int[] stringNumber = new int [10];
          //input string names into array
          instrumentList[0] = "Guitar";
          instrumentList[1] = "Violin";
          instrumentList[2] = "Bass Guitar";
          instrumentList[3] = "Cello";
          instrumentList[4] = "Banjo";
          instrumentList[5] = "Sitar";
          instrumentList[6] = "Rabab";
          instrumentList[7] = "Viola";
          instrumentList[8] = "Harp";
          instrumentList[9] = "Ukulele";
      
          stringNumber[0] = 5;
          stringNumber[1] = 4;
          stringNumber[2] = 5;
          stringNumber[3] = 4;
          stringNumber[4] = 5;
          stringNumber[5] = 18;
          stringNumber[6] = 3;
          stringNumber[7] = 4;
          stringNumber[8] = 47;
          stringNumber[9] = 4;
              //Print an array of instruments and their actions
              for (int i = 0; i < instruments.length; i++){//begin for loop
                  instruments[i].setInstrumentName(instrumentList[i]); 
                  output.println(instruments[i].instrumentNameDisplay());
                  output.println(instruments[i].numberOfStrings(stringNumber[i]));
                  output.println(instruments[i].tuneInstrument());
                  output.println(instruments[i].playInstrument());    
                  output.println(instruments[i].playInstrumentBand());
                  output.println(" ");
      
              }//end for loop
              output.close();
          }//end method      
          }//end class
      

1 个答案:

答案 0 :(得分:0)

对于第一个问题,您需要将args从main传递给printInstrumentArray作为参数。 args仅对main可见。

至于第二个问题,问题是你有一个声明为public的函数(意味着外部类可以使用它)返回对声明为private的类的实例的引用(意味着外部类不能使用)它)。这是一个矛盾。要么将StringInstrument设为public,要么将createInstrumentArray设为私有。