我有一个名为Polynomial的类,其中一个ArrayList由term对象组成,有一个外部文件,由我的测试类中的Scanner对象读取。扫描仪读取4个不同关键词的行并相应地动作。恩。 INSERT 3 2.将调用我的插入方法并打印出3x ^ 2。现在我有一个带有两个参数的delete方法。当我在测试类中调用该方法时没有任何反应,同样的东西被打印出来并且没有被删除。我一起错过了什么或做错了吗?非常感谢任何帮助。
public void delete (int coeff, int expo)
{
for (int i = 0; i<terms.size(); i++)
{
Term current = terms.get(i);
terms.remove(current.getCoeff());
terms.remove(current.getExpo());
}
}
我还有一个创建术语对象的Term类,并且有两种方法来获取系数和指数。
以下是我的测试类的片段:
public static void main(String[] args) throws IOException
{
// TODO code application logic here
Polynomial polyList = new Polynomial();
Scanner inFile = new Scanner(new File("operations2.txt"));
while(inFile.hasNext())
{
Scanner inLine = new Scanner(inFile.nextLine());
String insert = inLine.next();
if(insert.equals("INSERT"))
{
int coeff = inLine.nextInt();
int expo = inLine.nextInt();
polyList.insert(coeff, expo);
}
if(insert.equals("DELETE"))
{
int coeff = inLine.nextInt();
int expo = inLine.nextInt();
polyList.delete(coeff, expo);
}
}
System.out.println(polyList.toString());
}
}
编辑:这是扫描程序类正在读取的.txt文件的示例:
INSERT 3 2
INSERT 4 4
INSERT 1 6
INSERT 2 0
INSERT 5 2
INSERT 6 3
PRODUCT
DELETE 3 2
INSERT 2 7
DELETE 4 4
INSERT 4 10
编辑:这是Term类:
class Term
{
//instance vars
private int coefficient;
private int exponent;
public Term(int coeff, int expo)
{
coefficient = coeff;
exponent = expo;
}
public int getCoeff()
{
return coefficient;
}
public int getExpo()
{
return exponent;
}
@Override
public int hashCode()
{
return coefficient + exponent;
}
@Override
public boolean equals(Object o)
{
if (!(o instanceof Term))
{
return false;
}
Term t = (Term)o;
return coefficient == t.coefficient && exponent == t.exponent;
}
}
答案 0 :(得分:0)
您不是要从术语列表中删除Term
,而是尝试删除系数和指数。
for (int i = 0; i<terms.size(); i++)
{
Term current = terms.get(i); // Your list contains Term objects
terms.remove(current.getCoeff()); // but you are try to removing a coefficient
terms.remove(current.getExpo()); // and an exponent
}
请注意,删除此方式无效,因为i
会越来越大,您的列表会越来越小。因此,当您删除最后一个术语(例如i = terms.size() - 1
)时,列表中只剩下1个项目。如果您要删除所有项目,请考虑列表的clear
方法。
答案 1 :(得分:0)
为什么你的删除方法采用参数coeff和expo .... ......它对它们没有任何作用。
事实上,删除方法看起来很可疑。您需要提供有关数组术语的更多详细信息,现在它没有任何意义。
rolfl
答案 2 :(得分:0)
如果您的delete()
方法试图删除具有指定系数的Twrm,我推荐以下内容:
equals()
方法返回true
hashCode()
方法以基于相同的两个值返回哈希值由于equals()
方法应进行值比较,因此这种实现非常合理。
完成后,您的删除方法就变成了一行:
terms.remove(new Term(coeff, expo));
实现应如下所示:
// in the Term class
@Override
public boolean equals(Object o) {
if (!(o instanceof Term)
return false;
Term t = (Term)o;
return coeff == t.coeff && expo == t.expo;
}
尽管为了使代码工作并不严格要求覆盖hashCode
方法,但这是一个很好的做法,所以这里有一个示例impl:
@Override
public int hashCode() {
return 31 * coeff + expo;
}