2011-04-04 125 views
0

我想知道是否有一种方法可以将整数数组转换为java中的一组字符。我不断收到一个nullPointer异常错误。在Java中铸造

这是我...

private char [] clubsArray; // Will hold the clubsString String as an array 
     private char [] heartsArray;// Will hold the heartsString String as an array 
     private char [] spadesArray;// Will hold the spadesString String as an array 
     private char [] diamondsArray;// Will hold the diamondsString String as an array 
    private int [] intClubsArray; // Holds the character array as number values so I can sort it properly 
     private int [] intHeartsArray; // Holds the character array as number values so I can sort it properly 
     private int [] intSpadesArray; // Holds the character array as number values so I can sort it properly 
     private int [] intDiamondsArray; // Holds the character array as number values so I can sort it properly 


public void cast() 
    { 
     for (int i = 0; i < clubsArray.length; i++)// A loop that will cast all the clubs into ints 
     { 
      intClubsArray[i] = (int) clubsArray[i]; 
     } 
     for (int i = 0; i < heartsArray.length; i++)// A loop that will cast all the hearts into ints 
     { 
      intHeartsArray[i] = (int) heartsArray[i]; 
     } 
     for (int i = 0; i < spadesArray.length; i++)// A loop that will cast all the spades into ints 
     { 
      intSpadesArray[i] = (int) spadesArray[i]; 
     } 
     for (int i = 0; i < diamondsArray.length; i++)// A loop that will cast all the diamonds into ints 
     { 
      intDiamondsArray[i] = (int) diamondsArray[i]; 
     } 
    } 

为什么会出现这个错误?它可以固定?我可以投出整个阵列吗?此外我不想为变量设置一个特定的大小,因为当它变成一个int []时,我将获得不必要的0作为空格。

+0

你应该初始化正确的尺寸和类型的INT数组。 – Senthil 2011-04-04 00:22:21

回答

1

铸造不是什么导致你的问题。你必须初始化每个数组的大小是新的。该代码不会为任何阵列分配内存,但调用阵列上的方法length是导致空指针异常的原因。

for (int i = 0; i < clubsArray.length; i++) 
       // ^^^^^^^^^^ Not initialized and is a null pointer 
       // But calling method on it is what the exception is saying. 

所以写一个init方法,你需要初始化数组类似 -

clubsArray = new char[5] ; 
// .... 
2

clubsArray.length错误?

如果是的话那将是因为你还没有做过这样的:

clubsArray = new char[12]; 

你可以有也无法初始化intClubsArray或任何其他阵列为此事)

1

你有没有初始化int *数组int数组?你有没有流行你的*数组char数组?

它看起来至少有一个是空的,所以当你调用* Array.length时你会得到一个NPE。发布异常的堆栈跟踪可能会有帮助。

为了澄清我的观点,当你调用像

clubsArray.length 

如果对象(clubsArray)为空,你会得到一个NullPointerException

0

Java没有任何内置的方式来以您想要的方式投射数组。尽管写一个方法来做到这一点很容易。

我的猜测是你的问题是初始化数组失败。 Java没有提供任何方式来使用类型系统来捕获设置为null的值,这意味着要构建可靠的代码,您必须在运行时监视null。这也是一个烦恼,因为它不一定是这样(Spec#)。

本着这种精神,为什么不创建一个方法,通过不变地将它们传递给空数组。 (代码未测试)

public int[] castArrayIntToChar(char[] toCast){ 
    if(toCast == null) 
     return null; 
    int[] casted = new int[toCast.length]; 
    for(int i = 0; i < toCast.length; i++){ 
     casted[i] = (int) toCast[i]; 
    } 
    return casted 
} 

有了这个内置的语言将有一个很大的好处,但:这是一种可以使用原生代码,量化和循环展开进行优化,超强的事情。目前JVM很不错,但内置功能可以提高速度。

0

你真正的问题和NPE的原因是你没有初始化你的数组;看其他的答案的详细信息:

但是,为了回答你居然问了一个问题:

我想知道是否有投整数数组为字符Java中的数组的方式。

不。在Java中没有办法做到这一点。类型系统禁止它,并且Java运行时系统不会让你破坏类型安全。

你可能希望做的最好的是:您从数组提取(像你正在做!

  • 铸件中值,或
  • 创建的一个新的数组所需的类型,并使用一个循环来初始化来自原始数组的适当投射值的元素。

(请注意,第二个是不是等同于铸造,因为它涉及创建和使用一个新的数组)。