获取不兼容的类型错误

Posted

技术标签:

【中文标题】获取不兼容的类型错误【英文标题】:Getting incompatible types errors 【发布时间】:2018-05-07 18:55:07 【问题描述】:

各位程序员大家好。我正在学习 Java 作为一个潜在的职业道路,但我现在把它作为一种爱好(因为没有更好的词);尽管我不认为自己是初学者,但我遇到了一些我认为是简单错误但由于某种原因我无法弄清楚的问题。

这是我正在关注的代码:

import java.io.*;

import java.util.*;

public class ID3


        int []array = new int[values.size()];
        for (int i=0; i< array.length; i++) 
            String symbol = (String)values.elementAt(i);
            array = domains[attribute].indexOf(symbol);//Type Error
        
        values = null;
        return array;
    

    public void decomposeNode(TreeNode node) 
        double bestEntropy=0;
        boolean selected=false;
        int selectedAttribute=0;
        int numdata = node.data.size();
        int numinputattributes = numAttributes-1;
        node.entropy = calculateEntropy(node.data);
        if (node.entropy == 0) return;

        for (int i=0; i< numinputattributes; i++) 
            int numvalues = domains.size(); //Cannot resolve method (?)
            if ( alreadyUsedToDecompose(node, i) ) continue;
            double averageentropy = 0;
            for (int j=0; j< numvalues; j++) 
                Vector subset = getSubset(node.data, i, j);
                if (subset.size() == 0) continue;
                double subentropy = calculateEntropy(subset);
                averageentropy += subentropy *
                        subset.size();
            




        domains = new Vector[numAttributes];
    for (int i=0; i < numAttributes; i++) domains = new Vector();//TYPE ERROR
        attributeNames = new String[numAttributes];
        for (int i=0; i < numAttributes; i++) 
            attributeNames = tokenizer.nextToken(); //TYPE ERROR
        

        .....

            DataPoint point = new DataPoint(numAttributes);

            for (int i=0; i < numAttributes; i++) 

                point.attributes = getSymbolValue(i, tokenizer.nextToken()//TYPE ERROR
                );
            
            root.data.addElement(point);
        
        bin.close();
        return 1;
    


        int numvalues = node.children.length;
        for (int i=0; i < numvalues; i++) 
            System.out.println(tab + "if( " +
                    attributeNames[node.decompositionAttribute] + " == \"" +
                    domains[node.decompositionAttribute].elementAt(i)
                    + "\") " );
            printTree(node.children, tab + "\t"); //Incompatible types
            if (i != numvalues-1) System.out.print(tab + " else ");
            else System.out.println(tab + "");
        
    

    public void createDecisionTree() 
       .....
    

我收到以下错误:

Error:(368, 57) java: incompatible types: java.util.Vector cannot be converted to java.util.Vector[]
Error:(374, 49) java: incompatible types: java.lang.String cannot be converted to java.lang.String[]
Error:(410, 50) java: incompatible types: int cannot be converted to int[]
Error:(449, 71) java: incompatible types: int[] cannot be converted to int
Error:(473, 27) java: incompatible types: ID3.TreeNode[] cannot be converted to ID3.TreeNode

非常感谢您的帮助!

【问题讨论】:

由于您给了我们很多代码,因此很难扫描它并试图找出错误所在。请编辑您的问题并指出错误发生在哪一行(不要只给我们行号,这没有帮助)。更好的是:开始精简代码以缩小错误发生的范围,并发布一个更小的示例。 如果你声明类似Vector[] v; String[] s的东西会出现错误;这里,v 是一个向量的array(所以它有点像二维数组),s 是一个字符串的array。如果您尝试将单个Vector 分配给v,或将单个String 分配给s,它将失败,因为编译器需要一个数组,而不是单个值。 我移除了工作代码,只留下了存在错误的块。还在相应行旁边留下评论以使其更容易。 你剪得太多了。您遇到了涉及domains 的错误,但您消除了声明domains 的部分。幸运的是 SO 让我看到了以前的版本。 array = domains[attribute].indexOf(symbol);: indexOf 返回int,但arrayint 的数组。您无法进行分配,因为类型不匹配。你以为它会做什么? domains.size()domains 是一个数组,而数组没有size 方法。 【参考方案1】:

[] 符号只能用于数组

String[] array = "error";

不编译,因为左边的类型是一个array向量,而右边只有一个single字符串。

【讨论】:

以上是关于获取不兼容的类型错误的主要内容,如果未能解决你的问题,请参考以下文章

Hashmap 错误:不兼容的类型

odata 错误 - 检测到类型不兼容的运算符

NSDateFormatter 不兼容类型错误

如何修复不兼容的块指针类型发送错误?

联合分配的不兼容类型错误

类型的参数与类型错误的参数不兼容[重复]