为什么在C语言能运行的程序,改在java就报错了,动不了。
package cn.text;
import java.*;
import java.util.Scanner;
public class tt {
/**
* @param args
*/
public static void ss(int n,boolean a[],int s,int arrry[]){
int []arry=new int[10];
if(n>s)
for(int i=1;i<=arry.length;i++){
System.out.println(arry[i]);
}
else{
for(int i=1;i<=s;i++)
if(!a[i]){
a[i]=true;
arry[n]=i;
ss(n+1,a,s,arry);
a[i]=false;
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int n=new Scanner(System.in).nextInt();
boolean[]a={false};
int[]arry=new int[10];
int s=1;
ss(s,a,n,arry);
}
}
方法ss()中的 arrry参数没有调用,根据代码上下文推测,应该是arrry是在方法ss中被调用,所以把参数arrry改为arry;
然后main方法中的数组a是静态初始化的,这个数组长度是长度1了,所以后面可能会数组越界,可以把它定义为长度为10;
因为不知道你这个代码是求什么的,所以就随便修改一下,修改如下:
参考链接:
import java.*;
import java.util.Scanner;
public class tt {
/**
* @param args
*/
public static void ss(int n,boolean a[],int s,int arry[]){
// int []arry=new int[10];
if(n>s)
for(int i=0;i<arry.length;i++){
System.out.print(arry[i]+" ");
}
else{
for(int i=0;i<s;i++)
if(!a[i]){
a[i]=true;
arry[n]=i;
ss(n+1,a,s,arry);
a[i]=false;
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int n=new Scanner(System.in).nextInt();
// boolean[]a=new boolean[10];
// https://blog.csdn.net/weixin_45987729/article/details/124367110
boolean[]a= {false};
// System.out.println(a.length);
int[]arry=new int[10];
int s=1;
ss(s,a,n,arry);
}
}
int arrry[]
这个java里面拷贝了一份,所以不会修改主程序的那个数组
参考GPT和自己的思路:
这段代码在Java中报错的原因,并不是因为C语言中可以运行而Java中不能运行。而是因为在Java中,数组的下标是从0开始的,而你的代码中却是从1开始的。所以,当数组越界时就会抛出异常。另外,在Java中,对于boolean类型的数组,也要在声明时指定数组大小,而不能简单地通过赋值一个元素来自动扩容。因此,你需要将代码中的一些语法错误和逻辑错误进行修改才能在Java中成功运行。
不知道你这个问题是否已经解决, 如果还没有解决的话: