Java问题求解 请各位大大帮忙解决 谢谢了!!!

2025-05-15 10:20:39
推荐回答(4个)
回答1:

你的程序我帮你改完了,你看看吧。(改动的地方见注释)
public class hello{
public static void main(String[] args) {
//System.out.println("开始报数喽~");//这一句去掉
boolean[] arr = new boolean[10];
for(int i=0;i arr[i] = true; //为数组赋上boolean型的初值
System.out.print(arr[i]+"\t");
}
int leftCount = arr.length;
int countNum = 1; //这是一个报数器
int index = 0; //作用类似一个指针,这里指队列人员的编号0-9
System.out.println(); //全true换行 无具体意义
//System.out.println("报数开始~~");//去掉这一句
while (leftCount >1){ //如果最后剩下的人数不为1,则循环至只剩一人为止
if(arr[index] == true){//如果arr[index]为true则表示此人尚在队列中或暂时未被3整除
//countNum++;此句如果放这里前面就定义为int countNum = 0;
if(countNum == 3){//某人报的数为3
countNum = 0;//有人出列后,下个人重新开始从1报数,如此反复,此步是将报数器初始化
arr[index] = false;//arr[index]为false表示此人已经出列了
leftCount--;//剩下的人员总数则减少一个
//从这里开始加上下面一段代码
for(int i=0;i System.out.print(arr[i]+"\t");
}
System.out.println();
//到这里结束加上上面一段代码
}
countNum++;
//从1开始重新报数,或下一个人继续报下一个数
}
//System.out.print(arr[index]+"\t");//这一句去掉
index++;//下一个人准备开始报数
if(index == arr.length){//每次最后一人报完数后就从编号为0的人开始重新报数
index = 0;
//System.out.println();//这一句去掉
}
}//退出while时队列中仅剩一人了
for(int i=0;i if(arr[i] == true){//剩下的那一个人+1就是值为true的那个人
System.out.println("最后的结果是"+i+",是第"+(i+1)+"个同学");//这一句改了一下
}
}
}
}
运行结果:
true true true true true true true true true true
true true false true true true true true true true
true true false true true false true true true true
true true false true true false true true false true
true false false true true false true true false true
true false false true true false false true false true
false false false true true false false true false true
false false false true true false false false false true
false false false true false false false false false true
false false false true false false false false false false
最后的结果是3,是第4个同学

回答2:

public class Q {
public Q(){
}
public void last(int[] tmp){
if(tmp.length<3){
for(int i=0;i System.out.println("最后的同学编号:"+tmp[i]);
}
}else{
int[] newT = new int[tmp.length-1];
for(int i=0;i if(i+1>3&&tmp.length>3){
newT[i-3]=tmp[i];
}
}
newT[newT.length-1]=tmp[1];
newT[newT.length-2]=tmp[0];
last(newT);
}
}
/**
* @param args
*/
public static void main(String[] args) {
/**
* 思路:将10个同学看成一个int数组,每次循环到数据第三个元素,就产生一个新数组,将原数组的第四个开始的元素
* 顺序插入新数组,将原数组的第一个元素放到新数组的倒数第二位置,依次,
* 原数组的第二个元素放到新数组最后位置,
* 递归...
* 直到新数组元素长度小于3,结束递归并输出剩下同学的编号
*
*/
int[] students = new int[]{1,2,3,4,5,6,7,8,9,10};
Q q = new Q();
q.last(students);
}

}

回答3:

你是不是想问你的输出结果为啥少了几行?

改好了:
public class hello
{
public static void main(String[] args)
{
System.out.println("开始报数喽~");
boolean[] arr = new boolean[10];
for(int i=0;i {
arr[i] = true; //为数组赋上boolean型的初值
System.out.print(arr[i]+"\t");
}
int leftCount = arr.length;
int countNum = 1; //这是一个报数器
int index = 0; //作用类似一个指针,这里指队列人员的编号0-9
System.out.println(); //全true换行 无具体意义
// 需要注销的代码
// System.out.println("报数开始~~");

while (leftCount >1) //如果最后剩下的人数不为1,则循环至只剩一人为止
{
if(arr[index] == true)//如果arr[index]为true则表示此人尚在队列中或暂时未被3整除
{
// countNum++;此句如果放这里前面就定义为int countNum = 0;
if(countNum == 3)//某人报的数为3
{
countNum = 0;//有人出列后,下个人重新开始从1报数,如此反复,此步是将报数器初始化
arr[index] = false;//arr[index]为false表示此人已经出列了
leftCount--;//剩下的人员总数则减少一个
// 新加代码 start
for(int i=0;i {
System.out.print(arr[i]+"\t");

}
System.out.println();
}
// 新加代码 end

countNum++;//从1开始重新报数,或下一个人继续报下一个数
}

// 需要注销的代码
// System.out.print(arr[index]+"\t");

index++;//下一个人准备开始报数
if(index == arr.length)//每次最后一人报完数后就从编号为0的人开始重新报数
{
index = 0;
// 需要注销的代码
// System.out.println();

}
}//退出while时队列中仅剩一人了
for(int i=0;i {
if(arr[i] == true)//剩下的那一个人+1就是值为true的那个人
{
System.out.println("最后的结果是"+i+",是第"+(i+1)+"个同学");
}
}
}
}

回答4:

我感觉这是个递归的问题,递归的出口就是集合剩下一个人的时候