如何将向量中的数字转换为int?我正在尝试将对象数组中的数字转换为if statebt的int值,但我找不到这样做的方法。有谁能告诉我我需要做什么吗?
private static void test() {
Vector<Object> vector = new Vector<Object>();
vector.add(1);
vector.add(2);
vector.add(5);
vector.add(6);
System.out.println("\nThe Vector is: " + vector);
for (int i = 0; i < vector.size(); i++)
{
int d = vector.get(i);
if(d%2 == 0)
{
System.out.println(d);
}
}
我尝试使用强制转换,即(int)
,但它不起作用。我想要的结果是只打印出向量中的奇数。
2条答案
按热度按时间v2g6jxz61#
tl;dr
将
Object
对象转换为Integer
对象。然后让自动装箱隐式地将Integer
对象更改为int
原语。更好的是,修改你的代码:
自动装箱
你说:
我试着用了cast e.i.(int)
像
Vector
这样的集合保存的是对象,而不是原语。当您向这样的集合添加一个原始文字(如1
或5
)时,Java会自动将这些int
值转换为 Package 器类Integer
的对象。这种转换称为自动装箱。换句话说,你的代码:
...相当于调用
Integer.valueOf
,返回一个Integer
对象:调用
vector.get(i)
返回一个对象,而不是一个原语。所以你的演员阵容(int)
没有意义。转换不能跨越基元和对象之间的鸿沟。跨越鸿沟是拳击的工作。Cast
如上所述,您实际上将
Integer
对象放入Vector
中。但是您将Vector
声明为保存超类Object
的对象。检索时,您将得到Object
对象,而不是Integer
对象。必须从
Object
转换为具体类Integer
。如上所述,这个强制转换
(Integer)
与您的强制转换尝试(int)
* 不 * 相同。December特定类型
但这是对不太理想的代码的修复。如果您的集合中包含
Integer
对象,请说明。您不需要在赋值的右侧重复
Integer
类型;编译器可以从左侧推断出该事实。在指定更具体的类型之后,我们不再需要该类型转换。
避免
Vector
类另一个问题:
Vector
是Java最早版本中的一个老类,在Java Collections Framework构建之前。这个类现在是遗留的,正如它的Javadoc中所指出的。SequencedCollection
&ArrayList
相反,使用
SequencedCollection
实现,如ArrayList
。顺便说一句,为变量使用更具描述性的名称。好的名字会让你的代码更容易阅读,更self-documenting。所以类似于
inputs
而不是vector
。List.of
与其多次调用
add
,不如使用List.of
特性来获得更紧凑的代码。List.of
返回的List
对象是不可修改的,不允许添加或删除。在你的情况下很管用。增强
for
循环要简单地循环遍历集合,可以使用增强的
for
循环。现在我们的代码看起来像这样:
结果如下:
输入:[1、2、5、6]
2
6
!
表示 * 不 *你说:
我想要的是只打印出奇数
通过应用
!
翻转if
测试的逻辑。或者,更简单地说,使用
!=
表示“不等于”:你似乎是从一个 * 非常 * 旧的教程工作。我强烈建议使用较新的学习材料。
您可以从Oracle.com提供的免费Java Tutorials开始。这些是Java 8时代的,所以有点过时,但总体上仍然有效。
另外,我强烈推荐凯西·塞拉、伯特·贝茨、特丽莎·吉的Head First Java, 3rd Edition。
流
最后你可能会学会使用流。
就像这样:
或者,这个:
jk9hmnmh2#
在Java中,您试图将
Object
元素直接转换为int
,这将导致编译错误。要实现仅打印向量中的奇数的目标,您需要执行以下步骤:1.遍历
Vector<Object>
。1.检查每个元素是否是
Integer
的示例。1.如果是
Integer
,则将其转换为int
,然后检查它是否为奇数。下面是一个修改过的代码版本,它可以实现这一点:
在这段代码中,我们使用
instanceof
操作符来检查一个元素是否是Integer
的示例。如果是,我们将其转换为int
,然后在打印之前检查它是否是奇数。这样,您将只打印向量中的奇数。