【问题标题】:how to convert from Object[] to int[]如何从 Object[] 转换为 int[]
【发布时间】:2015-10-20 05:57:43
【问题描述】:

我想将 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();
        }
    }
}

Case.java

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);
    }

【问题讨论】:

标签: java vector cosine-similarity


【解决方案1】:

使用 Java8 这将是可能的:

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

【讨论】:

  • 这可能会引发 NullPointerException。您需要过滤掉空值,或者在映射函数中处理它们。
【解决方案2】:

首先,您不是将Object[] 转换为int[],而是将ArrayList&lt;Integer&gt; 转换为int[]。您得到的错误 cannot convert from Object[] to int[] 是因为 Integer[] 不能直接转换为 int[]

所以这个直接用任何方法都是不可能的。但你可以这样做:-

        int[] vec1= new int[h.size()];
        int index = 0;
        for(int i : h){
            vec1[index] = i;
            index++;
        }

但是,如果您可以将 int[] vec1 更改为 Interger[] vec1,那么您可以这样做:-

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

【讨论】:

    【解决方案3】:

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

    如果您愿意,可以使用显式 向下转换Object[] 转换为 Integer[] Wrapper 类。

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

    【讨论】:

    • 这行不通。给java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;
    【解决方案4】:

    将一个新数组传递给toArray 方法。像这样:

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

    【讨论】:

    • 这就是答案。
    【解决方案5】:

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

    ArrayList<Integer> h = new ArrayList<>();
    int[] result = new int[h.size()];
    int index = 0;
    for(int val:h){
        result[index++] =val; 
    }
    

    当然,如果原始 ArrayList "h" 中有空值,它可能会抛出 NullPointerException。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-03
      • 1970-01-01
      • 2022-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多