黑马程序员技术交流社区

标题: 请教大牛,为什么异常,谢谢谢谢 [打印本页]

作者: 王东    时间: 2013-11-11 16:36
标题: 请教大牛,为什么异常,谢谢谢谢
  1. public class Shuzu {

  2.         public static void main(String[] args) {
  3.                 System.out.println("请输入数据 , 以over结束,请输入少于1024个数组");

  4.                 String str[] = Num();

  5.                 Copy(str, 0, 3);

  6.                 Nixu(str);
  7.                
  8.                 Array(str);

  9.         }

  10.         public static String[] Copy(String strr[], int start, int end) {
  11.                 String copystr[] = new String[end - start];

  12.                 for (int i = 0; i < end - start; i++) {
  13.                         copystr[i] = strr[start];

  14.                 }

  15.                 return copystr;

  16.         }

  17.         public static String[] Num() {
  18.                 String strr1[] = new String[1024];
  19.                 int i = 0;

  20.                 while (true) {

  21.                         Scanner sc = new Scanner(System.in);
  22.                         String str = sc.next();

  23.                         if (str.equals("over")) {
  24.                                 sc.close();
  25.                                 break;
  26.                         } else {
  27.                                 strr1[i] = str;
  28.                                 i++;
  29.                         }
  30.                 }

  31.                 String strr[] = new String[i];

  32.                 for (int j = 0; j < i; j++) {
  33.                         strr[j] = strr1[i];
  34.                 }

  35.                 return strr;

  36.         }

  37.         public static String[] Nixu(String str[]) {
  38.                 String[] strr = new String[str.length];

  39.                 for (int i = 0; i < str.length; i++)
  40.                         strr[i] = str[str.length - 1 - i];

  41.                 return strr;

  42.         }

  43.         public static String[] Array(String str[]) {
  44.                 String strr = "";
  45.                 for (int i = 1; i < str.length; i++) {
  46.                         if (str[i - 1].compareTo(str[i]) > 0) {
  47.                                 strr = str[i];
  48.                                 str[i] = str[i - 1];
  49.                                 str[i - 1] = strr;
  50.                         }
  51.                 }

  52.                 return str;
  53.         }
  54. }
复制代码
空指针异常,请问为什么??
作者: 文涛    时间: 2013-11-11 17:08
本帖最后由 文涛 于 2013-11-11 17:10 编辑

楼主,你的这句话有问题String strr[] = new String;
  数组的初始化的时候,方括号里面要么没有数字,直接在后面写上元素,例如String strr[] = new String[]{"a","b"};这样会自动根据元素产生对应大小的数组。要么就使用常量数字进行初始化,比如String strr[] = new String[2];这样就会生成2个大小的数组。
    所以,你这里使用变量i进行初始化时错误的,由于你的i定义为0,那么他会自动生成一个0空间的数组,也就是说,strr就没有指向任何字符串数组,自然也就指针异常了。换句话说,必须在初始化的时候,就给定数组确定的大小。

作者: 王东    时间: 2013-11-11 18:46
文涛 发表于 2013-11-11 17:08
楼主,你的这句话有问题String strr[] = new String;
  数组的初始化的时候,方括号里面要么没有数字,直 ...

谢谢你,找到错误了,是20行和49行的变量写错了,都改成i就没事了,谢谢你啊




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