thinking in java练习第四章

这篇博客包含一系列Java编程练习,涉及基本控制结构、循环、条件判断、数学运算及算法应用。练习涵盖打印1到100的值、随机数分类、素数检测、二进制表示、范围判断、斐波那契数列生成以及吸血鬼数字的查找等,旨在提升初学者的编程能力。
摘要由CSDN通过智能技术生成

练习1:写一个程序,打印从1到100的值。

public class test1{
    
    public static void main(String args[]) {
        for(int i=1;i<=100;i++){
            System.out.println(i);
        }
    }
    
}

练习2:写一个程序,产生25个int类型的随机数,对于每一个随机数,使用if-else语句来将其分类为大于、小于,或等于紧随它而随机产生的值。

import java.util.*;
public class test2{
    
    public static void main(String args[]) {
       Random rad=new Random();
       int a=rad.nextInt();//随机生成的第一个数
       int b;
       for(int i=1;i<25;i++){
           b=rad.nextInt();
           if(a>b){
               System.out.println("第"+i+"个随机数:"+a+"大于紧跟其后的随机数"+b);
           }else if(a==b){
               System.out.println("第"+i+"个随机数:"+a+"等于紧跟其后的随机数"+b);
           }else{
               System.out.println("第"+i+"个随机数:"+a+"小于紧跟其后的随机数"+b);
           }
           a=b;
            if(i==24){
               System.out.println("最后一个随机数:"+a);
           }
       }

    }
    
}
输出结果
第1个随机数:921608312大于紧跟其后的随机数-210784005
第2个随机数:-210784005小于紧跟其后的随机数1738075623
第3个随机数:1738075623大于紧跟其后的随机数-1788361359
第4个随机数:-1788361359大于紧跟其后的随机数-2005614682
第5个随机数:-2005614682小于紧跟其后的随机数-534841640
第6个随机数:-534841640大于紧跟其后的随机数-666533469
第7个随机数:-666533469大于紧跟其后的随机数-1357063071
第8个随机数:-1357063071小于紧跟其后的随机数-356550343
第9个随机数:-356550343小于紧跟其后的随机数1887593432
第10个随机数:1887593432大于紧跟其后的随机数-963783559
第11个随机数:-963783559小于紧跟其后的随机数1601203436
第12个随机数:1601203436大于紧跟其后的随机数1286853842
第13个随机数:1286853842大于紧跟其后的随机数-1265985246
第14个随机数:-1265985246小于紧跟其后的随机数-331492131
第15个随机数:-331492131小于紧跟其后的随机数796502131
第16个随机数:796502131大于紧跟其后的随机数-215834027
第17个随机数:-215834027大于紧跟其后的随机数-1726080216
第18个随机数:-1726080216小于紧跟其后的随机数1881219206
第19个随机数:1881219206大于紧跟其后的随机数-333264008
第20个随机数:-333264008大于紧跟其后的随机数-691260232
第21个随机数:-691260232小于紧跟其后的随机数1559909863
第22个随机数:1559909863大于紧跟其后的随机数-1168708255
第23个随机数:-1168708255小于紧跟其后的随机数-903969404
第24个随机数:-903969404小于紧跟其后的随机数-312183266
最后一个随机数:-312183266

练习3:修改练习2,把代码用一个while无限循环包括起来。然后运行它直至用键盘中断其运行(通常是通过按Ctrl+c)。

import java.util.*;
public class MyClass {
    public static void main(String args[]) {
        while(true){
            Random rad=new Random();
           int a=rad.nextInt();//随机生成的第一个数
           int b;
           for(int i=1;i<25;i++){
               b=rad.nextInt();
               if(a>b){
                   System.out.println("第"+i+"个随机数:"+a+"大于紧跟其后的随机数"+b);
               }else if(a==b){
                   System.out.println("第"+i+"个随机数:"+a+"等于紧跟其后的随机数"+b);
               }else{
                   System.out.println("第"+i+"个随机数:"+a+"小于紧跟其后的随机数"+b);
               }
               a=b;
                if(i==24){
                   System.out.println("最后一个随机数:"+a);
               }
           }
        }
    }
}

练习4:写一个程序,使用两个嵌套的for循环和取余操作符(%)来探测和打印素数(只能被其自身和1整除,而不能被其它数字整除的整数)

import java.util.*;
public class MyClass {
    public static void main(String args[]) {
        for(int i=1;i<100;i++){
            if((i==1)||(i==2)){
                System.out.println(i);
            }else{
                int x=0;
                for(int j=2;j<i;j++){
                    if(i%j==0){
                        x=1;
                        break;
                    }
                }
                if(x==0){
                    System.out.println(i);
                }
            }
        }
    }
}
output:1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
import java.util.*;
public class Main {
    public static void main(String[] args) {
        for (int i = 1; i < 100; i++) {
            if (i == 1) {
                System.out.println(i);
                continue;
            } else {
                for (int k = i - 1; k > 0; k--) {
                    if (k == 1) {
                        System.out.println(i);
                    } else {
                        if (i % k == 0) {
                            break;
                        } else {
                            continue;
                        }
                    }
                }
            }
        }
    }
}
output:1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
————————————————
版权声明:本文为CSDN博主「赟傑」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43632070/article/details/95041649

练习5:重复第3章中的练习10,不要用Integer.toBinaryString()方法,而是用三元操作符和按位操作符来显示二进制的1和0。

import java.util.*;
public class test5{
    public static void changez(int i) {
        char[] b = new char[32];
        int c = 32;
        do {
            b[--c] = ((i & 0X01) == 0) ? '0':'1';
            i>>>=1;
        }while(i!=0);
        for (int j = 0; j < b.length; j++) {
            System.out.print(b[j]);
        }
        System.out.println();
    }
    public static void main(String[] args) {
        int x = 0Xaaaaaaaa;
        int y = 0x55555555;
        System.out.print("x = ");changez(x);
        System.out.print("y = ");changez(y);
        System.out.print("x =  ");changez(~x);
        System.out.print("y = ");changez(~y);
        System.out.print("x&x = ");changez(x&x);
        System.out.print("x|x =  ");changez(x|x);
        System.out.print("x^x =  ");changez(x^x);
        System.out.print("x&y =  ");changez(x&y);
        System.out.print("x|y =  ");changez(x|y);
        System.out.print("x^y =  ");changez(x^y);
    }
}
output:
i1 = 10101010101010101010101010101010
i2 = 1010101010101010101010101010101
~i1 = 1010101010101010101010101010101
~i2 = 10101010101010101010101010101010
i1&i1 = 10101010101010101010101010101010
i1|i1 = 10101010101010101010101010101010
i1^i1 = 0
i1&i2 = 0
i1|i2 = 11111111111111111111111111111111
i1^i2 = 11111111111111111111111111111111


————————————————
版权声明:本文为CSDN博主「赟傑」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43632070/article/details/95041649

练习6:修改前两个程序中的两个test()方法,让它们接收两个额外的参数begin和end,这样在测试testval时将判断它是否在begin和end之间(包括begin和end)的范围内。

public class test6{
    static int test(int testval,int begin,int end){
        if((testval<=end)&&(testval>=begin)){
            return 1;
        }
        return 0;
    }
    public static void main(String args[]) {
        int x = test(2,1,5);
        if(x==1){
            System.out.println("testval在begin和end之间");
        }else{
            System.out.println("testval不在begin和end之间");
        }
    }
    
}  

output:
testval在begin和end之间

练习7:修改本章练习1,通过使用break关键词,使得程序在打印到99时退出。然后尝试使用return来达到相同的目的。

用break
public class test7{
    
    public static void main(String args[]) {
        for(int i=1;i<=100;i++){
            System.out.println(i);
            if(i==99)break;
        }
    }
    
} 


用return
public class test7{
    
    public static void main(String args[]) {
        for(int i=1;i<=100;i++){
            System.out.println(i);
            if(i==99)return;
        }
    }
    
}   

练习8:写一个switch开关语句,为每个case打印一个消息。然后把这个switch放进for 循环来测试每个case。先让每个case后面都有break,测试一下会怎样;然后把break删了,看看会怎样。

public class test8{
    
    public static void main(String args[]) {
        for(int i=0;i<5;i++){
            switch (i){
                case 0:System.out.println("value is 0");break;
                case 1:System.out.println("value is 1");break;
                case 2:System.out.println("value is 2");break;
                case 3:System.out.println("value is 3");break;
                default:System.out.println("default");break;
            }
            
        }
    }
    
} 
output:
value is 0
value is 1
value is 2
value is 3
default
 
去掉break
public class test8 {
    
    public static void main(String args[]) {
        for(int i=0;i<5;i++){
            switch (i){
                case 0:System.out.println("value is 0");//break;
                case 1:System.out.println("value is 1");//break;
                case 2:System.out.println("value is 2");//break;
                case 3:System.out.println("value is 3");//break;
                default:System.out.println("default");//break;
            }
            
        }
    }
    
}  
output:
value is 0
value is 1
value is 2
value is 3
default
value is 1
value is 2
value is 3
default
value is 2
value is 3
default
value is 3
default
default

练习9:一个斐波那契数列是由数字1、1、2、3、5、8、13、21、34等等组成的,其中每一个数字(从第三个数字起) 都是前两个数字的和。创建一个方法,接收一个整数参数,并显示从第一个元素开始总共由该参数指定的个数所构成的所有斐波那契数字。例如,如果运行java Fibonacci 5(其中Fibonacci是类名),那么输出就应该是1、1、2、3、5。
 

public class test9{
    public static void fibonacci(int num){
        int num1=1;
        int num2=1;
        int num3;
        for(int i=0;i<num;i++){
            if(i==0){
                System.out.print("1 ");
                continue;
            }
            if(i==1){
                System.out.print("1 ");
                continue;
            }
            num3=num1+num2;
            System.out.print(num3+" ");
            num1=num2;
            num2=num3;
        }
    }
    public static void main(String args[]) {
        fibonacci(9);
    }
    
}  
output:
1 1 2 3 5 8 13 21 34 

练习10:吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。以两个0结尾的数字是不允许的,例如,
 * 下列数字都是“吸血鬼”数字:
 * 1260 = 21 * 60
 * 1827 = 21 * 87
 * 2187 = 27 * 81
写一个程序,找出4位数的所有吸血鬼数字。
 

public class test10{
    public static void main(String args[]) {
        int num1;
        int num2;
         int num3;
          int num4;
       for(int i=1000;i<10000;i++){
           num1=i/1000;//千位
           num2=i%1000/100;//百位
           num3=i%100/10;//十位
           num4=i%10;//个位
           //System.out.println(num1+" "+num2+" "+num3+" "+num4);
           if(i==(num1*10+num2)*(num3*10+num4)){
               System.out.println(i+"="+num1+num2+"*"+num3+num4);
           }else if(i==(num1*10+num2)*(num4*10+num3)){
               System.out.println(i+"="+num1+num2+"*"+num4+num3);
           }else if(i==(num1*10+num3)*(num2*10+num4)){
               System.out.println(i+"="+num1+num3+"*"+num2+num4);
           }else if(i==(num1*10+num3)*(num4*10+num2)){
               System.out.println(i+"="+num1+num3+"*"+num4+num2);
           }else if(i==(num1*10+num4)*(num2*10+num3)){
               System.out.println(i+"="+num1+num4+"*"+num2+num3);
           }else if(i==(num1*10+num4)*(num3*10+num2)){
               System.out.println(i+"="+num1+num4+"*"+num3+num2);
           }else if(i==(num2*10+num1)*(num3*10+num4)){
               System.out.println(i+"="+num2+num1+"*"+num3+num4);
           }else if(i==(num2*10+num1)*(num4*10+num3)){
               System.out.println(i+"="+num2+num1+"*"+num4+num3);
           }else if(i==(num3*10+num1)*(num2*10+num4)){
               System.out.println(i+"="+num3+num1+"*"+num2+num4);
           }else if(i==(num3*10+num1)*(num4*10+num2)){
               System.out.println(i+"="+num3+num1+"*"+num4+num2);
           }else if(i==(num4*10+num1)*(num2*10+num3)){
               System.out.println(i+"="+num4+num1+"*"+num2+num3);
           }else if(i==(num4*10+num1)*(num3*10+num2)){
               System.out.println(i+"="+num4+num1+"*"+num3+num2);
           }
       }
    }
    
}  

output:
1260=21*60
1395=15*93
1435=41*35
1530=51*30
1827=21*87
2187=27*81
6880=86*80
其他方法:
public class test10{

    public static void main(String[] args) {
        int[] startDigit = new int[4];
        int[] productDigit = new int[4];
        for (int num1 = 10; num1 <= 99; num1++) {
            for(int num2 = num1; num2 <= 99; num2++) {
                if((num1 * num2) %9 != (num1 + num2) % 9) {
                    continue;
                }
                int product = num1 * num2;
                startDigit[0] = num1 /10;
                startDigit[1] = num1 % 10;
                startDigit[2] = num2 / 10;
                startDigit[3] = num2 % 10;
                productDigit[0] = product / 1000;
                productDigit[1] = (product % 1000) / 100;
                productDigit[2] = product % 1000 % 100 / 10;
                productDigit[3] = product % 1000 % 100 % 10;

                int count = 0;
                for(int x = 0; x < 4; x++) {
                    for (int y = 0; y < 4; y++) {
                        if(productDigit[x] == startDigit[y]) {
                            count++;
                            productDigit[x] = -1;
                            startDigit[y] = -2;
                            if(count == 4) {
                                System.out.println(num1 + "*" + num2 + " : " + product);
                            }
                        }
                    }
                }
            }
        }
    }
}
————————————————
版权声明:本文为CSDN博主「我家的红叶都疯了」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/summerSunStart/article/details/79630111

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值