在主调函数中不要用书组,用可以变长的,如LinkedList 或者 ArrayList 然后作为参数传递

解决方案 »

  1.   

    在被调用的方法中a.add(b);其中a是ArrayList的对象,b是方法中得到的结果数组,这条语句是否就已经把数组b中的元素加入到a中去了???
      

  2.   

    ArrayList本身就是一个动态变长的数组。另外你不能把一个普通数组一下子放到ArrayList里面。
    可以用一个循环,遍历普通数组,一个一个添加到ArrayList里面
      

  3.   

    好像用add方法添加数组元素有问题,JBuilder报错了:cannot resolve symbol:method add(byte)in class......
      

  4.   

    byte是基本类型,而ArrayList是要加对象的,new Byte(b)
      

  5.   

    楼上的你所指的new Byte(b)中的b是数组呢,还是数组元素?可否把数组一次用add方法添加到ArrayList中去????
      

  6.   

    可否把数组一次用add方法添加到ArrayList中去????
    如果是普通数组:那就不可以。
      

  7.   

    但是我把数组名作为参数放到add方法中去,并没有报错是为什么?
      

  8.   

    没有报错,是因为数组本身就是Object,而ArrayList添加的本身就是Object,这就是语言本身不太好的地方,sun一直吹嘘说,把错误尽可能的在编译期发现。不过,最新的jdk1.5中的范型编程可以很好的解决这个问题。
    你把你的程序那出来,给你改改把
      

  9.   

    这就是那个进行文件分解的方法:
    //对单个png文件进行分解;
      void getIdatAndPlte(File pngFile, ArrayList headerAndIdat, ArrayList plte) {
        RandomAccessFile is = null;
        ByteArrayOutputStream bHeaderAndData = new ByteArrayOutputStream();
        ByteArrayOutputStream bPlte = new ByteArrayOutputStream();
        byte[] fileSignature = new byte[8]; //存放png头部8个字节的签名域;
        byte[] header = new byte[3];
        String chunkType = "";
        int chunkLength = 0;
        String str = ""; //结果提示;
        try {
          is = new RandomAccessFile(pngFile, "r");
          is.seek(0);
          if (fileSignature[0] == -119 && fileSignature[1] == 80 &&
              fileSignature[2] == 78 && fileSignature[3] == 71 &&
              fileSignature[4] == 13 && fileSignature[5] == 10 &&
              fileSignature[6] == 26 && fileSignature[7] == 10) {
            is.skipBytes(8); //跳过头数据块的长度和类型共8个字节;
            header[1] = (byte) is.readInt(); //宽度;
            header[2] = (byte) is.readInt(); //高度;
            header[0] = (byte) is.readByte(); //色深;
            bHeaderAndData.write(header); //写入文件头信息;
            for (; ; ) {
              chunkLength = is.readInt();
              for (int i = 0; i < 4; i++) {
                chunkType += (char) is.readByte();
              } //获得数据块的类型码;
              if (chunkType.compareTo("IDAT") == 0) {
                byte[] chunkData = new byte[chunkLength];
                is.read(chunkData, 0, chunkLength);
                bHeaderAndData.write(chunkData); //将数据块数据写入字节数组;
                bHeaderAndData.flush();
                is.skipBytes(4);
              }
              else if (chunkType.compareTo("PLTE") == 0) {
                byte[] plteData = new byte[chunkLength];
                is.read(plteData, 0, chunkLength);
                bPlte.write(plteData);
                bPlte.flush();
                is.skipBytes(4);
              }
              else {
                is.skipBytes(chunkLength + 4); //跳过本数据块;
              }
              if (chunkType.compareTo("IEND") == 0) {
                break;
              }
            }        //下面这两个for循环就是按照你说的那样遍历插入!
            byte[] temp = bHeaderAndData.toByteArray();
            for (int i = 0; i < temp.length; i++) {
              headerAndIdat.add(new Byte(temp[i]));
            }
            temp = bHeaderAndData.toByteArray();
            for (int j = 0; j < temp.length; j++) {
              plte.add(new Byte(temp[j]));
            }              str = pngFile + "文件分解成功";
            Frame1.mainFrame.setLable(str);      }
          else {
            str = pngFile + "不是png文件";
            Frame1.mainFrame.setLable(str);
          }    }
        catch (IOException e) {}
        finally {
          try {
            is.close(); //关闭文件输入流;
            bHeaderAndData.close(); //关闭文件头和数据块字节数组流
            bPlte.close(); //关闭调色板字节数组流;      }
          catch (IOException e) {}
        }  }
      

  10.   

    headerAndIdat.add(new Byte(temp[i]));
    这样是正确的。
    假设是这样的:
    main()
    {
       ArrayList al1=new ArrayList();
       ArrayList al2=new ArrayList();
       getIdatAndPlte(pngFile, al1, al2);
       //上面的函数调用完了后,al1,al2中就有你要的数据了。
       for(int i=0;i<al1.size();i++)
       {
          byte b=(Byte)al1.get(i).valueOf();
        }
      

  11.   

    谢谢楼上的,不过这个好像有问题:byte b=(Byte)al1.get(i).valueOf();其中的b应该是数组类型吧?
    是否是:b[i]=(Byte)al1.get(i).valueOf();?
      

  12.   

    谢谢楼上的,不过这个好像有问题:byte b=(Byte)al1.get(i).valueOf();其中的b应该是数组类型吧?
    是否是:b[i]=(Byte)al1.get(i).valueOf();?关于b是什么,看你的需要了.
    你的问题解决了吗?
      

  13.   

    按照你提示的方法应该算解决了,谢谢了!
    另外问你一个问题:file是一个文件夹,File files[] =file.listFiles();那么files数组中包含的文件是以什么方式排列的?以名字?
      

  14.   

    public String[] list()
    There is no guarantee that the name strings in the resulting array will appear in any specific order; they are not, in particular, guaranteed to appear in alphabetical order.
    这是官方文档的标准解释。
      

  15.   

    byte b=(Byte)al1.get(i).valueOf();这条语句好像有问题,后面那个valueOf()好像没有这个方法呢?
    关于那个文件顺序的问题,我如果想按照一定的顺序排列,比如:000.png,001.png,002.png......
    该如何处理?
      

  16.   

    byte b=(Byte)al1.get(i).valueOf();这条语句好像有问题,后面那个valueOf()好像没有这个方法呢?
    可能有问题,我直接回复的,没有调试。:)
    关于那个文件顺序的问题,我如果想按照一定的顺序排列,比如:000.png,001.png,002.png......
    该如何处理?
    Collections.sort(list);
    应该是这个
      

  17.   

    byte b=(Byte)al1.get(i).valueOf();这条语句好像有问题,后面那个valueOf()好像没有这个方法呢?
    可能有问题,我直接回复的,没有调试。:)byte b=((Byte)al1.get(i)).valueOf();
      

  18.   

    现在问题是在主调方法中如何通过ArrayList获得其包含的数组元素!
    因为你这条语句有错:byte b=((Byte)al1.get(i)).valueOf();不知道正确的该如何实现!
      

  19.   

    在主调方法中,我这样实现对ArrayList中的数组元素进行读取如何:
           temgetdata=new byte[hAndIdata.size()];
          for (int k = 0; k < hAndIdata.size(); k++) {      //hAndIdata是ArrayList对象  
            temgetdata[k] = Byte.parseByte(hAndIdata.get(k).toString()) ;
          }
      

  20.   

    个人决得这条语句不是很好:temgetdata[k] = Byte.parseByte(hAndIdata.get(k).toString()) ;
    各位可有更地道一点的???