在Java中将Object[]数组转换为int[]数组?

10

目前似乎没有简单的方法实现这个,但是这是我迄今为止做的,如果有人能纠正它并使其正常工作,那将是太好了。“newarray [e] = array [i].intValue();”出错了,“java.lang.Object”类型中找不到名为“intValue”的方法。

/*
Description: A game that displays digits 0-9 and asks the user for a number N.
 It then reverses the first N numbers of the sequence. It continues this until
 all of the numbers are in order.
 numbers

*/

import hsa.Console;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Arrays;


public class ReversalGame3test

{
    static Console c;

    public static void main (String[] args)
{
    c = new Console ();

    c.println ("3. REVERSAL GAME");
    c.println ("");
    c.println ("Displayed below are the digits 0-9 in random order. You must then enter a");
    c.println ("number N after which the computer will reverse the first N numbers in the");
    c.println ("sequence. The goal of this game is to sort all of the numbers in the fewest");
    c.println ("number of reversals.");
    c.println (""); //introduction

    List numbers = new ArrayList ();
    numbers.add ("0");
    numbers.add ("1");
    numbers.add ("2");
    numbers.add ("3");
    numbers.add ("4");
    numbers.add ("5");
    numbers.add ("6");
    numbers.add ("7");
    numbers.add ("8");
    numbers.add ("9");
    Collections.shuffle (numbers);
    Object[] array = numbers.toArray (new String [10]); // declares + shuffles numbers and converts them to array

    c.print ("Random Order: ");
    for (int i = 0 ; i < 10 ; i++)
    {
        c.print ((array [i]) + " ");
    }
    c.println ("");

    boolean check = false;
    boolean check2 = false;
    String NS;
    int N = 0;
    int count = 0;
    int e = -1;
    int[] newarray = new int [10];

    //INPUT
    do
    {
        c.print ("Enter a number: ");
        NS = c.readString ();
        count += 1;

        check = isInteger (NS);
        if (check == true)
        {
            N = Integer.parseInt (NS);
            if (N < 1 || N > 10)
            {
                check = false;
                c.println ("ERROR - INPUT NOT VALID");
                c.println ("");
            }
            else
            {
                c.print ("Next Order: ");
                for (int i = N - 1 ; i > -1 ; i--)
                {
                    e += 1;
                    newarray [e] = array [i].intValue ();
                    c.print ((newarray [e]) + " ");
                }
                for (int i = N ; i < 10 ; i++)
                {
                    e += 1;
                    newarray [e] = array [i].intValue ();
                    c.print ((newarray [e]) + " ");
                }
                check2 = sorted (newarray);
            } // rearranges numbers if valid
        } // checks if N is valid number
    }
    while (check == false);
} // main method


public static boolean isInteger (String input)
{
    try
    {
        Integer.parseInt (input);
        return true;
    }
    catch (NumberFormatException nfe)
    {
        return false;
    }
} //isInteger method


public static boolean sorted (int array[])
{
    boolean isSorted = false;

    for (int i = 0 ; i < 10 ; i++)
    {
        if (array [i] < array [i + 1])
        {
            isSorted = true;
        }
        else if (array [i] > array [i + 1])
        {
            isSorted = true;
        }
        else
            isSorted = false;

        if (isSorted != true)
            return isSorted;
    }
    return isSorted;
} // sorted method

}


1
你为什么要首先创建一个 Object 数组呢? - Diego Basch
因为我没有选择,它不允许我直接将ArrayList转换为int数组。 - javanoob
你可以使用一个 Integer 数组。 - Diego Basch
但我仍然不能像int数组那样比较Integer数组,如果可以的话,我也不知道如何比较。 - javanoob
6个回答

11

你可以使用Integer.valueOf方法。

Integer.valueOf((String) array [i])

Integer类有一个方法valueOf,可以将字符串转换成int类型的值,您可以使用它。如果传递给它的字符串不是有效的整数值,它会抛出一个NumberFormatException异常。

此外,如果您使用的是java5或更高版本,则可以尝试使用泛型使代码更易读。


我对这个解决方案的效率提出质疑(虽然在这种情况下并不重要)。将(String)强制转换后再使用Integer.valueOf(),与将(Integer)强制转换后使用intValue()相比,是否有一些我没有注意到的优点? - user1131435
问题在于array不是一个Interger[],而是一个包含String值的Object[],因此(Integer)array[i]应该会抛出一个类转换异常。 - Arun P Johny
刚刚测试了一下,这里没有抛出任何异常。语句((Integer)x[1]).intValue()返回适当的值,其中x是类型为Object[]的数组,而x [1]不为空。 - user1131435
你能再检查一下吗?因为在newarray[e] = ((Integer)array[i]).intValue();这一行代码中,它只会给我一个java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer的错误。如果你看到代码中的array包含String值,Java将不允许你将String值转换为Integer值,这不是编译时错误,而是运行时异常,所以你需要执行代码才能得到异常。 - Arun P Johny
哦,这样更有意义。我一直以为这些值是存储为int类型而不是String类型,因为像这样存储为String通常是很傻的。现在我看到错误了。 - user1131435
我只得到一个错误信息,上面写着“无法将java.lang.Integer表达式分配给int变量”。 我能否将newarray[]类型设置为Integer,然后再转换为int?如果可以,怎么做? - javanoob

5
您可以使用 泛型 来实现相同的功能,这样会更容易。
List<Integer> numbers = new ArrayList<Integer> ();
Integer[] array = numbers.toArray (new Integer [10]);

每次我尝试使用带有"< >"的代码时,都会收到“无效的赋值运算符”错误。你知道为什么吗?如何解决呢? - javanoob
你正在使用Java5或更高版本吗?泛型只支持从Java5开始... - Jayamohan
我想不是这样的,我正在使用一个叫做“Ready to Program”的java工具。 - javanoob

3

来试试commons-lang

org.apache.commons.lang.ArrayUtils.toPrimitive(Integer[])

我不知道该如何去做那意味着什么。抱歉,我的计算机科学老师很糟糕。 - javanoob

2
您不能在一个Object对象上调用.intValue()方法,因为Object类缺少intValue()方法。
相反,您需要先将Object对象强制转换为Integer类,如下所示:
newarray[e] = ((Integer)array[i]).intValue();

编辑:关于StackOverflow的一条有用提示 - 请将您的代码限制在相关范围内!虽然有时需要大块的代码,但在这种情况下不需要。这会使问题看起来更好,也会得到更好的回答。
另外,请不要使用标签。它目前已被弃用并正在被删除的过程中。

谢谢,我只是希望答案尽可能准确,因为我在这个网站上搜索了几个小时,但没有找到解决方案。 我尝试了你的建议,但在那一行出现了java.lang.ClassCastException错误... - javanoob

1
我知道现在已经很晚了,但是我还是想提出我的两分意见!!
int[] newArray=new int[objectArray.length];
Object[] objectArray = {1,2,3,4,5};

for(int i=0;i<objectArray.length();i++){
    b[i]=(int)objectArray[i];
}

谢谢,我也正准备给出同样的答案。 - Vinay Yadav

0
假设用户需要将 Object[] 转换为 Integer[]
只需使用 Arrays.copyOf。完整文档在此
Object [] temp = {1,2,3,4,5};
Integer[] result = Arrays.copyOf(temp, temp.length, Integer[].class);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接