Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将多个字符串的不同子字符串添加到树集_Java_String_Nullpointerexception_Runtime Error_Treeset - Fatal编程技术网

Java 将多个字符串的不同子字符串添加到树集

Java 将多个字符串的不同子字符串添加到树集,java,string,nullpointerexception,runtime-error,treeset,Java,String,Nullpointerexception,Runtime Error,Treeset,问题-给你n个字符串w1,w2,…,wn。设Si表示通过考虑字符串wi的所有唯一子字符串而形成的字符串集。子字符串定义为字符串中一个或多个字符的连续序列。有关子字符串的更多信息,请参见此处。设S={S1 U S2 U….Sn},即S是一组字符串,它是通过考虑所有集合S1,S2。。。。。锡 我的方法-我使用树集并直接填充它,而不是创建列表、集合和排序列表 import java.io.*; import java.util.*; import java.text.*; import java.ma

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

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

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);
            }
         }

     } 
  }
我遇到一个运行时错误:

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

有谁能解释一下为什么会出现这个运行时错误,我应该如何避免这个空指针异常,以及为什么会发生这种情况?如果可以的话,请帮帮我。

我们现在记忆力很好。但即使在过去,将同一变量用于不同目的也被认为是一种不好的做法。使用每一个为一个目的,它将是好的。代码清晰易懂,没有其他无法解释的异常:

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);
    }
}
导入java.io.StringReader;
导入java.util.Scanner;
导入java.util.Set;
导入java.util.TreeSet;
公共类解决方案{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(新StringReader(“2\naab\naac\n”);
int cases=Integer.parseInt(in.nextLine());
String[]a=新字符串[案例];
//int i,c;
//直接添加到集合中可以防止出现更大的列表,因为您删除了
//复制品
Set=新树集();
对于(int i=0;i对于(int ii=1;ii)您可能想检查最后一次迭代的
i
对于最后一次迭代的i,i=a[i].length()-c,有什么问题?@singhakashfort您初始化的最外层循环的第一次迭代
a[0]
,但对于您正在访问的最内层循环
a[1].length()
此处
a[1]
未初始化,指针为空。为什么有相同变量名称的嵌套循环
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);
    }
}