转载

算法练习(2):二维数组(1.1.8-1.1.13)

本系列博客习题来自《算法(第四版)》,算是本人的读书笔记,如果有人在读这本书的,欢迎大家多多交流。为了方便讨论,本人新建了一个微信群(算法交流),想要加入的,请添加我的微信号:zhujinhui207407 谢谢。另外,本人的个人博客 http://www.kyson.cn 也在不停的更新中,欢迎一起讨论

知识点

  • java的基本语法
  • 十进制与二进制的转换
  • 一维数组的逆序输出
  • 二维数组的转置(交换行与列)

题目

1.1.8 给出以下表达式的值:

a. System.out.println('b');
b. System.out.println('b' + 'c');
c. System.out.println((char) ('a' + 4));

分析

b的ASCII码为98,c的为99

答案

b
197   
e

题目

1.1.9编写一段代码,将一个正整数 N 用二进制表示并转换为一个 String 类型的值 s。

解答:Java 有一个内置方法 Integer.toBinaryString(N) 专门完成这个任务,但该题的目的就是给出这个方法的其他实现方法。下面就是一个特别简洁的答案:

String s = "";
for (int n = N; n > 0; n /= 2)
     s = (n % 2) + s;

分析

虽然够简洁,但效率不怎么样,Java源码的的实现效率可以,源码地址: Java Integer 源码

答案

public static String decimalToBinary(int n) {
    String resultString = "";
    for (int i = 31; i >= 0; i--)
        resultString = resultString + (n >>> i & 1);
    return resultString;
}

代码索引

ToBinaryStringExecise.java

1.1.10 下面这段代码有什么问题?

int[] a;

for (int i = 0; i < 10; i++)

a[i] = i * i;

解答:它没有用 new 为 a[] 分配内存。这段代码会产生一个 variable a might not have been initialized 的编译错误。**

1.1.11 编写一段代码,打印出一个二维布尔数组的内容。其中,使用 * 表示真,空格表示假。打印出行号和列号。

```java

private static void printout(boolean[][] a1){

for (int i = 0; i < a1.length; i++) {

for (int j = 0; j < a1[i].length; j++) {

if (a1[i][j]){

System.out.println(String.format(Locale.CHINA,"%d %d *",i+1,j+1));

} else {

System.out.println(String.format(Locale.CHINA,"%d %d /",i+1,j+1));

}

}

原文  https://xiaozhuanlan.com/topic/5147298630
正文到此结束
Loading...