第 1 章 基础

1.1 基础编程模型

代码

package ch1_1;

import edu.princeton.cs.algs4.StdOut;

public class Ex01 {
    public static void main(String[] args) {
        StdOut.println((0 + 15) / 2);
        StdOut.println(2.0e-6 * 100000000.1);
        StdOut.println(true && false || true && true);
    }
}

总结

体会整数相除,科学计数法,逻辑运算

扩展

当两个整数相除,并且需要显示小数部分时,可以通过转换其中一个操作数为double类型,比如上面的除法操作,可以写成:

(0 + 15) / (double)2;
1.0 * (0 + 15) / 2;
(0 + 15) / 2.0;

代码

package ch1_1;

import edu.princeton.cs.algs4.StdOut;

public class Ex02 {
    public static void main(String[] args) {
        StdOut.println((1 + 2.236) / 2);
        StdOut.println(1 + 2 + 3 + 4.0);
        StdOut.println(4.1 >= 4);
        StdOut.println(1 + 2 + "3");
    }
}

总结

体会操作符执行顺序以及产生相应输出的原因

代码

package ch1_1;

import edu.princeton.cs.algs4.StdOut;

public class Ex03 {
    public static void main(String[] args) {
        if ((args).equals(null) || args.length < 3) {
            StdOut.println("There are no three arguments");
            return;
        }

        try {
            Integer.parseInt(args[0]);
            if (args[0].equals(args[1]) && args[1].equals(args[2])) {
                StdOut.println("equal");
                return;
            }
            StdOut.println("not equal");
            return;

        } catch (NumberFormatException e) {
            StdOut.println("The input must integers");
        }
    }
}

代码

package ch1_1;

public class Ex04 {
    public static void main(String[] args) {
        // Uncomment to view the errors
        // int a = 0; int b = 0; int c;
        // if (a > b) then c = 0;
        // if a > b { c = 0; }
        // if (a > b) c = 0;
        // if (a > b) c = 0 else b = 0;
    }
}

总结

在IDE中取消注释可以查看具体错误原因

代码

package ch1_1;

import edu.princeton.cs.algs4.StdOut;
import edu.princeton.cs.algs4.StdRandom;

public class Ex05 {
    public static void main(String[] args) {
        double x = StdRandom.uniform(0.0, 2.0);
        double y = StdRandom.uniform(0.0, 2.0);
        StdOut.printf("x: %f, y: %f \n", x, y);

        if (x > 0 && x < 1 && y > 0 && y < 1) {
            StdOut.println(true);
            return;
        }

        StdOut.println(false);
    }
}

代码

package ch1_1;

import edu.princeton.cs.algs4.StdOut;

public class Ex06 {
    public static void main(String[] args) {
        int f = 0;
        int g = 1;

        for (int i = 0; i <= 15; i++) {
            StdOut.println(f);
            f = f + g;
            g = f - g;
        }
    }
}

总结

该代码输出了斐波那契数列的\(F_0\)到\(F_{15}\)

代码

package ch1_1;

import edu.princeton.cs.algs4.StdOut;

public class Ex07 {
    public static void main(String[] args) {
        a();
        b();
        c();
    }

    public static void a() {
        double t = 9.0;
        while (Math.abs(t - 9.0 / t) > .001)
            t = (9.0 / t + t) / 2.0;
        StdOut.printf("%.5f\n", t);
    }

    public static void b() {
        int sum = 0;
        for (int i = 1; i < 1000; i++)
            for (int j = 0; j < i; j++)
                sum++;
        StdOut.println(sum);
    }

    public static void c() {
        int sum = 0;
        for (int i = 1; i < 1000; i *= 2)
            for (int j = 0; j < 1000; j++)
                sum++;
        StdOut.println(sum);
    }
}

代码

package ch1_1;

public class Ex08 {
    public static void main(String[] args) {
        // it print out the char 'b'
        System.out.println('b');

        // the Unicode of 'b' is 98, of 'c' is 99, so 'b' + 'c' = 197
        System.out.println('b' + 'c');

        // the Unicode of 'a' is 97, the Unicode of 'e' is 101
        System.out.println((char) ('a' + 4));
    }
}

总结

a:输出字符'b'
b:操作符+使得此语句变成计算'b''c'Unicode值之和,即98与99之和
c:'a'的Unicode值是97,而'e'的Unicode值为101,所以输出字符'e'

代码

package ch1_1;

import edu.princeton.cs.algs4.StdOut;

public class Ex09 {
    public static void main(String[] args) {
        String s = "";
        int n = 8;

        // it's similar to the hexadecimal representation of a positive decimal number
        while (n > 0) {
            s = (n % 2) + s;
            n /= 2;
        }

        StdOut.println(s);
    }
}

总结

对于转换为其他进制的表示,也可以按照这样取余再进行追加的模式

代码

package ch1_1;

public class Ex10 {
    public static void main(String[] args) {
        // Uncomment to view the error
        // int[] a;
        // for (int i = 0; i < 10; i++)
        //     a[i] = i * i;
    }
}

总结

在IDE中取消注释可以查看具体错误原因