向树集

时间:2015-05-16 06:22:37

标签: java string nullpointerexception runtime-error treeset

问题 - 给你n个字符串w1,w2,......,wn。设Si表示通过考虑字符串wi的所有唯一子串而形成的字符串集。子字符串被定义为字符串中一个或多个字符的连续序列。有关子串的更多信息,请参见此处。设S = {S1 U S2 U .... Sn}。是S是通过考虑所有S1,S2,......中的所有唯一字符串形成的一组字符串.Sn

我的方法 - 我使用TreeSet并直接填充它,而不是创建列表,集合和排序列表。

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution 
{

 public static void main(String[] args) 
{
    Scanner in = new Scanner(System.in);

    int cases = Integer.parseInt(in.nextLine());
    String[] a = new String[cases];
    int i, c;

//Adding directly to the Set prevents a larger list because you remove the duplicates
Set<String> set = new TreeSet<String>();

   for( i = 0; i < cases; i++) 
    {
        a[i] = in.nextLine();
          for (c = 0; c < a[i].length(); c++) 
         {
            for (i = 1; i <= a[i].length() - c; i++) 
            {
                String sub = a[i].substring(c, c + i);
                set.add(sub);
            }
         }

     } 
  }

输入:

2
aab
aac

我遇到了运行时错误:

Exception in thread "main" java.lang.NullPointerException
at Solution.main(Solution.java:32)

任何人都可以解释我为什么我得到这个运行时错误,我应该怎么做才能避免这个空指针异常,为什么这首先出现?如果可以,请帮帮我

1 个答案:

答案 0 :(得分:2)

我们现在有很多记忆。但即使过去,将同一变量用于不同目的也被认为是一种不好的做法。将每一个用于一个目的,它会没事。代码清晰且不可理解,没有更多无法解释的例外:

import java.io.StringReader;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;

public class Solution {

    public static void main(String[] args) {
        Scanner in = new Scanner(new StringReader("2\naab\naac\n"));

        int cases = Integer.parseInt(in.nextLine());
        String[] a = new String[cases];
        //int i, c;

        // Adding directly to the Set prevents a larger list because you remove
        // the duplicates
        Set<String> set = new TreeSet<String>();

        for (int i = 0; i < cases; i++) {
            a[i] = in.nextLine();
            for (int c = 0; c < a[i].length(); c++) {
                for (int ii = 1; ii <= a[i].length() - c; ii++) {
                    String sub = a[i].substring(c, c + ii);
                    set.add(sub);
                }
            }
        }
        System.out.println(set);
    }
}

P.S。家庭作业 - 使变量名称有意义且难以辨认。