Java编程思想-第四章练习题
练习1:写一个程序,打印从1到100的值
public class Print1To100{ public static void main(String args[]){ for(int i = 1 ; i <= 100 ; i++){ System.out.println("value:" + i) ; } } }
练习2:写一个程序,产生25个int类型的随机数。对于每个随机值,使用if-else语句来将其分类为大于、小于或等于紧随它而随机生成的值。
1 public class RandomNumber{ 2 public static void main(String args[]){ 3 int i = 0 ; 4 Random rand =new Random() ;//实例化Random() 5 int num1 = 0 ; 6 while(i<25){ 7 int num2 = rand.nextInt(100) ;//产生一个100以内的整数 8 System.out.print(num2) ; 9 if(num1 == num2){//比较新生成的数值是否和前一个数值是否相等 10 System.out.println(" = The previous number") ; 11 } 12 else if(num1 < num2){//比较新生成的数值是否大于前一个数值 13 System.out.println(" > The previous number") ; 14 } 15 else{比较新生成的数值是否小于前一个数值 16 System.out.println(" < The previous number") ; 17 } 18 19 num1 = num2 ; 20 i++ ; 21 22 } 23 } 24 }
练习3:修改练习2,把代码用一个while无线循环包括起来。然后运行它直至用键盘中断其运行(Ctrl+C)。
1 public class RandomNumber{ 2 public static void main(String args[]){ 3 int i = 0 ; 4 Random rand =new Random() ;//实例化Random() 5 int num1 = 0 ; 6 while(true){//终止条件修改为true 7 int num2 = rand.nextInt(100) ;//产生一个100以内的整数 8 System.out.print(num2) ; 9 if(num1 == num2){//比较新生成的数值是否和前一个数值是否相等 10 System.out.println(" = The previous number") ; 11 } 12 else if(num1 < num2){//比较新生成的数值是否大于前一个数值 13 System.out.println(" > The previous number") ; 14 } 15 else{比较新生成的数值是否小于前一个数值 16 System.out.println(" < The previous number") ; 17 } 18 19 num1 = num2 ; 20 i++ ; 21 22 } 23 } 24 }
练习4:写一个程序,使用两个嵌套for循环和取余操作符(%)来探测和打印素数。
1 public class PrimeNumber{ 2 static boolean isPrimeNum(int num){//判断是否是素数 3 for(int i = 2; i < Math.abs(num) ; i++){ 4 if(num%i == 0){ 5 return false ;//不是素数返回false 6 } 7 } 8 return true ;//是素数返回true 9 } 10 public static void main(String args[]){ 11 for(int i = -100 ; i < 1000 ; i++){ 12 if(isPrimeNum(i)){//调用isPrimeNum()方法 13 System.out.println(i) ; 14 } 15 } 16 } 17 }
练习5:重复第三章练习10,不要用Integer.toBinaryString()方法,而是用三元操作符和按位操作符来进行显示二进制的1和0.
这一题没有做。。。
练习6:修改前两个程序中的两个test()方法,让他们接受两个额外的参数begin和end,这样在测试testval时将判断它是否在begin和end之间的范围(包含begin和end)。
练习7:修改本章练习1,通过使用break关键词,使得程序在打印99时退出。然后尝试使用return来达到相同的目的。
1 public class Print1To100{ 2 public static void main(String args[]){ 3 for(int i = 1 ; i <= 100 ; i++){ 4 if(i == 99){ 5 break ; 6 } 7 System.out.println("value:" + i) ; 8 } 9 } 10 }
练习8:写一个switch开关语句,为每个case打印一条消息。然后把这个switch放进for循环来测试每个case。先让每个case后面都有break,然后把break删除测试。
1 public class SwitchTest{ 2 public static void main(String[] args) { 3 for(int i = 0 ; i < 10 ; i++){ 4 switch(i){ 5 case 1:System.out.println("case 1") ; 6 break ; 7 case 2:System.out.println("case 2") ; 8 break ; 9 case 3:System.out.println("case 3") ; 10 break ; 11 case 4:System.out.println("case 4") ; 12 break ; 13 case 5:System.out.println("case 5") ; 14 break ; 15 case 6:System.out.println("case 6") ; 16 break ; 17 default:System.out.println("default") ; 18 } 19 } 20 } 21 }
练习9:一个斐波那契数列由数字1、1、2、3、5、8、13、21、34等等组成的,其中每个数字(第三个数字起)都是前两个数字的之和。
1 public class Fibonacci{ 2 public static void main(String[] args) { 3 int len = Integer.parseInt(args[0]);//取出参数 4 int num1 = 1 ;//初始化变量 5 int num2 = 1 ; 6 int num3 = 0 ; 7 for(int i = 2 ; i < len ; i++){//循环打印出指定的长度 8 num3 = num1 + num2 ;//前两个数相加等于等三个数 9 num1 = num2 ; //交换数值 10 num2 = num3 ; 11 System.out.print(num3 + ",") ; 12 } 13 } 14 }
练习10:吸血鬼数字是指位数为偶数的数字,可以有一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字。以两个0结尾的数字是不允许的,例如一下吸血鬼数字:
1260 = 21 * 60
1827 = 21 * 87
写一个程序找出4位数所有的吸血鬼数字。
1 public class Vampire{ 2 public static void main(String[] args) { 3 String[] ar_str1 , ar_str2 ; 4 for(int num = 1000 ; num <= 10000 ; num++){//设定被除数为4位数 5 for(int divisor = 10 ; divisor < 100 ; divisor++){//设定除数为两位数 6 int num1 = num / divisor ; 7 int remainder = num % divisor ;//余数 8 int remainder1 = divisor % 10 ; 9 int remainder2 = num1 % 10 ; 10 //判断是否为吸血鬼数字 11 if(remainder == 0 && (remainder1 != 0 || remainder2 != 0)){//判断是否能够被整除,且两个除数末尾不全为0 12 ar_str1 = String.valueOf(num).split("") ;//把num拆分成单个字符 13 ar_str2 = (String.valueOf(num1) + String.valueOf(divisor)).split("") ;//把num1和divisor拆分成字符 14 java.util.Arrays.sort(ar_str1) ;//num排序 15 java.util.Arrays.sort(ar_str2) ; 16 if(java.util.Arrays.equals(ar_str1, ar_str2)){//比较num是否和num1+divisor相同,如果相同打印,并终止内嵌的循环 17 System.out.println(num + "=" + divisor + "*" + num1) ; 18 break ; 19 } 20 } 21 } 22 } 23 } 24 }