在一系列字符串中' a'有' n'字符串我必须从给定的字符串中选择佩林对。为ex输入 3 BBA ABB ABB 输出= 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();
}
}
答案 0 :(得分:4)
您正在创建一个String数组,但从不初始化其成员。
成员的默认值为null。
因此,当您致电new StringBuffer(a[i])
时,您传递的是空值。
你可以通过以下方式避免这种情况:
顺便说一下,您尝试使用等于运算符!=
检查空字符串。这将检查引用是否不同,而不是它们指向的String对象包含不同的字符串。您将要使用以下任一方法检查:
(null != a[i]) && ! a[i].isEmpty()
或
! "".equals( a[i] )
或者,如果您正在使用Google的番石榴库:
! Strings.isNullOrEmpty( a[i] )
答案 1 :(得分:1)
您很可能希望从控制台中读取您未执行的操作。我建议你使用Scanner.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();