【问题标题】:Arrays outside main methods?主要方法之外的数组?
【发布时间】:2016-08-30 02:56:37
【问题描述】:

我是 Java 编程新手。而且我有点卡在方法中打印出数组。假设,我有

public class A{
    private static String a;
    private static char[] c;
    private static Scanner sc = new Scanner(System.in);
    public static void main(String[] args){
     word=sc.next();
     char[] c = word.toCharArray();
     System.out.println(c);
     System.out.println(c.length)
     printIt();
    }
    private static void printIt(){
     System.out.println(c);
       }
     }

此示例无法编译并发出 NullPointerException。 但是对于给定的命令行输入,例如“test”。它确实打印出“test”和长度为“4”。但是当我尝试使用一种方法打印出数组时,它无法打印出来。

我知道数组正在初始化并填充字符,因为它正在打印 4。

谁能告诉我为什么它在 main 方法中起作用,为什么它在私有方法中不起作用?

【问题讨论】:

  • 你永远不会初始化private static char[] c,而是在main方法中创建一个新的局部变量。在main方法中从char[] c = word.toCharArray();中删除char[]
  • @PrasadKharkar derp,原来如此。无视我。
  • @mikeTheLiar,即使我说对了一半,主方法中定义了一个局部变量:D
  • 哦,word 尚未声明
  • ... 如果您的程序无法编译,我不确定如何获得运行时异常 (NPE)。注意静态可变状态有一些大问题,应该尽量避免;如果您需要其他数据,则应将其作为参数传递。

标签: java arrays methods nullpointerexception


【解决方案1】:

通过使用char[] c,您在方法内部重新声明它,它与类级别的不同。只需使用c = word.toCharArray()

【讨论】:

    【解决方案2】:

    你有几个错误:

    word=sc.next();
    

    你需要先声明单词:

    String word=sc.next();
    

    或许?

    a = sc.next();
    c = a.toCharArray();
    

    你重新声明c,隐藏属性并在调用方法printIt()时导致NullPointerException!:

    char[] c = word.toCharArray();  // this is a method attribute not the class one!
    

    还有一个缺少的分号;

    System.out.println(c.length);
    //                          ↑ here
    

    最终结果:

    public class A{
        private static String a;
        private static char[] c;
        private static Scanner sc = new Scanner(System.in);
    
        public static void main(String[] args) {
            a = sc.nextLine();
            c = a.toCharArray();
            System.out.println(c);          // 1
            System.out.println(c.length);   // 2
            printIt();                      // 3
            sc.close();
        }
    
        private static void printIt() {
            System.out.println(c);
        }
    }
    

    输入:

    asdsadsadsadsads
    

    输出:

    asdsadsadsadsads  // 1
    16                // 2
    asdsadsadsadsads  // 3
    

    【讨论】:

      【解决方案3】:

      首先你的代码有一些错误

      第 6 行:你必须定义单词(我认为 String word = sc.next();

      第 9 行:System.out.println(c.length);

      然后你的方法不起作用,因为你的数据成员仍然是空的,你已经创建了一个同名的新变量。尝试将第 10 行替换为:c = word.toCharArray();

      【讨论】:

        猜你喜欢
        • 2015-12-27
        • 2014-06-04
        • 1970-01-01
        • 2012-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-05
        • 2019-09-30
        相关资源
        最近更新 更多