返回顶部
首页 > 资讯 > 精选 >Java语法实例分析
  • 916
分享到

Java语法实例分析

2023-06-30 11:06:37 916人浏览 薄情痞子
摘要

本篇内容主要讲解“Java语法实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java语法实例分析”吧!一,素数求解的n种境界1.1,暴力循环求解public class&nbs

本篇内容主要讲解“Java语法实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java语法实例分析”吧!

一,素数求解的n种境界

1.1,暴力循环求解

public class TestDemo220427 {    public static void main(String[] args) {//        这里以求取1~100之间的素数为例        for(int i = 2;i <= 100;i++){//素数从2开始,所以从2开始产生到100的数            int flg = 1;//假设是素数            for(int j = 2;j < i;j++){                if(i%j == 0){                    flg = 0;                }            }            if(flg == 1){                System.out.println(i + "是素数!");            }        }    }}

1.2,试除前一半数

public class TestDemo220427 {    public static void main(String[] args) {//        这里以求取1~100之间的素数为例        for(int i = 2;i <= 100;i++){//素数从2开始,所以从2开始产生到100的数            int flg = 1;//假设是素数            for(int j = 2;j < i/2;j++){                if(i%j == 0){                    flg = 0;                }            }            if(flg == 1){                System.out.println(i + "是素数!");            }        }    }}

可以发现,我们一个数都是可以拆成两个数的乘法的,比如 16:可以是 1 16,2 * 8,4*4,可以看到,前半部分的数都是小于其自身的一半的,所以我们只需要检测这前半部分数能否被其自身整除了,因为只要前半部分有的话,后半部分肯定有一个数与之对应相乘能够得到自身,所以这就又减少了一半的工作量。*

1.3,试除小于自身开根号的数

import java.lang.Math;public class TestDemo220427 {    public static void main(String[] args) {//        这里以求取1~100之间的素数为例        for(int i = 2;i <= 100;i++){//素数从2开始,所以从2开始产生到100的数            int flg = 1;//假设是素数            for(int j = 2;j <= (int)(Math.sqrt(i));j++){                if(i%j == 0){                    flg = 0;                }            }            if(flg == 1){                System.out.println(i + "是素数!");            }        }    }}

还是刚才差不多的原理,只不过把范围又缩小了,因为一个数拆分成两个数的乘积的形式的话,前面的那个数不仅仅只是小于其自身的一半,其实根本上是不可能大于其开平方的值的,就比如16,其实前半部分的数不会大于4,因为大于4后可以看到不可能会有某个数能够与另一个数乘了等于16了,当然2 * 8,8 * 2这只算前面一种就好了

1.4,在奇数中寻找

import java.lang.Math;public class TestDemo220427 {    public static void main(String[] args) {//        这里以求取1~100之间的素数为例        for(int i = 1;i <= 100;i += 2){//从1开始,产生到100的奇数            int flg = 1;//假设是素数            if(i == 1){                System.out.println((i+1) + "是素数!");//2这里需要单拎出来考虑,比较特殊                continue;            }            for(int j = 2;j <= (int)(Math.sqrt(i));j++){                if(i%j == 0){                    flg = 0;                }            }            if(flg == 1){                System.out.println(i + "是素数!");            }        }    }}

我们知道,除了2这个特例,所有的偶数不可能是素数,因为最起码就能够被2整除,所以在范围内进行考虑的时候,就只需要检测奇数就好了,就把外层循环的次数减少了。

其实还有方法可以继续优化,这里就不再给大家一一列举了,如果大家有兴趣的话可以去查查,很多博主写的很详细深入!

二,闰年问题

public class TestDemo220427 {    public static boolean isleapYear(int year){        if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)){            return true;        } else{            return false;        }    }    public static void main(String[] args) {        Scanner scan = new Scanner(System.in);        System.out.println("请输入年份:");        int year = scan.nextInt();        boolean ret = isleapYear(year);        if(ret == true){            System.out.println(year + "是闰年!");        }else{            System.out.println(year + "不是闰年!");        }    }}

这里就只需要知道闰年的判断标准就可以很好的把题解出来。

三,求最大公约数以及最小公倍数

3.1,求最大公约数

import java.util.Scanner;public class TestDemo220427 {    public static void main(String[] args) {        Scanner scan = new Scanner(System.in);        int a = scan.nextInt();        int b = scan.nextInt();        int m = 0;        while((m = a%b) != 0){//辗转相除法            a = b;            b = m;        }        System.out.println(b);    }}

3.2,求最小公倍数

import java.util.Scanner;public class TestDemo220427 {    public static void main(String[] args) {        Scanner scan = new Scanner(System.in);        int a = scan.nextInt();        int b = scan.nextInt();        for(int i = 1;i > 0;i++){            if((a*i)%b == 0){                System.out.println("最小公倍数:" + a*i);                break;            }        }    }}

其实还有一个公式,假设最大公约数是m,则最小公倍数是 (a*b)/m。

四,自幂数问题

import java.lang.Math;public class TestDemo220427 {    public static boolean isNarnum(int num,int count){        int sum = 0;        int tmp = num;        while(tmp != 0){            sum += Math.pow(tmp%10,count);            tmp /= 10;        }        if(sum == num){            return true;        }else{            return false;        }    }    public static void main(String[] args) {//        判断一个数是不是自幂数        Scanner scan = new Scanner(System.in);        System.out.println("请输入一个数:");        int num = scan.nextInt();        int count = 0;        int tmp = num;        while(tmp != 0){            count++;            tmp /= 10;        }        boolean ret = isNarnum(num,count);        if(ret == true){            System.out.println(num + "是一个" + count +"位自幂数!");        }else{            System.out.println(num + "不是自幂数!");        }    }}

五,统计二进制位中1的个数

5.1,循环右移按位与1

import java.util.Scanner;public class TestDemo220427 {    public static int getOnecount(int num){        int count = 0;        while(num != 0){//右移后不为0就继续统计            if((num& 1) == 1){                count++;            }            num = num >> 1;        }        return count;    }    public static void main(String[] args) {        Scanner scan = new Scanner(System.in);        System.out.println("请输入一个数:");        int num = scan.nextInt();        int ret =  getOnecount(num);        System.out.println(num + "的二进制位中1的个数 :" + ret);    }}

注意:这段代码是有bug的,因为对于负数是统计不了的,负数的二进制最高符号位为1,右移补符号位那就是一直在高位补1,那循环就死循环了。

解决方法:num = num >> 1 &mdash;&mdash;> 改成 num = num >>> 1,用无符号右移,这样高位就只会补0,对于正数负数都适用。

拓展:可能有人会问,既然可以右移,那为啥不能左移?

答案是 : 确实可以左移,但是不推荐,效率太低。

public class TestDemo220427 {    public static int getOnecount(int num){        int count = 0;        for(int i = 0;i < 32;i++){            if((num & (1 << i)) != 0){                count++;            }        }        return count;    }    public static void main(String[] args) {        Scanner scan = new Scanner(System.in);        System.out.println("请输入一个数:");        int num = scan.nextInt();        int ret =  getOnecount(num);        System.out.println(num + "的二进制位中1的个数 :" + ret);    }}

这个时候就不是把这个数去左移了,而是把1左移,然后去与这个数按位与,因为这样的结果就只有可能是0或者非0,非0就表示1左移后的结果的1所在的位置对应的这个数的位置上是1,所以这个时候就统计一下。这样也可以解决问题,但是你必须得左移32次,因为你不知道这个数前面到底有多少1,只能所有的都比对完。

5.2,n &(n-1)消除1的原理

import java.util.Scanner;public class TestDemo220427 {    public static int getOnecount(int num){        int count = 0;        while(num != 0){            num = num&(num-1);            count++;        }        return count;    }    public static void main(String[] args) {        Scanner scan = new Scanner(System.in);        System.out.println("请输入一个数:");        int num = scan.nextInt();        int ret =  getOnecount(num);        System.out.println(num + "的二进制位中1的个数 :" + ret);    }

这种方法正数负数都可以用,并且效率很高,每次按位与num-1 一次,就会消掉一个1。

扩展:用这个方法判断某一个数是不是2的k次方。

import java.util.Scanner;public class TestDemo220427 {    public static void main(String[] args) {        Scanner scan = new Scanner(System.in);        System.out.println("请输入一个数:");        int num = scan.nextInt();        if((num & (num-1)) == 0){            System.out.println("是2的k次方数!");        }else{            System.out.println("不是2的k次方数!");        }    }}

到此,相信大家对“Java语法实例分析”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Java语法实例分析

本文链接: https://lsjlt.com/news/328483.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java语法实例分析
    本篇内容主要讲解“Java语法实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java语法实例分析”吧!一,素数求解的n种境界1.1,暴力循环求解public class&nbs...
    99+
    2023-06-30
  • XML语法实例分析
    本文小编为大家详细介绍“XML语法实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“XML语法实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。XML的语法规则既很简单...
    99+
    2024-04-02
  • CSS语法实例分析
    本文小编为大家详细介绍“CSS语法实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“CSS语法实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 CSS 规则由两个主...
    99+
    2024-04-02
  • jade语法实例分析
    本文小编为大家详细介绍“jade语法实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“jade语法实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 标签 自动闭合...
    99+
    2024-04-02
  • JavaScript语法实例分析
    本篇内容主要讲解“JavaScript语法实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript语法实例分析”吧!   &nbs...
    99+
    2024-04-02
  • css核心语法实例分析
    这篇文章主要介绍了css核心语法实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇css核心语法实例分析文章都会有所收获,下面我们一起来看看吧。   css基本概念  ...
    99+
    2024-04-02
  • C#基本语法实例分析
    这篇“C#基本语法实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C#基本语法实例分析”文章吧。一.基础语法C#区分大...
    99+
    2023-06-29
  • MSSQL基本语法实例分析
    这篇文章主要讲解了“MSSQL基本语法实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MSSQL基本语法实例分析”吧!刷新本地缓存Ctrl+Shift+R查询select&n...
    99+
    2023-06-29
  • Razor常用语法实例分析
    本文小编为大家详细介绍“Razor常用语法实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Razor常用语法实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。@using@using 指令用于向生成的...
    99+
    2023-06-29
  • Python语法实例代码分析
    这篇文章主要介绍了Python语法实例代码分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python语法实例代码分析文章都会有所收获,下面我们一起来看看吧。执行 Python 语法正如我们在上一节中学习到的...
    99+
    2023-07-05
  • Java贪心算法实例分析
    这篇“Java贪心算法实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java贪心算法实例分析”文章吧。贪心算法贪心算...
    99+
    2023-06-29
  • Java的Arrays.sort()方法实例分析
    本篇内容主要讲解“Java的Arrays.sort()方法实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java的Arrays.sort()方法实例分析”吧!首先看代码:// ...
    99+
    2023-06-29
  • Java方法使用实例分析
    这篇“Java方法使用实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java方法使用实例分析”文章吧。一、方法的概念...
    99+
    2023-06-30
  • Java Object类方法实例分析
    本文小编为大家详细介绍“Java Object类方法实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java Object类方法实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.equals方法1...
    99+
    2023-06-30
  • JavaScript函数与语法实例分析
    这篇文章主要介绍“JavaScript函数与语法实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript函数与语法实例分析”文章能帮助大家解决问题...
    99+
    2024-04-02
  • JavaScript基础之语法实例分析
    这篇文章主要介绍“JavaScript基础之语法实例分析”,在日常操作中,相信很多人在JavaScript基础之语法实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Ja...
    99+
    2024-04-02
  • Python语法举例分析
    这篇文章主要介绍“Python语法举例分析”,在日常操作中,相信很多人在Python语法举例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python语法举例分析”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-02
  • Java分治法与二分搜索算法实例分析
    本文实例讲述了Java分治法与二分搜索算法。分享给大家供大家参考,具体如下:1、分治法分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同。递归的解这些子问题,然后将各子问题的解合并得到原问题的...
    99+
    2023-05-30
    java 分治法 二分搜索
  • finally语句实例分析
    今天小编给大家分享一下finally语句实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
    99+
    2024-04-02
  • JavaScript语句实例分析
    这篇“JavaScript语句实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Jav...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作