1.答疑
- Java字節(jié)碼:
運行于java虛擬機上碉纳。將程序抽象為字節(jié)碼可以保證Java 程序員的代碼能夠運行在各種設備之上咖熟。 - Math.abs(-2147483648)?:
-2147483648. This strange (but true) result is a typical example of the effects of integer overflow.結果溢出障簿。 - java內置無窮大數(shù):Double.POSITIVE_INFINITY/Double.NEGATIVE_INFINITY.
- String不能用大于和小于比較褂删。
- 負數(shù)的除法和余數(shù):
表達式a/b 的商會向0 取整您宪;a % b 的余數(shù)的定義是(a/b)*b + a % b 恒等于a坏挠。 例如-14/3 和14/-3 的商都是-4芍躏,但-14 % 3 是-2,而14 % -3 是2降狠。余數(shù)的符號和被除數(shù)相同对竣。 - 為什么數(shù)組的起始索引是0 而不是1 ?
這個習慣來源于機器語言喊熟,那時要計算一個數(shù)組元素的地址需要將數(shù)組的起始地址加上該元素的索引柏肪。將起始索引設為1 要么會浪費數(shù)組的第一個元素的空間,要么會花費額外的時間來將索引減1芥牌。 - 在Java 中烦味,一個靜態(tài)方法能夠將另一個靜態(tài)方法作為參數(shù)嗎?
不行,但問得好谬俄,因為有很多語言都能夠這么做柏靶。
2.習題解答
1.1.7 輸出3.0009
package chapter1;
public class prac1_1_7a {
public static void main(String[] args){
double t=9.0;
while(Math.abs(t-9.0/t)>0.001){
t=(9.0/t+t)/2;
}
System.out.printf("%.5f\n",t);
}
}
1.1.8 輸出b 197 e 33
package chapter1;
public class prac_1_1_8 {
public static void main(String[] args){
System.out.println('b');
System.out.println('b'+'c');
System.out.println((char)('a'+4));
System.out.println(1+2+"3");
}
}
1.1.9 二進制轉換
package chapter1;
import edu.princeton.cs.algs4.StdIn;
public class prac1_1_9 {
public static void main(String[] args){
int N;
while((N=StdIn.readInt())>=0){
String s="";
for(int n=N;n>0;n/=2){
s=(n%2)+s;
}
System.out.println(s);
}
}
}
1.1.11
package chapter1;
public class prac1_1_11 {
public static void main(String[] args) {
boolean[][] b = { { true, true, true, true }, { false, false, false, false }, { true, false, true, false } };
int row = b.length;
int col = b[0].length;
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (b[i][j] == true)
System.out.printf("*");
else
System.out.printf(" ");
}
System.out.println();
}
}
}
1.1.13
package chapter1;
public class prac1_1_13 {
public static void main(String[] args){
int[][] a={{1,2,3},{4,5,6}};
int row=a.length;
int col=a[0].length;
for(int i=0;i<col;i++){
for(int j=0;j<row;j++){
System.out.printf("%4d",a[j][i]);
}
System.out.println();
}
}
}
1.1.14
package chapter1;
import edu.princeton.cs.algs4.StdIn;
public class prac1_1_14 {
public static int lg(int n){
int res=1;
int times=0;
if(n==1) return 0;
else if(n>0){
while(res*2<=n){
res*=2;
times++;
}
}
return times;
}
public static void main(String[] args) {
int N;
while (!StdIn.isEmpty()) {
N = StdIn.readInt();
System.out.println(lg(N));
}
}
}
1.1.15
package chapter1;
public class prac1_1_15 {
public static void main(String[] args) {
int[] testArray={1,1,2,3,1,7,5,3,2,2,2};
System.out.println("histogram result");
printArray(histogram(testArray, 8));
}
public static int[] histogram(int[] a,int M){
int[] hArray=new int[M];
for(int i=0;i<M;++i){
int count=0;
for(int j=0;j<a.length;++j){
if(i==a[j]){
count++;
}
}
hArray[i]=count;
}
return hArray;
}
public static void printArray(int[] a){
for(int i=0;i<a.length;++i){
System.out.println("a["+i+"]: "+a[i]);
}
}
}
1.1.17 報錯:不斷循環(huán),直到棧溢出溃论,最基本的情況應該作為第一條語句return屎蜓。
public static String exR2(int n)
{
String s = exR2(n-3) + n + exR2(n-2) + n;
if (n <= 0) return "";
return s;
}
1.1.19
package chapter1;
public class prac1_1_19 {
public prac1_1_19() {
int[] F = new int[100];
F[0] = 0;
F[1] = 1;
for(int i=2;i<100;++i)
F[i]=F[i-1]+F[i-2];
System.out.println(F[30]);
}
public static void main(String[] args) {
prac1_1_19 test=new prac1_1_19();
}
}
1.1.20
package chapter1;
import java.lang.Math;
import edu.princeton.cs.algs4.*;
public class prac1_1_20 {
public static void main(String[] args) {
int N=StdIn.readInt();
System.out.println(ln(N));
}
public static double ln(int N){
if(N==1)
return 0;
return ln(N-1)+Math.log(N);
}
}
1.1.21
package chapter1;
import edu.princeton.cs.algs4.StdIn;
public class prac1_1_21 {
public static void main(String[] args){
while(StdIn.hasNextLine()){
String name=StdIn.readString();
int m=StdIn.readInt();
int n=StdIn.readInt();
System.out.printf("%10s|%10d|%10d|%10.3f\n",name,m,n,(m*1.0)/n);
}
}
}
1.1.22
public static int rank_recursion(int key,int a[],int lo,int hi, int path){
System.out.printf("%5d%5d%5d\n",lo,hi,path);
int mid=lo+(hi-lo)/2;
if(lo>hi) return -1;
else if(key>a[mid]) return rank_recursion(key,a,mid+1,hi,++path);
else if(key<a[mid]) return rank_recursion(key,a,lo,mid-1,++path);
else return mid;
}
1.2.24
package chapter1;
public class prac1_1_24 {
public static int Euclid(int p,int q){
System.out.printf("p=%10d,q=%10d\n",p,q);
if(q==0) return p;
else return Euclid(q,p%q);
}
public static void main(String[] args){
int p=Integer.parseInt(args[0]);
int q=Integer.parseInt(args[1]);
int res=Euclid(p,q);
System.out.printf("p=%10d,q=%10d,gcd=%10d",p,q,res);
}
}