goo*_*ike 1 java compiler-errors arraylist
我正在寻求自助方面的帮助,这是一种矛盾.如何通过解决更多我自己的问题来减少你的好人?
我是Java编程的最后一周,我在学习Java方面面临巨大障碍.我已经阅读了所有的书籍,但我仍然在小小的问题上陷入困境.这就像试图建立一个纸牌屋.我只知道语法的各个部分以及本书所展示的用途.当我把事情结合起来时,我遇到了可怕的障碍.我试着花几个小时来修补它们.sun文档仅显示似乎没有帮助的基本用法
这就是我想要的:
当我尝试某些东西并且它不像下面对数组列表的操作那样工作时,我想找到一个可以显示示例代码的地方或程序,例如向arrayList添加一个额外的类实例.哪里可以简明扼要地学习这一点,而不必为每个语法错误提出问题或2?Google for Java在哪里?是否有一个程序可以解决您的错误并向您展示如何修复它们(或提供建议)?
/tmp/jc_4083/Inventory.java:101: incompatible types
found   : RatedDVD[]
required: java.util.ArrayList
        dvdlist = temp;
                  ^
/tmp/jc_4083/Inventory.java:110: array required, but java.util.ArrayList found
            if (p != dvdlist[i]) {
                            ^
/tmp/jc_4083/Inventory.java:111: array required, but java.util.ArrayList found
                temp[i-adj] = dvdlist[i];
                                     ^
/tmp/jc_4083/Inventory.java:115: incompatible types
found   : RatedDVD[]
required: java.util.ArrayList
        dvdlist = temp;
如果有人有兴趣为我查看它,这是我的这个类的代码:
//Contruct inv and allow for methods add, get, size, sort, and value
import java.util.*;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
public class Inventory
{// class Inventory
    private ArrayList<RatedDVD> dvdlist;// declare dvdlist as ArrayList of RatedDVD
    private int numDVDs;
    public Inventory()
    {// method Inventory
        dvdlist = new ArrayList<RatedDVD>();
    }// end method
    // add & get
    public RatedDVD get(int i){return dvdlist.get(i);}// method get
    public void add(DVD d){
    dvdlist = dvdlist d;
    sort();
    }// method add
    public double value()
    {// method value
        double total = 0.0;
        for (int i = 0; i < dvdlist.size(); i++) 
        {// for every pass thru dvdlist add total
        // [DEBUG] consider enhanced for
            total += get(i).feeValue();
        }
        return total;
    }// end method value
    public void sort()
    {// method sort
    // [DEBUG] consider optimization
    int n = dvdlist.size();
        for (int search = 1; search < n; search++) 
        {// for do the following and increment till dvdlist has been searched
            for (int i = 0; i < n-search; i++) 
            {// for step through comparison for entire dvdlist
                if (dvdlist.get(i).getName().compareToIgnoreCase(dvdlist.get(i+1).getName()) > 0) 
                {// if swap necessary then swap
                    RatedDVD temp = dvdlist.get(i);
                    dvdlist.set(i,dvdlist.get(i+1));
                    dvdlist.set(i+1,temp);
                }// end if swap
            }// end for compareto
        }// end outer for
    }// end method sort
    public int size(){return dvdlist.size();}// method size
    public void save() {
        save(true);
    }
    // save it to C:\data\inventory.dat
    public void save(boolean saveagain) {
        try {
            BufferedWriter w = new BufferedWriter(new FileWriter("c:\\data\\inventory.dat"));
            for (int i = 0; i < size(); i++) {
                RatedDVD dvd = get(i);
                w.write( dvd.getItem() + "\n");
                w.write( dvd.getName() + "\n");
                w.write( dvd.getRating() + "\n");
                w.write( dvd.getUnits() + "\n");
                w.write( dvd.getPrice() + "\n");
                w.write( dvd.value() + "\n");
                w.write( dvd.fee() + "\n");
                w.write( dvd.feeValue() + "\n");
                w.newLine();
            }
            // total value of it
            //w.write( value() + "\n");
            w.close();
        } catch (Exception ex) {
            if (saveagain) {
                new File("c:\\data\\").mkdir(); // make file if doesn't exist
                save(false); 
            }
        }
    }
    public int search(String name) {
        for (int i = 0; i < size(); i++) { // check if name string is equal
            if (get(i).getName().equalsIgnoreCase(name)) return i;
        }
        return -1; // we didn't find anything
    }
    // add a new dvd to the end, increasing the array size
    public void add(RatedDVD p) {
        RatedDVD[] temp = new RatedDVD[dvdlist.size()+1];
        for (int i = 0; i < dvdlist.size(); i++) {
            temp[i] = dvdlist[i];
        }
        temp[temp.length-1] = p; // add it at the end
        dvdlist = temp;
    }
    // remove a DVD from the array, and shrink the array size
    public void delete(RatedDVD p) {
        RatedDVD[] temp = new RatedDVD[dvdlist.size()-1];
        int adj = 0;
        for (int i = 0; i < dvdlist.size(); i++) {
            if (p != dvdlist[i]) {
                temp[i-adj] = dvdlist[i];
            }
            else adj = 1;
        }
        dvdlist = temp;
    }
    public int highestNumber() {
        int numb = 0;
        for (int i = 0; i < dvdlist.size(); i++) {
            if (get(i).getItem() > numb) {
                numb = get(i).getItem();
            }
        }
        return numb;
    }   
}// end class inventory
这dvdlist是一个ArrayList,它实现了Collection接口,而不是一个Array(BTW,这被称为"接口程序,而不是实现"原则,你应该将其dvdlist作为a java.util.List):
private ArrayList<RatedDVD> dvdlist;// declare dvdlist as ArrayList of RatedDVD
看看Collection接口上的方法,您将找到添加和删除元素所需的一切.
所以,要添加一个RatedDVD,你不需要使用一个RatedDVD不适合的临时数组,ArrayList就像你在这里做的那样:
// add a new dvd to the end, increasing the array size
public void add(RatedDVD p) {
    RatedDVD[] temp = new RatedDVD[dvdlist.size()+1];
    for (int i = 0; i < dvdlist.size(); i++) {
            temp[i] = dvdlist[i];
    }
    temp[temp.length-1] = p; // add it at the end
    dvdlist = temp;
}
相反,只需调用add(Object o)方法dvdlist.
要删除RatedDVD实例,请使用remove(Object o)方法dvdlist.
对于search()方法,请考虑使用contains(Object o)on dvdlist.
如果需要迭代集合,请使用迭代器:
for (Iterator iter = dvdlist.iterator(); iter.hasNext();) {
   RatedDVD ratedDVD = (RatedDVD) iter.next();
   //rest of the code block removed
}
或者现在使用Java 5+和Generics更快:
for (RatedDVD ratedDVD : dvdlist) {
   // rest of the code here
}
真的,你需要挖掘Collection Framework.