《写给大忙人看的 Java 核心技术》 01 章课后练习

 

所有结果都是以函数的形式写出来的,

1.写个程序,它读取一个整数并以二进制、八进制和十六进制输出。以十六进制浮点数输出倒数。

public static void exe1(int n) {
    	        System.out.printf("十进制输出%d\n",n);
		System.out.printf("二进制输出"+Integer.toBinaryString(n)+"\n");
		System.out.printf("十六进制输出"+"%x\n",n);
		System.out.printf("八进制输出%o\n",n);
	}

2.写个程序,它读取整数,然后经过模运算转换为 0° ~ 359° 之间的值。首先以操作符 % 完成,然后再试 floorMod。

public static void exe2(int n) {
    	System.out.printf("度数%d\n",(n%360+360)%360);
    	System.out.printf("度数%d\n",Math.floorMod(n, 360));
		
	}

3.只用条件操作符,写一个程序,读取三个整数并输出最大的。使用 Math.max 实现同样的功能。

	public static int exe3(int a,int b,int c) {
		int res1=-1;
        //操作符
		res1=a>b?(a>c)?a:c:(b>c)?b:c;
        //max函数
		int res2=Math.max(a, Math.max(b, c));
		return res1;	
	}
	

4.写个程序,输出 double 类型中的最小正数值和最大正数值。提示:在 Java API 文档中查询 Math.nextUp

5当你将一个 double 类型的值转换为 int 类型的值,并且该值大于最大可能的 int 值时,会发生什么?试试看。

Double 类型的数据较大的话,强制转换将数据截短了,只保留了 Integer 类型能够表示的最大数值

6.写个程序,计算阶乘 n! = 1 × 2 × ... × n,使用 BigInteger。计算 1000 的阶乘。

public static BigInteger exe5(BigInteger n) {
		if (n.equals(BigInteger.ONE)) {
			return BigInteger.ONE;
		}else {
			return n.multiply(exe5(n.subtract(BigInteger.ONE)));
		}
	}

7.写个程序,读取 0~65535 之间的两个数,在 short 变量中存储,并计算它们的无符号之和、之差、之积、之商和余数,不要将它们转换为 int 类型。

8.写个程序,读取一个字符串并输出该字符串所有的非空子字符串。

public static void exe8(String str) {
		if (str==null||str.length()==0) {
			return;
		}
		else {
			String[] strings=str.split("\\s+");
			for(String string:strings){
				System.out.println(string);
			}
		}
	
	}

9.“1.5.3” 节中有个例子,两个字符串 s 和 t,虽然 s.equals(t) 为真,但是 s != t 。找出不使用 substring 方法的不同例子。

这个随便弄两个字符串就行

10 写个程序,先产生随机的 long 型整数,然后模 36,最后输出由字母和数字组成的随机字符串。

public static void exe10() {
		String str="abcdefghijklmnopqrstuvwxyz";
		StringBuilder stringBuilder=new StringBuilder();
		Random random=new Random();
		long long1=random.nextLong();
		stringBuilder.append(Math.floorMod(long1, 36));
		for (int i = 0; i <str.length(); i++) {
			stringBuilder.append(str.charAt(random.nextInt(str.length()-1)));
		}
		System.out.println(stringBuilder);
	}

13.写个程序,可以输出一组彩票组合,该组合由 1~49 之间的 6 个不同数字组成。为产生 6 个不同数字,先用 1~ 49 填充一个数组。然后随机选择一个索引并删除对应元素,重复 6 次,并输出排序后的结果。

//从1到49中产生n个不同的随机数 并按升序返回
    //主要思路是放桶法,构建一个50大小的数组用于标识是否被选择,1标识被选中,0标识未被选中
	//遍历,当选取的索引未被选中时n--,并将标识置为1 最后遍历数组将选中的索引存放在一个list中排序输出
	public static void exe13(int n) {
		int [] values=new int[50];
		Random random=new Random();
		random.setSeed(System.currentTimeMillis());
		List<Integer> list=new ArrayList<Integer>();
		while (n>=1) {
			int pos=random.nextInt(49);
			//防止出现0 的情况
			pos++;
			if (values[pos]==0) {
				list.add(pos);
				values[pos]=1;
				n--;
			}
		}
		Collections.sort(list);
		System.out.println(list);
	}

14 写个程序,读取整型的二维数组并判断它是否是魔方(也就是,所有的行之和、列之和,以及对角线之和都是相同的)。接受可以分隔成单个整数的行输入,当用户输入空白行时停止。例如,如下输入

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值