根据以前写的一个打印全排列的C程序改成JAVA程序后,编译通过,运行时抛出异常,说if(a[i]==a[j]) 这句有问题。
是不是JAVA里不能像C里面一样直接用= ,<,>进行字符型数据的比较?#include<stdio.h>
int main()
{
char a[21];__int64 i,n,p,k,j,s,q;
while(scanf("%I64d",&n)!=EOF)
{
for(i=0;i<21;i++) a[i]=0;
scanf("%s",a);
for(p=1,i=1;i<=n;i++) p*=i;
for(i=0;i<n-1;i++)
{
if(a[i]==0) continue;
for(s=0,j=i+1;j<n;j++)
if(a[i]==a[j]) {a[j]=0;s++;}
for(q=1,k=1;k<=s+1;k++) q*=k;
p/=q;
}
printf("%I64d\n",p);
}

return 0;
}JAVA:import java.util.Scanner;
public class Main {    public static void main(String[] args) {
    // TODO, add your application code
       Scanner cin=new Scanner(System.in);
       long p,k,s,q,n;
       int i,j;
       while((n=cin.nextLong())!=0)
       {
        String str=cin.next();
        char []a=str.toCharArray();
        for(p=1,i=1; i<=n; i++)
         p*=i;
        for(i=0; i<n-1; i++)
        {
         if(a[i]==0)  continue;
         for(s=0,j=i+1; j<n; j++)
         if(a[i]==a[j]) //这句
         {
         a[j]=0; 
         s++;
         }
         for(q=1,k=1; k<=s+1; k++) q*=k;
         p/=q;
        }
        System.out.println(p);
       }
     }
}
      

解决方案 »

  1.   

    输入4 aabb,输出6 程序的功能是打印排列数
      

  2.   

    俺的博客里有一个全排列的算法,你去参观参观?http://blog.csdn.net/bigbug9002/archive/2009/07/24/4377889.aspx
      

  3.   

    直接用= , <,>进行字符型数据的比较  是没问题的。但具体问题在哪?慢慢调试吧 !
      

  4.   

    java里面是支持>,<,比较符号的 不过=是赋值的意思 ==才是比较
      

  5.   

    Java支持if(a[i]==b[j]){}语句。
    估计是数组下标跃界什么的异常。
      

  6.   

    数组操纵不是NullPointerException就是 ArrayIndexOutOfBoundsException;
    算法有问题,可能越界。运行Exception.