首页新闻动态正文

技术贴【黑马java培训】

更新时间:2019年07月26日 11时16分50秒 来源:黑马程序员论坛

来黑马有一段日子了,下面将我学习过程中遇到的难点与大家分享
/*
需求:键盘输入两个数。定义方法求出这两个数的最小公倍数和最大公约数。
*/
public class MaxAndMin {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入第一个数:");
        int a = sc.nextInt();
        System.out.println("请输入第二个数:");
        int b = sc.nextInt();
        int gongBeiShu = minGongBeiShu(a, b);
        System.out.println("最小公倍数是:" + gongBeiShu);
        int gongYueShu = maxGongYueShu(a, b);
        System.out.println("最大公约数是:" + gongYueShu);
    }

    public static int minGongBeiShu(int a, int b) {
        int max = a > b ? a : b;
        int min = a < b ? a : b;
        for (int i = max; i <= min * max; i++) {
            if (i % a == 0 && i % b == 0) {
                return i;
            }
        }
        return -1;
    }

    public static int maxGongYueShu(int a, int b) {
        int max = a > b ? a : b;
        int min = a < b ? a : b;

        for (int i = min; i > 1; i--) {
            if (max % i == 0 && min % i == 0) {
                return i;
            }
        }
        return -1;
    }
}
求两个数的最大公约数和最小公倍数有异曲同工之处,主要是讲循环的起点和终点分析清楚,这样才能提高效率。

/*
需求:给定一个整数数组array和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

*/
public class GetSum {

    public static void main(String[] args) {
        int[] array = {15, 25, 37, 48, 55, 73, 837, 82, 21};//定义一个数组
        Scanner sc = new Scanner(System.in);
            System.out.println("请输入一个数");
            int target = sc.nextInt();//自己手动输入一个目标
            boolean flag = false;// 定义一个布尔类型标记,用来标记数据不存在情况
            for (int i = 0; i < array.length; i++) {//第一层循环,用来控制数组中的所有元素
                for (int j = i + 1; j < array.length; j++) {// 第二层循环,因为不能重复使用数组中的元素,所以j从i+1开始
                    if ((array[i] + array[j]) == target) {// 如果发现
                        System.out.println("数组下标是:" + i + "和" + j);
                        flag = true;
                        break;
                    }
                }
            }
            if (!flag)
                System.out.println("不存在");
            }
    }
这道题的重点就是嵌套循环,第一个循环用来遍历数组中的所有元素,第二层循环因为题干要求不能重复利用数组中同样的元素,所以第二层循环的起点是i+1;

/*
需求:一个大V直播抽奖,奖品是现金红包,分别有{2,588,888,1000,10000}五个奖金。请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。
*/
public class Demo8 {
    public static void main(String[] args) {
        //1.定义存放奖金的数组
        int[] arr = {10000,1000,588,888,2};
        //2.定义数组存放已经被取过的奖金
        int[] brr = new int[5];
        //3.定义变量表示brr的索引
        int index = 0;
        //4.创建随机数对象
        Random r = new Random();
        //5.定义循环反复获取随机数,如果index小于arr的长度则继续循环
        while(index < arr.length){
            //5.1每次生成一个随机索引对应一个奖金
            int i = r.nextInt(arr.length);
            //5.2调用方法判断这个奖金是否被获取过
            boolean b = exist(brr, arr[i]);
            //5.3b是false代表这个奖金没有被抽取过
            if(!b) {
                //5.4把获取之后的奖金存放到brr中
                brr[index] = arr[i];
                //5.5index索引向后移动一次
                index++;
                //5.6打印本次被抽出的奖项
                System.out.println( arr[i] + "元的奖金被抽出");
            }
        }
    }
    //6.定义方法:判断brr数组中是否存在num这个数字
    public static boolean exist(int[] brr,int num){
        //6.1对数组进行遍历
        for (int i = 0; i < brr.length; i++) {
            //6.2判断如果找到数字,则返回true
            if(brr[i] == num){
                return true;
            }
        }
        //6.3如果最终没有找到则返回false
        return false;
    }
}
这一道题的难点是抽奖的时候要随机而且不能重复,这就需要我们重新定义一个数组,将已经抽过的奖项放入新数组中,这样当随机出一个奖项时,做出判断,遍历新数组,看奖项是否被抽过,

推荐了解热门学科

java培训 Python人工智能 Web前端培训 PHP培训
区块链培训 影视制作培训 C++培训 产品经理培训
UI设计培训 新媒体培训 产品经理培训 Linux运维
大数据培训 智能机器人软件开发




传智播客是一家致力于培养高素质软件开发人才的科技公司“黑马程序员”是传智播客旗下高端IT教育品牌。自“黑马程序员”成立以来,教学研发团队一直致力于打造精品课程资源,不断在产、学、研3个层面创新自己的执教理念与教学方针,并集中“黑马程序员”的优势力量,针对性地出版了计算机系列教材50多册,制作教学视频数+套,发表各类技术文章数百篇。

传智播客从未停止思考

传智播客副总裁毕向东在2019IT培训行业变革大会提到,“传智播客意识到企业的用人需求已经从初级程序员升级到中高级程序员,具备多领域、多行业项目经验的人才成为企业用人的首选。”

中级程序员和初级程序员的差别在哪里?
项目经验。毕向东表示,“中级程序员和初级程序员最大的差别在于中级程序员比初级程序员多了三四年的工作经验,从而多出了更多的项目经验。“为此,传智播客研究院引进曾在知名IT企业如阿里、IBM就职的高级技术专家,集中研发面向中高级程序员的课程,用以满足企业用人需求,尽快补全IT行业所需的人才缺口。

何为中高级程序员课程?

传智播客进行了定义。中高级程序员课程,是在当前主流的初级程序员课程的基础上,增加多领域多行业的含金量项目,从技术的广度和深度上进行拓展“我们希望用5年的时间,打造上百个高含金量的项目,覆盖主流的32个行业。”传智播客课程研发总监于洋表示。




黑马程序员热门视频教程【点击播放】

Python入门教程完整版(懂中文就能学会) 零起点打开Java世界的大门
C++| 匠心之作 从0到1入门学编程 PHP|零基础入门开发者编程核心技术
Web前端入门教程_Web前端html+css+JavaScript 软件测试入门到精通


在线咨询 我要报名
和我们在线交谈!