4.1 AddNIntegers.java
import acm.program.*;
public class AddNIntegers extends ConsoleProgram {
public void run(){
println("This program adds"+N_VALUES+"integers.") ;
int total = 0;
for (int i = 0 ;i<N_VALUES;i++){
int value = readInt("?") ;
total +=value ;
}
println("The total is "+ total+".") ;
}
private static final int N_VALUES = 10 ;
}
4.2 AddIntegerList.java
import acm.program.*;
public class AddIntegerList extends ConsoleProgram {
public void run(){
println("This program adds a list of integers.");
println("Enter values ,one per line ,using"+SENTINEL);
println("to signal the end of the list.");
int total = 0;
while (true){
int value =readInt("?") ;
if (value == SENTINEL) break ;
total += value ;
}
println("The total is "+ total+".");
}
private static final int SENTINEL =0 ;
}
4.3 LeapYear.java
import acm.program.*;
public class LeapYear extends ConsoleProgram {
public void run(){
println("This program checks for leap years.") ;
int year = readInt("Enter year: ");
boolean isLeapYear = ((year % 4 ==0)&&(year %100 !=0))||(year % 400 ==0);
if (isLeapYear) {
println (year+" is a leap year.");
} else {
println(year+" is not a leap year.");
}
}
}
4.4 SignTest.java
import acm.program.*;
public class SignTest extends ConsoleProgram {
public void run(){
println("This program classifies an integer by its sign.");
int n =readInt("Enter n:");
if (n>0){
println("The number is positive.");
} else if (n == 0){
println("The number is zero.") ;
} else {
println("The number is negative.") ;
}
}
}
4.6 CardRank.java
import acm.program.*;
public class CardRank extends ConsoleProgram {
public void run(){
println("This program converts integers to card ranks.");
int n =readInt("Enter an integer between 1 and 13 : ");
switch (n) {
case 1 : println("Ace"); break;
case 11 : println("Jack"); break;
case 12 : println("Queen");break;
case 13 : println("King"); break;
default : println(n) ; break ;
}
}
}
4.8 DigitSum.java
import acm.program.*;
public class DigitSum extends ConsoleProgram {
public void run(){
println("This program sums the digits in an interger.") ;
int n = readInt("Enter a positive integer: ") ;
int dsum =0 ;
while (n>0){
dsum += n %10 ;
n /= 10 ;
}
println("The sum of digits is "+ dsum) ;
}
}
4.9 AddIntegerList.java
import acm.program.*;
public class AddIntegerList extends ConsoleProgram {
public void run(){
println("This program adds a list of integers.");
println("Enter values ,one per line ,using"+SENTINEL);
println("to signal the end of the list.");
int total = 0;
int value =readInt("?") ;
while (value !=0 ){
total += value ;
value =readInt("?") ;
}
println("The total is "+ total+".");
}
private static final int SENTINEL =0 ;
}
4.10 Countdown.java
4.14 Checkerboard.java
/*
* File: Checkerboard.java
* -----------------------
* 该程序可绘制棋盘
*/
import acm.graphics.*;
import acm.program.*;
/*
* 该类可以在图形窗口中绘制棋盘
* 棋盘的大小由常数NROWS和NCOLUMNS确定
* 棋盘会沾满所有竖直空间
*/
public class Checkerboard extends GraphicsProgram {
public void run() {
double sqSize = getHeight() / NROWS; //每格的高度
for (int i = 0; i < NROWS; i++) {
for (int j = 0; j < NCOLUMNS; j++) {
double x =j * sqSize;
double y = i* sqSize;
GRect sq = new GRect(x, y, sqSize, sqSize);
sq.setFilled(((i + j) % 2) != 0);
add(sq);
}
}
}
/* 行数 */
private static final int NROWS = 8;
/* 列数 */
private static final int NCOLUMNS = 8;
}
4.16 AnimatedSquare.java
import acm.graphics.*;
import acm.program.*;
public class AnimatedSquare extends GraphicsProgram {
public void run(){
GRect square = new GRect(0,0,SQUARE_SIZE,SQUARE_SIZE) ;
square.setFilled(true);
add(square);
double dx = (getWidth() - SQUARE_SIZE)/N_STEPS ;
double dy = (getHeight() - SQUARE_SIZE)/N_STEPS ;
for (int i=0;i<N_STEPS;i++){
square.move(dx, dy);
pause(PAUSE_TIME);
}
}
private static final int N_STEPS =1000;
private static final int PAUSE_TIME =20 ;
private static final double SQUARE_SIZE =50 ;
}