根据以前写的一个打印全排列的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);
}
}
}
是不是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);
}
}
}
估计是数组下标跃界什么的异常。
算法有问题,可能越界。运行Exception.