02.第五章:循环

注意:在循环控制中 , 不要使用浮点值来比较值是否相等 。 因为浮点值都是某些值的近似值 , 使用它们可能导致不精确的循环次数和不准确的结果 。

02.第五章:循环_第1张图片

变量 item 从 1 开始,每执行一次循环体就减去 0.1 。当 item 变为 0 时循环应该终止。 但是,因为浮点數在算术上是近似的,所以不能确保 item 会变成真正的 0。从表面上看 ,这个循环似乎没问題 , 但实际上它是一个无限描环。

  • 1.求最大公约数(5.8.3)

方案:找到比最小的数小1的数d,从d开始往1走,找到第一个能够被两个整数同时整除的数就是最大公约数。

Scanner input=new Scanner(System.in);
 System.out.print("输入第一个数");
 int number1=input.nextInt();
 System.out.print("输入第二个数");
 int number2=input.nextInt();
 int d=(number11){
     if(number1%d==0&number2%d==0) {
         max = d;
         break;
     }
     d--;
 }
 System.out.println("最大公约数:"+max);

  • 2.十进制转换为十六进制
public class 练习4_10进制数转换为16进制数 {
    public static void main(String[] args){
        System.out.print("请输入十进制数:");
        Scanner input=new Scanner(System.in);
        int decimal=input.nextInt();
        int in=decimal;
        String hex="";
        while (decimal!=0){
            int hexValue=decimal%16;
            char hexch= (hexValue>=0&&hexValue<=9)?(char)(hexValue+'0'):(char)(hexValue-10+'A');
            hex=hexch+hex;
            decimal=decimal/16;
        }
        System.out.println(in+"的十六进制为:"+hex);
    }
}
  • 3.判断回文串
    如果一个字符串从前往后 , 以及从后往前是一样的 , 那么它就是一个回文 。 例如 ,“ mom ” 、 “ dad ” , 以及 “ noon ” , 都是回文 。
    方案:左右分别定义两个变量i,j。i
public class 练习5_判断回文串 {
     public static void main(String[] args){
        System.out.print("输入字符串:");
        Scanner input =new Scanner(System.in);
        String inString=input.nextLine();
        boolean isPail=true;
        for(int low=0,high=inString.length()-1;low
  • 4..显示素数
    分 5 行显示前 50 个素数 , 每行包含10 个数字 。
    提示:如果一个数不是素数是合数,那么一定可以由两个自然数相乘得到,其中一个大于或等于它的平方根,一个小于或等于它的平方根.并且成对出现.
public class 练习6_判断素数 {
   public static void main(String[] args){
       final int MAX_COUNT=50;
       final int MAX_COUNT_LINE=10;
       int suCount=0;
       int number=2;

       while(suCount
  • 5.分解因子

编写程序 , 读入一个整数 , 然后以升序显示它的所有最小因子 。 例如 ,若输人的整数是 120 , 那么输出就应该是 : 2 , 2 , 2 , 3 , 5 。
方案:将num从2开始除直到找到能被整除的因子,就是第一个因子。
num=num/2 再从2开始除,找到被整除的就是第二个因子
直到num值<2。

public class 课后text3 {
    public static void main(String[] args){
        System.out.print("请输入数字:");
        Scanner input =new Scanner(System.in);
        int num=input.nextInt();
        int k=2;
        while (k<=num){
            if(num%k==0){
                System.out.print(k+" ");
                num=num/k;
                k=2;
                continue;
            }
            k++;
        }
    }
}
  • 6.显示闰年

编写程序 , 显示从101到 2100 期间所有的闰年 , 每行显示10个 。 数字之间用一个
空格字符隔开 , 同时显示这期间闰年的数目 。
注:闰年的判断条件能整除4&&不能整除100,或能整除400

public class 课后text5 {
    public static void main(String[] args){
        int count=0;
        for (int i=101;i<=2100;i++){
            if((i%4==0&&i%100!=0)||i%400==0){
                count++;
                if(count%10==0) System.out.println(i);
                else System.out.print(i+" ");
            }
        }
    }
}
  • 7.显示每月第一天是星期几

编写程序 , 提示用户输人年份和代表该年第一天是星期几的数字 ,然后在控制台上显示该年每月第一天的星期 。
例如 , 如果用户输人的年份是 2013 和代表 2013年 1 月1日为星期二的 2 ,
程序应该显示如下输出 :
January 1 , 2013 is Tuesday
December 1 , 2013 is Sunday

public class 课后text6 {
    public static void main(String[] args){
        System.out.println("Enter year and day");
        Scanner input=new Scanner(System.in);
        int year=input.nextInt();
        int firstday=input.nextInt();
        int monthOfday=0;
        for(int month=1;month<=12;month++){
            switch (month){
                case 1:System.out.print("January 1,"+year+" is ");monthOfday=31;break;
                case 2:System.out.print("Febrary 1,"+year+" is ");monthOfday=((year%4==0&&year%100!=0)||year%400==0)?29:28;break;
                case 3:System.out.print("March 1,"+year+" is ");monthOfday=31;break;
                case 4:System.out.print("April 1,"+year+" is ");monthOfday=30;break;
                case 5:System.out.print("May 1,"+year+" is ");monthOfday=31;break;
                case 6:System.out.print("June 1,"+year+" is ");monthOfday=30;break;
                case 7:System.out.print("July 1,"+year+" is ");monthOfday=31;break;
                case 8:System.out.print("Augest,"+year+" is ");monthOfday=31;break;
                case 9:System.out.print("september,"+year+" is ");monthOfday=30;break;
                case 10:System.out.print("October,"+year+" is ");monthOfday=31;break;
                case 11:System.out.print("November,"+year+" is ");monthOfday=30;break;
                case 12:System.out.print("December,"+year+" is ");monthOfday=31;break;
            }
            switch (firstday){
                case 0:System.out.println("Sunday");break;
                case 1:System.out.println("monday");break;
                case 2:System.out.println("Tuesday");break;
                case 3:System.out.println("wednsday");break;
                case 4:System.out.println("Thusday");break;
                case 5:System.out.println("Friday");break;
                case 6:System.out.println("Satuday");break;
            }
            firstday=(firstday+monthOfday)%7;
        }
    }
}
  • 8.完全数

如果一个正整数等于除它本身之外其他所有除数之和,就称之为完全数。 例如 : 6 是第一个完全数 , 因为 6 =1 + 2 + 3 。 下一个完全数是 28 =14 + 7 + 4 + 2 + 1
10 000 以下的完全数有四个 ,编写程序 , 找出这四个完全数。

public class 课后text7 {
    public static void main(String[] args){
        for(int number=6;number<=10000;number++){
            int sum=0;
            for(int divisor=number-1;divisor>=1;divisor--){
                if(number%divisor==0){
                    sum=sum+divisor;
                }
            }
            if(sum==number){
                System.out.println(number);
            }
        }
    }
}
  • 9.十进制转换为二进制
public class 课后text9 {
    public static void main(String[] args){
        Scanner input=new Scanner(System.in);
        System.out.print("请输入十进制数:");
        int digit=input.nextInt();
        String hex="";
        while (digit!=0){
            hex=digit%2+hex;
            digit=digit/2;
        }
        System.out.println("16进制为:"+hex);

    }
}
  • 10. 十进制转换为八进制
public class 课后text10 {
    public static void main(String[] args){
        System.out.print("请输入十进制数:");
        Scanner input=new Scanner(System.in);
        int digit=input.nextInt();
        String octal="";
        while (digit!=0){
            octal=digit%8+octal;
            digit=digit/8;
        }
        System.out.println("八进制为"+octal);
    }
}
  • 11.统计最大数出现的次数,输入以0结束

输入:3 5 2 5 5 5 0
输出:最大数5出现4次

public class 课后text11 {
    public static void main(String[] args){
        Scanner input=new Scanner(System.in);
        System.out.print("请输入:");
        int num=input.nextInt();
        int max=0;
        int count=0;
        while (num!=0){
            if(num>max)
            {
                max=num;
                count=1;
                num=input.nextInt();
                continue;
            }
            else if (num==max) {
                count++;
                num=input.nextInt();
            }
            else {
                num=input.nextInt();
            }

        }
        System.out.println("最大数为:"+max+" 出现次数:"+count);
    }
  • 12.字符串的逆序

Enter a string : ABCD
The reversed string is DCBA

public class 课后text13 {
    public static void main(String[] args){
        System.out.print("Enter a string:");
        Scanner input=new Scanner(System.in);
        String s=input.next();
        String reverString="";
        for(int i=s.length()-1;i>=0;i--){
            reverString=reverString+s.charAt(i);
        }
        System.out.println(reverString);
    }
}
  • 13.最长共同前缀
public class 课后text17 {
    public  static void main(String[] args){
        Scanner input=new Scanner(System.in);
        System.out.print("Enter the first string:");
        String s1=input.nextLine();
        System.out.print("Enter the second string:");
        String s2=input.nextLine();
        int length=s1.length()0)
            System.out.println("The common prefix is "+result);
        else
            System.out.println(s1+"and"+s2+"have no common prefix");

    }
}

你可能感兴趣的:(02.第五章:循环)