第 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中取消注释可以查看具体错误原因