当我尝试在我的ArrayList中找到+删除一个超过两位数的值时,我的方法返回-1(如果找不到该值)。但是,对于低于100的值,它可以正常工作。要使其工作,请键入ArrayList中值的深度(索引)以及要查找的值。当您找到它们时,它会从数组中删除该值。由于某种原因,当值为三位或更多位时,if语句不起作用。
这是我的代码:
import java.util.*;
public class EP {
public static List < Integer > items = new ArrayList < Integer > (Arrays.asList(12, 13, 48, 42, 38, 2827, 827, 828, 420));
public static void main(String[] args) {
moreLines();
System.out.println("Exam List");
for (Integer i: items) {
System.out.println(i);
}
moreLines();
Scanner scan = new Scanner(System.in);
System.out.println("Enter depth");
int depth = scan.nextInt();
moreLines();
System.out.println("Enter value");
int value = scan.nextInt();
moreLines();
System.out.println(mark(depth, value));
}
public static int mark(int depth, int value) {
int ret = -1; //This ensures -1 is returned if it cannot find it at the specified place
for (int i = 0; i < items.size(); i++) {
System.out.println(items.get(i));
/** This is the condition for the value deletion
* If depth and value are correct, it deletes the value
*/
if (items.get(depth) == (Integer) value) {
ret = value;
items.remove(items.get(depth)); //removes ArrayList Item
}
}
moreLines();
System.out.println("Updated Exam List"); //Shows ArrayList with deleted item
for (Integer j: items) {
System.out.println(j);
}
moreLines();
return ret;
}
public static void moreLines() { //Just there for debugging, makes spaces when you run it.
System.out.println(" ");
System.out.println(" ");
}
}
请原谅可怜的评论和布局。在StackExchange中很难正确使用它,复制和粘贴效果不好,所以我不得不手动隔离它。谢谢:))
答案 0 :(得分:2)
问题:
if(items.get(depth) == (Integer)value)
不应将值强制转换为整数。
解决方案:
if(items.get(depth) == value)
简单地取出演员阵容,有条件的人将完成其余的工作。
答案 1 :(得分:0)
我认为问题不在于数字的数字,而在于你所有的3位数字都在最后,而是你要从列表中删除更改深度(索引)的事实。原始列表中的剩余项目。如果你正在迭代它,那么移除一个项目并不是一个好主意。