新学了java,编了一个猴子选大王题,但是一直无法通过
这个程序是c语言改的,c语言是能够运行的,但是改编成java运行后一直提示错误,编译器没有提示语言有问题,而逻辑也不该有问题,毕竟c语言能运行。求大神帮忙,告诉我哪里出了问题,感谢。
import java.util.Scanner;
class EX{
private int n;
private int m;
private int k;
private int[] list;
Scanner ic=new Scanner(System.in);
void gain(int nn){
this.n=nn;}
void gaik(int kk){
this.k=kk;}
void gaim(int mm){
this.m=mm;}
void gailist(int i,int x){
this.list[i]=x;}
int putlist(int i){
return list[i];}
int putn(){
return n;}
int putk(){
return k;}
int putm(){
return m;}
void ilist(){
this.list=new int[putn()];}
}
class fuzinmk extends EX{
int nn,kk,mm;
void fuzin(){
do{
System.out.print("猴子个数n:");
nn=ic.nextInt();
if (nn<=0) System.out.println("'n'error!'n'no<='0',请重新输入!");
}while(nn<=0);
gain(nn);}
void fuzim(){
do{
System.out.print("报数值m:");
mm=ic.nextInt();
if (mm<=0) System.out.println("'m'error!'m'no<='0',请重新输入!");
}while(mm<=0);
gaim(mm);}
void fuzik(){
do{
System.out.print("第一个猴子编号k:");
kk=ic.nextInt();kk--;
if (kk>=putn()) System.out.println("'k'error!'k'no>'n',请重新输入!");
if (kk<0) System.out.println("'k'error!'k'no<='0',请重新输入!");
}while(kk>=putn()||kk<0);
gaik(kk);}
void fuzi(){
ilist();
for(int i=0;i<putn();i++)
gailist(i,i+1);}
}
class hou extends EX{
int houwang(){
chuju(putm());
if (putn()!=1) houwang();
return putlist(0);}
void chuju(int m){//计算方法
while(putn()<m)
m=m-putn();
gaik(m+putk()-1);
if (putk()>=putn()) gaik(putk()-putn());
System.out.println(putlist(putk())+"号猴子出圈");
for (int i=putk();i<putn();i++)
gailist(i,putlist(i+1));
gain(putn()-1);}
}
public class UnderMyHz{
public static void main(String[] args){
fuzinmk stu=new fuzinmk();
hou cun=new hou();
stu.fuzin();
stu.fuzik();
stu.fuzim();
stu.fuzi();
System.out.print(cun.houwang()+"号猴子为猴王");
}}
你的程序写得如此晦涩,很难调试
你的错当然很明显,是在运行
int putlist(int i) {
return list[i ];
}
时,i为-1了,所以报错
一.你的程序标识符不规范
类似
int putn(){
return n;}
应该是getn,你是得到变量的值而非设置,设置的话也是set不是put
二,程序看上去是个简单的约瑟夫环,不用定义这么多函数(你可以了解下模块化设计的要点
三.若是C程序改写的,你可以把c程序放上来,若原来程序没有问题,我很快可以帮你修改好的
下一篇:cs8如何使用图片控制fl播放
上一篇:帮找一下字体,谢谢!在线等