Java编程怎么用循环的思路而不是递归的思路解决鸭子划水的问题,鸭子划水问题怎么才能用循环的方法,用Java的代码去解决呢

Java编程怎么用循环的思路而不是递归的思路解决鸭子划水的问题,鸭子划水问题怎么才能用循环的方法,用Java的代码去解决呢

效果如图

img

public class Main {
    public static void main(String[] args) {
        int distance = 10; // 划水距离

        swimDuck(distance); // 调用划水方法
    }

    public static void swimDuck(int distance) {
        System.out.println("开始划水...");

        for (int i = 1; i <= distance; i++) {
            System.out.println("鸭子划过第 " + i + " 米");
        }

        System.out.println("划水结束!");
    }
}


  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/172608
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:Java 2.10(科学:计算能量)编写程序,计算将水从初始温度加热到最终温度所需的能量。程序应该提示用户输入水的重量(以千克为单位),以及水的初始温度和最终温度。
  • 除此之外, 这篇博客: Java初学者作业——编写JAVA程序,计算跳水运动员本次动作的最终得分。中的 实现代码: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 使用 Arrays.sort(scores);排序判断最大值最小值,的方法

    import java.util.Arrays;
    import java.util.Scanner;
    
    public class GetScoresDemo {
    	public static void main(String[] args) {
    		System.out.println("请输入6位裁判给出的得分:");
    		Scanner sc = new Scanner(System.in);
    		//定义数组,储蓄6位裁判给出的分数
    		double[] scores = new double[6];
    		//通过循环接收用户输入的值(裁判给出的分数)
    		for (int i = 0; i < scores.length; i++) {
    			scores[i] = sc.nextDouble();
    		}
    		Arrays.sort(scores);//进行排序
    		double max = scores.length-1;//最高分
    		double min = scores[0];//最低分
    		double sum = 0;//最终得分
    		//省略第一个下标和最后一个下标进行累加求和
    		for (int i = 1; i < scores.length-1; i++) {
    			sum +=scores[i];
    		}
    		//所有的数值都得到,进行格式化输出
    		System.out.printf("去掉一个最高分:%.2f,一个最低分:%.2f\n",max,min);
    		System.out.printf("最终得分:%.2f",sum);
    	}
    }
    

    定义一个数,进行比较判断最大值最小值的方法:

    import java.util.Arrays;
    import java.util.Scanner;
    
    public class GetScoresDemo {
    	public static void main(String[] args) {
    		System.out.println("请输入6位裁判给出的得分:");
    		Scanner sc = new Scanner(System.in);
    		//定义数组,储蓄6位裁判给出的分数
    		double[] scores = new double[6];
    		double max,min;//最高分,最低分
    		double sum = 0;//最终得分
    		//通过循环接收用户输入的值(裁判给出的分数)
    		for (int i = 0; i < scores.length; i++) {
    			scores[i] = sc.nextDouble();
    		}
    		//求最低分和最高分
    		max = scores[0];//设最高分为第一个下标
    		min = scores[0];//设最低分为第一个下标
    		for (int i = 0; i < scores.length; i++) {
    			if(max < scores[i])
    				max = scores[i];
    			if(min > scores[i])
    				min = scores[i];
    		}
    		//for循环累加求和
    		for (double item : scores) {
    			sum += item;
    		}
    		sum = sum - max - min;
    		//所有的数值都得到,进行格式化输出
    		System.out.printf("去掉一个最高分:%.2f,一个最低分:%.2f\n",max,min);
    		System.out.printf("最终得分:%.2f",sum);
    	}
    }
    

     

  • 您还可以看一下 王小科老师的零基础学Java编程—Java从小白到大咖课程中的 实例06 使用静态变量表示水池中的水量小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    这个问题要求使用循环而不是递归方法解决鸭子划水问题。鸭子划水问题是一个经典的递归问题,通常使用递归方法求解。要使用循环方法解决该问题,可以使用迭代的方式模拟递归的过程。

    以下是一种可能的解决方案和示例代码:

    public class DuckSwimming {
        public static void main(String[] args) {
            int distance = 10; // 划水距离
            int speed = 2; // 每次划水的速度
            int totalTime = 0; // 划水总时间
    
            while (distance > 0) {
                if (distance >= speed) {
                    distance -= speed;
                    totalTime++;
                } else {
                    totalTime += distance;
                    distance = 0;
                }
            }
    
            System.out.println("鸭子划水总时间:" + totalTime);
        }
    }
    

    在这个示例代码中,我们通过设定划水的距离和每次划水的速度,使用一个循环来模拟鸭子划水的过程。在每次循环中,判断剩余的距离是否大于等于速度,如果是则将速度从剩余距离中减去,并增加划水总时间;如果距离小于速度,则将剩余距离加到总时间中,并将距离置为0。

    这个循环将一直执行,直到鸭子划水的距离为0。最后,在循环结束后,输出划水总时间。

    这种循环方法可以替代递归方法,以更直观的方式解决鸭子划水问题。具体的效率可能因实际情况而有所差异,但对于较小规模的问题,这种方法通常是可行的。

    请注意,这只是一种可能的解决方案,可能还有其他的实现方式。如果有更多的要求或者场景不同,可能需要做一些修改。