黑马程序员技术交流社区

标题: 打印数组时 java.lang.NullPointerException [打印本页]

作者: 梦幻    时间: 2014-4-4 17:58
标题: 打印数组时 java.lang.NullPointerException
本帖最后由 梦幻 于 2014-4-9 13:15 编辑

下面是我自己写的一个把字符串转换成数组并打印的一个小程序,但是运行时出现了 java.lang.NullPointerException异常,我检查了一遍,感觉没有什么
错误,希望哪位能帮忙指点一下…………

class dayinDemo
{
dayinDemo(String r)
{
  this.r=r;
}
String r;
char arr[] = new char[r.length()];
public void pri()
{
  
  arr = r.toCharArray();
  for (int x=0;x<=r.length()-1 ;x++ )
  {
    System.out.println(arr[x]);
  }
}
}
class  dayin
{

public static void main(String[] args)
{
  
dayinDemo ss = new dayinDemo("abcde");
ss.pri();
}

}


作者: wuyuecns    时间: 2014-4-4 18:17
给你修改好了,代码如下。
(1)修改的地方是把dayinDemo类中的char arr[] = new char[r.length()];改为char arr[];这里不需要定义字符数组长度的,长度会在给字符数组赋值时指定的。
(2)类的命名最好首字母大写
  1. class dayinDemo
  2. {
  3.         dayinDemo(String r)
  4.         {
  5.          this.r=r;
  6.         }
  7.         String r;
  8.         char arr[];
  9.                 //char arr[] = new char[r.length()];
  10.         public void pri()
  11.         {
  12.   
  13.          arr = r.toCharArray();
  14.         for (int x=0;x<=r.length()-1 ;x++ )
  15.         {
  16.     System.out.println(arr[x]);
  17.         }
  18.         }
  19. }
  20. public class  Dayin
  21. {

  22.         public static void main(String[] args)
  23.         {
  24.   
  25.                 dayinDemo ss = new dayinDemo("abcde");
  26.                 ss.pri();
  27. }

  28. }
复制代码

作者: 林发明    时间: 2014-4-4 20:53
可以将char arr[] = new char[r.length()];和arr = r.toCharArray();合成一句话放在函数内部,
即char[] arr  = r.toCharArray();

作者: 征服    时间: 2014-4-5 08:09
/**
你的程序中存在一个很明显的一个错误,类成员只有两种,一种是成员变量,一种是成员方法。
但是,在你的这个程序中,很明显,你将数组在定义成员变量时用r.length()限定了大小,这时你的
r.length()是没有任何的值的,也就是,r.length()这个时候是没有运行的。
有两种解决方法:
方法一、定义数组时,只建立数组,并不设置数组大小,在运行r.toCharArray();是会直接把相应的
元素存入数组,数组大小由r限定
方法二、直接将char arr[] = new char[r.length()];移动到类void pri()中去,两种方法都可以
解决你遇到的问题。
*/

class dayinDemo
{
dayinDemo(String r)
{
   this.r=r;
}
String r;
// char arr[] = new char[r.length()];这是错误的语句
public void pri()
{
   char arr[] = new char[r.length()];//将数组定义到这里,调用时在建立数组
   arr = r.toCharArray();
   for (int x=0;x<=r.length()-1 ;x++ )
   {
     System.out.println(arr[x]);
   }
                  /*
                     在遍历数组时我们可以用foreach语句,可以使我们书写更加简化
                  */
}
}
class  dayin  //注意:我们认为的都规定类名头一个字母要大写,这样我们好进行区分
{
public static void main(String[] args)
{
   
dayinDemo ss = new dayinDemo("abcde");
ss.pri();
}
}


作者: 征服    时间: 2014-4-6 18:12
wuyuecns 发表于 2014-4-4 18:17
给你修改好了,代码如下。
(1)修改的地方是把dayinDemo类中的char arr[] = new char[r.length()];改为cha ...

这样定义 的数组的长度怎么样计算的呢
作者: wuyuecns    时间: 2014-4-6 21:40
征服 发表于 2014-4-6 18:12
这样定义 的数组的长度怎么样计算的呢

是这样,一维数组声明的时候应该这样写:
char arr[]=null;  //null是默认值。
然后再在后面的语句中赋值,赋值时自动分配大小。

在JDK1.5以后,可以不用给数据赋默认值,但一般为了开发方便,还是写上默认值好
作者: ^o(孤8o|狼i¤F    时间: 2014-4-6 21:52
程序出错在这个地方:char arr[] = new char[r.length()];  现在的r 是null r。null 也是一个空值 ; 数组长度是个空值 其实你可以这样写 char arr[] = new char【100]; 给于定的长度就行了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2