有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

我在线程“main”java中遇到错误异常。java上的lang.NullPointerException。lang.StringBuffer<初始化>(未知源)

在一个包含n个字符串的字符串数组中,我必须从给定的字符串中选择Palin对。用于输入的ex 3. 工商管理学士 神甫 神甫 输出=2 我做错了什么

import java.util.*;
class Test {
  public static void main(String args[]) {
    int i,j,k=0;
    Scanner h=new Scanner(System.in);
    int n=h.nextInt();
    String a[]=new String[n];

    for(i=0;i<n;i++) {
      if(a[i]!="") {
        String rev = (new StringBuffer(a[i])).reverse().toString();
        for(j=i+1;j<n;j++) {
          if(rev.equals(a[j])) {
            k++;
            a[j]="";
          }
        }
      }
    }

    h.close();
  }
}

共 (2) 个答案

  1. # 1 楼答案

    您正在创建字符串数组,但从未初始化其成员

    成员的默认值为空

    因此,当调用new StringBuffer(a[i])时,传递的是空值

    您可以通过以下方式避免这种情况:

    • 用某物填充数组
    • 除了现有的空字符串检查之外,还要检查null

    顺便说一下,您正在尝试使用相等运算符!=检查空字符串。这将检查引用是否不同,而不是它们指向的字符串对象是否包含不同的字符串。您将希望使用以下选项之一进行检查:

      (null != a[i]) && ! a[i].isEmpty()
    

      ! "".equals( a[i] )
    

    或者,如果您正在使用谷歌的番石榴图书馆:

      ! Strings.isNullOrEmpty( a[i] )
    
  2. # 2 楼答案

    最有可能的情况是,您希望从控制台阅读您没有阅读的单词。我建议你用扫描仪。nextLine()

    int n=h.nextInt();
    h.nextLine(); // discard the rest of the line.
    String a[]=new String[n];
    
    for(int i = 0; i < n; i++) {
       // read a word.
       a[i] = h.nextLine();