【发布时间】:2009-09-09 22:26:48
【问题描述】:
我在寻求自助方面的帮助,这有点矛盾。我如何通过解决更多我自己的问题来少打扰你们这些好人?
我在 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
【问题讨论】:
-
好标题编辑!谢谢!
-
嗯,你指的程序也存在:它叫人脑 :) 更严重的是,你不明白提供的例子中的问题吗?
-
我知道它需要一个数组来分配 temp ,但我正在使用一个 arrayList 并且我不想改变它。那么如何将新 DVD 分配给 arrayList。我不明白。我不想将其更改为在其他地方引起更多问题的数组。我的大脑有太多错误。颅内丢包。我需要更好地解决这个问题,我猜编译错误不够详细或指向正确的方向
-
问题是编译器消息只有在你理解了语言的基本概念之后才会变得有用。有没有人真正通过首先看他们的正式语法来学习编程语言?任何人?曾经吗?
-
@rmeador,我同意它们是正确的,除非您已经了解该语言的语法,否则它们没有帮助。换句话说,如果您不知道根本问题是什么,那么错误不会教育您。那是我的观点。一旦你知道了语法,那么具体的错误可能有助于理解违反语法的具体方式,没错,但它无助于你到达那里。它是由高级程序员(编译器编写者)编写的高级消息。
标签: java arraylist compiler-errors