A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梦幻 中级黑马   /  2014-4-4 17:58  /  2525 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 梦幻 于 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();
}

}

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

6 个回复

倒序浏览
给你修改好了,代码如下。
(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. }
复制代码

评分

参与人数 1技术分 +2 收起 理由
朱神必 + 2

查看全部评分

回复 使用道具 举报
可以将char arr[] = new char[r.length()];和arr = r.toCharArray();合成一句话放在函数内部,
即char[] arr  = r.toCharArray();

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
/**
你的程序中存在一个很明显的一个错误,类成员只有两种,一种是成员变量,一种是成员方法。
但是,在你的这个程序中,很明显,你将数组在定义成员变量时用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();
}
}

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
wuyuecns 发表于 2014-4-4 18:17
给你修改好了,代码如下。
(1)修改的地方是把dayinDemo类中的char arr[] = new char[r.length()];改为cha ...

这样定义 的数组的长度怎么样计算的呢
回复 使用道具 举报
征服 发表于 2014-4-6 18:12
这样定义 的数组的长度怎么样计算的呢

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

在JDK1.5以后,可以不用给数据赋默认值,但一般为了开发方便,还是写上默认值好
回复 使用道具 举报
程序出错在这个地方:char arr[] = new char[r.length()];  现在的r 是null r。null 也是一个空值 ; 数组长度是个空值 其实你可以这样写 char arr[] = new char【100]; 给于定的长度就行了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马