Java编程训练案例

目的

        复习前半段课程学习的Java编程知识,能够使用所学的知识解决问题,提升同学们的编程能力。

涉及到的知识点

        变量、数组

        运算符:基本运算符、关系运算符、逻辑运算符...

        程序流程控制: if、switch; for、while;死循环、循环嵌套

        跳转关键字: break、continue、return。

        方法
        ...

编程思维

        使用所学的Java技术解决问题的思维方式和编写代码实现出来的能力。

关于提升编程思维和编程能力的建议

        编程思维和编程能力不是一朝一夕形成的,需要时间的沉淀和大量练习。

        前期:先模仿,后期:再创新。

        具体措施:勤于练习代码,勤于思考,孰能生巧。

案例一:买飞机票

需求:
        1.机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。

        2.机票最终优惠价格的计算方案如下:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折。

package com.WjhJava.MethodDemo;

import java.util.Random;
import java.util.Scanner;

public class MethodDemoTest1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);        //输入
        Random r = new Random();       //随机
        /* 需求/目标:
         *   需求:
         * 1.机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。

         *2.机票最终优惠价格的计算方案如下:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折。
         * */
        System.out.println("请输入当前票价:");
        double money = sc.nextDouble();

        System.out.println("请输入当前月份:");
        int month = sc.nextInt();

        System.out.println("请输入乘坐仓位类型:");
        String flyType = sc.next();

        System.out.println("票价为:"+fly(money, month, flyType));


    }

    public static double fly(double money,int month,String flyType){

        if(month >= 5 && month <=10){    //STring判断时用switch分支,否则值会传输错误
            switch (flyType){
                case "头等舱":
                    money *= 0.9;
                    break;
                case "经济舱":
                    money *= 0.85;
                    break;
                default:
                    System.out.println("您输入的仓位类型有误,请重新输入!");
                    money = -1;
            }
        }else if(month >=1 && month <=4 || month == 11 || month == 12){

            switch (flyType){
                case "头等舱":
                    money *= 0.7;
                    break;
                case "经济舱":
                    money *= 0.65;
                    break;
                default:
                    System.out.println("您输入的仓位类型有误,请重新输入!");
                    money = -1;
            }


        }else{
            System.out.println("您输入的月份有误,请重新输入!");
            money = -1;
        }

        return money;
    }

    }


案例二:找素数

分析
        1.101-200之间的数据可以采用循环依次拿到;每拿到一个数,判断该数是否是素数。
        2. 判断规则是:从2开始遍历到该数的一半的数据,看是否有数据可以整除它,有则不是素数,没有则是素数。

package com.WjhJava.MethodDemo;

import java.util.Random;
import java.util.Scanner;

public class MethodDemoTest1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);        //输入
        Random r = new Random();       //随机
        /* 需求/目标:
         *   需求:
         * 找出101-200的所有素数(除了1和它本身能整除的数称为素数!)
         * */

        //1.定义一个循环,找到101到200的全部数据
        for (int i = 101; i <= 200 ; i++) {
            //i = 101 102 103 ... 199 200

            //信号位:标志
            boolean flag = true;    //一开始认为当前数据是素数

            //2.判断当前遍历的这个数据是否是素数
            for (int j = 2; j <= i/2; j++) {
                if(i % j == 0){
                    flag = false;
                    break;
                }
            }

            //3.根据判定的结果选择是否输出这个数据,是素数则输出
            if(flag){
                System.out.println(i);
            }



        }

    }

    }


案例三:开发验证码

需求:定义方法实现随机产生一个5位的验证码,每位可能是数字、大写字母、小写字母。

分析:

        1.定义一个方法,生成验证码返回:方法参数是位数、方法的返回值类型是String。

        2.在方法内部使用for循环生成指定位数的随机字符,并连接起来。

        3把连接好的随机字符作为一组验证码进行返回。

package com.WjhJava.MethodDemo;

import java.util.Random;
import java.util.Scanner;

public class MethodDemoTest1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);        //输入
        Random r = new Random();       //随机
        /* 需求/目标:
         *   需求:定义方法实现随机产生一个5位的验证码,每位可能是数字、大写字母、小写字母。
        分析:
        1.定义一个方法,生成验证码返回:方法参数是位数、方法的返回值类型是String。
        2.在方法内部使用for循环生成指定位数的随机字符,并连接起来。
        3把连接好的随机字符作为一组验证码进行返回。
         * */

        //调用获取验证码的方法得到一个随机的验证码
        String code = createCode(5);
        System.out.println("随机验证码:"+code);
    }

    /*
    1.定义一个方法返回一个随机验证码,是否需要返回值类型声明?String 是否需要声明形参?
    */

    public static String createCode(int n){
        //3.定义一个字符串变量记录生成的随机字符
        String code = "";

        //2.定义一个for循环,循环n次,依次生成随机字符
        Random r = new Random();

        for (int i = 1; i <= n; i++) {
            //3.随机生成一个字符:英文大小写,数字(0,1,2)
            int type = r.nextInt(3);    //0 1 2
            switch (type){
                case 0:     //大写(A 65 ~ Z 65+25) (0~25)+65
                    char ch = (char) (r.nextInt(25)+65);    //强制转成char字符类型
                    code += ch;

                    break;

                case 1:     //小写(a 97 ~ z 97+25) (0~25)+97
                    char ch1 = (char) (r.nextInt(25)+65);    //强制转成char字符类型
                    code += ch1;
                    break;

                case 2:     //数字
                    code += r.nextInt(10);  //0~9
                    break;

            }
        }
        return code;

    }

    }


案例四:数组元素的复制

案例:数组元素复制

        需求:把一个数组中的元素复制到另一个新数组中去。

        分析:1.需要动态初始化一个数组,长度与原数组一样。

                2.遍历原数组的每个元素,依次赋值给新数组。

                3.输出两个数组的内容。

package com.WjhJava.MethodDemo;
/* 需求/目标:
         *  需求:把一个数组中的元素复制到另一个新数组中去。
            分析:
            1.需要动态初始化一个数组,长度与原数组一样。
            2.遍历原数组的每个元素,依次赋值给新数组。
            3.输出两个数组的内容。
         * */

import java.util.Random;
import java.util.Scanner;

public class MethodDemoTest1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);        //输入
        Random r = new Random();       //随机

        int[] arr = {10,20,30,40,50};
        int[] newArr = new int[arr.length];

        System.out.print("原数组:");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }

        System.out.println();

        System.out.print("新数组:");
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < newArr.length; j++) {
                newArr[j] = arr[i];
                System.out.print(newArr[j]+" ");
                break;
            }

        }





    }

    }
package com.WjhJava.MethodDemo;
/* 需求/目标:
         *  需求:把一个数组中的元素复制到另一个新数组中去。
            分析:
            1.需要动态初始化一个数组,长度与原数组一样。
            2.遍历原数组的每个元素,依次赋值给新数组。
            3.输出两个数组的内容。
         * */

import java.util.Random;
import java.util.Scanner;

public class MethodDemoTest1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);        //输入
        Random r = new Random();       //随机

        int[] arr = {11,22,33,44,55};
        int[] copyArr = new int[arr.length];
        copy(arr,copyArr);

    }

    public static void copy(int[] arr,int[] copyArr){
        for (int i = 0; i < arr.length ; i++) {
            copyArr[i] = arr[i];
        }

        System.out.println("原数组:");
        printArr(arr);

        System.out.println("\n");

        System.out.println("新数组:");
        printArr(copyArr);

    }

    public static void printArr(int[] arr){

        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(i == arr.length-1 ? arr[i] : arr[i]+",");
        }
        System.out.print("]");


    }

    }


案例五:评委打分

案例:评委打分案例

需求:        在唱歌比赛中,有6名评委给选手打分,分数范围是[0~100]之间的整数。选手的最后得分分为:去掉最高分、最低分后的4个评委的平均分,请完成上述过程并计算出选手的得分.

分析:

        ①把6个评委的分数录入到程序中去---->使用数组

int[] scores = new int[6];

        ②遍历数组中每个数据,进行累加求和,并找出最高分、最低分。

        ③按照分数的计算规则算出平均分。

package com.WjhJava.MethodDemo;
        /* 需求/目标:
        需求:在唱歌比赛中,有6名评委给选手打分,分数汜围定[u~1uu]L也八E 高分、最低分后的4个评委的平均分,请完成上述过程并计算出选手的得分.

        分析:
        ①把6个评委的分数录入到程序中去---->使用数组
        int[] scores = new int[6];
        ②遍历数组中每个数据,进行累加求和,并找出最高分、最低分。
        ③按照分数的计算规则算出平均分。
         * */

import java.util.Random;
import java.util.Scanner;

public class MethodDemoTest1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);        //输入
        Random r = new Random();       //随机

        int[] arr = new int[6];
        score(arr);


    }

    public static void score(int[] arr){
        Random r = new Random();       //随机

        for (int i = 0; i < arr.length; i++) {      //随机生成数组最大长度的分数,然后遍历赋值给他
            arr[i] =r.nextInt(101);
        }


        //采用冒泡排序的方法
        for (int i = 0; i < arr.length-1; i++) {  //次数

            for (int j = 0; j < arr.length-i-1; j++) {  //轮数

                if(arr[j] > arr[j+1]){      //如果j位大于后一位,则交换位置
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }

        //按照上面从小打大排好的数组遍历输出
        System.out.print("评委们的分数分别是:");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(i == arr.length-1 ? arr[i] : arr[i]+",");
        }

        System.out.println();

        double count = 0;

        System.out.print("去掉最高分和最低分:");
        for (int i = 1; i < arr.length-1; i++) {        //去掉最高分和最低分
            System.out.print(i == arr.length-2 ? arr[i] : arr[i]+",");
            count += arr[i];
        }

        System.out.println();

        System.out.println("选手最终的得分是:"+count/ (arr.length-2));      //输出打印

    }

    }

案例六:数字加密

 需求:        某系统的数字密码:比如1983,采用加密方式进行传输,规则如下︰先得到每位数,然后每位数都加上5,再对10求余,最后将所有数字反转,得到一串新数。

package com.WjhJava.MethodDemo;
        /* 需求/目标:
        需求:某系统的数字密码:比如1983,采用加密方式进行传输,规则如下︰先得到每位数,然后每位数都加上5,再对10求余,最后将所有数字反转,得到一串新数。
         * */

import java.util.Random;
import java.util.Scanner;

public class MethodDemoTest1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);        //输入
        Random r = new Random();       //随机

        //1.定义一个数组存入需要加密的数组
        System.out.println("请您输入需要的密码个数:");
        int passNum = sc.nextInt();
        int[] pass = new int[passNum];

        //2.录入需要加密的数字
        for (int i = 0; i < pass.length; i++) {
            System.out.println("请输入第" + (i + 1) + "位密码:");
            int date = sc.nextInt();
            pass[i] = date;
        }

        //3.打印数组内容看一下
        printPass(pass);        //[1,9,8,3]

        //4.核心内容:对数组中的内容进行加密;pass[]={1,9,8,3,}
        for (int i = 0; i < pass.length; i++) {
            pass[i] =  (pass[i] + 5) % 10;
        }

        //5.核心逻辑:(对数组中加密的数据进行反转,才是最终加密的结果)      //pass = {6 ,4 ,3 ,8 }
        //                                                  占位:            i        j
        for (int i = 0,j=pass.length-1; i < j; i++,j--) {       //
            int temp = pass[i];
            pass[i] = pass[j];
            pass[j] = temp;
        }

        printPass(pass); //打印加密并反转后的数组      //[8,3,4,6]

    }

    public static void printPass(int[] pass){
        System.out.print("[");
        for (int i = 0; i < pass.length; i++) {
            System.out.print(i == pass.length-1 ? pass[i] : pass[i]+",");
        }
        System.out.println("]");
    }



    }

ps:也可以当成解密程序


案例七:模拟双色球[拓展]

P69 08


 

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
java语言程序设计课后答案 作业参考答案 习题一 4、如何建立和运行Java程序, 首先启动文本编辑器,如记事本、UltraEdit等,编辑程序代码,并以.Java作为文件 扩展名保存程序源代码;然后进入dos环境利用javac编译源程序,生成扩展名为.class的 字节码文件;再利用命令java运行字节码文件,得到程序的运行结果。在集成开发环境J builder、Eclipse下,可以完成程序的编辑、编译、调试及运行等所有任务。 5、 public class LikeJava { public static void main(String [] args) { System.out.println("I Like Java Very much!"); } } 习题二 5、 (1) 45 (2) false (3) 14 (4) 14 (5),6 (6) true (7) 12 9、 public class Volume { public static void main(String [] args) { double r=0,v=0; r=double.parseDouble(args[0]); v=4*3.14159/3*r*r*r; System.out.println("球体积为:"+v); } } 习题三 8、 public class Factorials { public static void main(String args[]) { int i, j; long s=0, k; i=1; do //外循环开始 { k = 1; j=1; do{//内循环开始 k = k * j; //内循环体 j++; }while(j<=i);//内循环结束 System.out.println(i + "!=" + k); s = s + k; i++; }while(i<=20); //外循环结束 System.out.println("Total sum=" + s); } } 10、 public class Num { public static void main(String[]args) { int i,j,k,n; for (n=100;n<1000;n++) { i=n/100; j=(n-i*100)/10; k=n%10; if (i*i*i+j*j*j+k*k*k==n) System.out.print(n+" "); } } } 习题四 5、 import java.util.Scanner; class Factor{ long fac(int m) {if(m==0""m==1)return 1; else return m*fac(m-1); } public static void main(String [] args) {int i,n; long sum=0; String s=""; Scanner input=new Scanner(System.in); System.out.print("Please input n: "); n=input.nextInt(); Factor f=new Factor(); for(i=1;i<=n;i++) { System.out.println(f.fac(i)); sum=sum+f.fac(i); s=s+i+"!+"; } System.out.println(s.substring(0,s.length()-1)+"="+sum); } } 习题五 2、 import java.io.*; public class YangHuiOk { public static void main (String args[]) throws IOException { int max,a[][],i,j; char x; System.out.print("请输入杨辉三角要显示的行数: "); x=(char)System.in.read(); max = Integer.parseInt(String.valueOf(x)); a=new int[max][]; for (i=0;i<max;i++) { a[i]=new int[i+1]; } a[0][0]=1; for (i=1;i<max;i++) { a[i][0]=1; a[i][a[i].length-1]=1; for (j=1;j<a[i].length-1;j++) { a[i][j]=a[i-1][j-1]+a[i-1][j]; } } for(i=0;i<max;i++) { //for(j=0;j<=max-i;j++) System.out
Java源码资源介绍 在寻求Java编程的学习材料或解决开发中的实际问题时,一份高质量的Java源码资源无疑是最为宝贵的。我所提供的Java源码资源,正是为了满足广大Java学习者、大学生、开发人员等群体的切实需求而精心整理的。 可用性亮点: 即插即用:每份源码都经过严格测试,确保在不同的开发环境中都能快速部署、立即运行,无需过多的配置和调试。 注释详尽:为了让学习者更好地理解代码逻辑和实现细节,源码中的关键部分都附有详尽的中文注释,降低学习门槛。 模块化设计:源码采用模块化的设计思想,结构清晰、易于扩展,方便用户根据自己的需求进行定制和修改。 学习与研究:对于大学生和初学者来说,这份源码资源是了解Java编程规范、学习Java高级特性的绝佳材料。通过阅读和运行源码,可以快速提升编程技能和实践能力。 项目实践:对于正在进行Java项目开发的人员来说,这份源码资源提供了丰富的实战案例和解决方案。无论是需要实现特定的功能还是解决复杂的性能问题,都能在这里找到灵感和帮助。 教学辅导:对于教师和教育机构来说,这份源码资源也是不可多得的教学辅助材料。它不仅可以用于课堂演示和实验指导,还可以作为学生的课后练习和扩展阅读材料。 总之,这份Java源码资源以其高度的可用性和广泛的适用性,成为了Java学习者和开发人员的必备宝藏。无论你是初学者还是资深开发者,都能在这里找到属于自己的价值和收获。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员希西子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值