Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从Object[]转换为int[]_Java_Vector_Cosine Similarity - Fatal编程技术网

Java 如何从Object[]转换为int[]

Java 如何从Object[]转换为int[],java,vector,cosine-similarity,Java,Vector,Cosine Similarity,我想将myVector传递给另一个类(Case.java),但我收到了这种错误消息。类型不匹配:无法从Object[]转换为int[]。有人能告诉我怎么解决这个问题吗 User.java JButton btnNewButton = new JButton("Process"); btnNewButton.setBounds(360, 296, 89, 23); contentPane.add(btnNewButton); btnNewButton.addActionListener(new

我想将
myVector
传递给另一个类(
Case.java
),但我收到了这种错误消息。类型不匹配:无法从Object[]转换为int[]。有人能告诉我怎么解决这个问题吗

User.java

JButton btnNewButton = new JButton("Process");

btnNewButton.setBounds(360, 296, 89, 23);
contentPane.add(btnNewButton);

btnNewButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        Integer a = (comboBox.getSelectedIndex() + 1);
        Integer b = (comboBox_1.getSelectedIndex() + 1);
        Integer day = (comboBox_2.getSelectedIndex() + 1);
        ArrayList<Integer> myVector = new ArrayList<Integer>();
        myVector.add(a);
        myVector.add(b);
        myVector.add(day);

        Case ca = new Case();
        try {
            ca.addPlace(myVector);
            LoginGUI um = new LoginGUI();
            um.setVisible(true);

        } catch (Exception e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
    }
}
public class Case {

    public Case() {
        // TODO Auto-generated constructor stub
    }

    public void addPlace(ArrayList<Integer> h) {

        int vec1[] = h.toArray();
        int vec2[] = {2, 1, 3, 2};

        double cos_sim = cosine_similarity(vec1, vec2);
    }
JButton btnNewButton=新JButton(“过程”);
btnNewButton.setBounds(360,296,89,23);
contentPane.add(btnewbutton);
addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
整数a=(comboBox.getSelectedIndex()+1);
整数b=(组合框_1.getSelectedIndex()+1);
整数天=(组合框2.getSelectedIndex()+1);
ArrayList myVector=新的ArrayList();
添加(a);
添加(b);
myVector.add(天);
案例ca=新案例();
试一试{
ca.addPlace(myVector);
LoginGUI-um=新的LoginGUI();
可见(真);
}捕获(异常e1){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
}
}
Case.java

JButton btnNewButton = new JButton("Process");

btnNewButton.setBounds(360, 296, 89, 23);
contentPane.add(btnNewButton);

btnNewButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        Integer a = (comboBox.getSelectedIndex() + 1);
        Integer b = (comboBox_1.getSelectedIndex() + 1);
        Integer day = (comboBox_2.getSelectedIndex() + 1);
        ArrayList<Integer> myVector = new ArrayList<Integer>();
        myVector.add(a);
        myVector.add(b);
        myVector.add(day);

        Case ca = new Case();
        try {
            ca.addPlace(myVector);
            LoginGUI um = new LoginGUI();
            um.setVisible(true);

        } catch (Exception e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
    }
}
public class Case {

    public Case() {
        // TODO Auto-generated constructor stub
    }

    public void addPlace(ArrayList<Integer> h) {

        int vec1[] = h.toArray();
        int vec2[] = {2, 1, 3, 2};

        double cos_sim = cosine_similarity(vec1, vec2);
    }
公共类案例{
公案({
//TODO自动生成的构造函数存根
}
公共无效地址(ArrayList h){
int vec1[]=h.toArray();
int vec2[]={2,1,3,2};
双余弦相似性=余弦相似性(vec1,vec2);
}

我们无法将
对象[]
转换为
int[]
。这两个类是水平的

如果需要,可以将
对象[]
转换为
整数[]
包装类,并使用显式下转换

        Object[] obj ={10,30,20,100};
       Integer[] in = (Integer[]) obj;

将新数组传递给
toArray
方法。如下所示:

Integer[] vec = h.toArray(new Integer[h.size()]);

使用Java8,这是可能的:

int[] vec1 =  h.stream().filter(t -> t != null).mapToInt(t -> t).toArray();

我想您必须执行手动转换:

ArrayList<Integer> h = new ArrayList<>();
int[] result = new int[h.size()];
int index = 0;
for(int val:h){
    result[index++] =val; 
}
ArrayList h=新的ArrayList();
int[]结果=新的int[h.size()];
int指数=0;
用于(int val:h){
结果[index++]=val;
}

当然,如果您在原始ArrayList“h”中有空值,它可能会抛出NullPointerException。首先,您没有将
对象[]
转换为
int[]
,您在这里所做的是
ArrayList
转换为
int[]
。您得到的错误无法从对象[]转换为int[]是因为
Integer[]
不能直接转换为
int[]

因此,任何方法都不可能直接实现这一点。但您可以像这样做:-

        int[] vec1= new int[h.size()];
        int index = 0;
        for(int i : h){
            vec1[index] = i;
            index++;
        }
但是,如果您可以将
int[]vec1
更改为
integer[]vec1
,则可以执行以下操作:-

 Integer[] vec1 =  h.toArray(new Integer[h.size()]);

这可能会引发NullPointerException。您需要过滤掉null值,或者在映射函数中处理它们。可能的重复项将不起作用。Gives
java.lang.ClassCastException:[Ljava.lang.Object;无法转换为[Ljava.lang.Integer;
这就是答案。