Java代码报错排查:判断元素奇偶性时出现类型不兼容问题
解决你的Java代码奇偶性判断与集合类型不兼容问题
让我来帮你搞定这两个代码报错,咱们逐个分析:
第一个错误:二元运算符'%'的操作数类型不兼容
你在判断元素奇偶性的时候写了value.length % 2 == 0,这里踩了两个小坑:
- Java里字符串的长度是通过
length()方法获取的,而不是像数组那样用length属性 - 因为你写错成了
length,编译器找不到这个属性,直接把value(String类型)和2(int类型)做取模运算,自然就出现了类型不兼容的错误。
你想要判断的应该是字符串的长度奇偶性对吧?那修正后的判断代码应该是这样:
if (value.length() % 2 == 0) {
第二个错误:ArrayDeque无法转换为ArrayList
你的printMethod方法要求传入ArrayList<String>类型的参数,但你实际传的是ArrayDeque<String>。这俩都是Java集合框架里的实现类,但彼此没有继承关系,所以直接传肯定报错。给你两个靠谱的解决办法:
办法一:让方法支持更多集合类型
把方法的参数改成Collection<String>,这样不管是ArrayList还是ArrayDeque,只要是Collection的实现类都能传,灵活性拉满:
public void printMethod(Collection<String> theList) {
办法二:把ArrayDeque转换成ArrayList再传入
如果不想改方法,就在调用的时候用ArrayList的构造器把队列转成列表:
samp.printMethod(new ArrayList<>(storeQueue));
完整修正后的代码
import java.util.ArrayList; import java.util.ArrayDeque; import java.util.Collection; import java.util.Iterator; import java.util.Random; class ArrayExample { // 用Collection<String>让方法适配更多集合类型 public void printMethod(Collection<String> theList) { String value = null; // 改用迭代器遍历,适配所有Collection实现类 Iterator<String> iterator = theList.iterator(); while (iterator.hasNext()) { value = iterator.next(); // 修正后的奇偶判断逻辑 if (value.length() % 2 == 0) { System.out.println("even"); System.out.println(value); } else { System.out.println("odd"); System.out.println(value); } } } } class Calc { public static void main(String[] args) { ArrayDeque<String> storeQueue = new ArrayDeque<String>(); for (int i = 0; i < 40; i++) { Random rand = new Random(); int value = rand.nextInt((40 - 1) + 1) + 1; String z = new String(new char[value]).replace("\0", "z"); storeQueue.add(z); System.out.println(storeQueue); } ArrayExample samp = new ArrayExample(); // 直接传入ArrayDeque,因为方法参数已改为Collection samp.printMethod(storeQueue); } }
补充个小细节:原代码用theList.get(n)遍历的方式,对ArrayDeque这类非索引友好的集合不适用,所以我改成了迭代器遍历,能适配所有Collection实现类,避免后续再踩坑。
内容的提问来源于stack exchange,提问作者ggame
相关产品推荐
相关产品推荐

