习题8
采用新增的策略为选手计算得分。
增加新的具体策略StrategyFour。StrategyFour类将double computeScore(double [] a)方法实现为去掉数组a的元素中的一个最大值和一个最小值,然后计算剩余元素的几何平均值。 import java.util.Arrays;
public class StrategyFour implements ComputableStrategy { public double computeScore(double [] a) { if(a.length<=2) return 0;
double score=0,multi=1; Arrays.sort(a); int n=a.length-2;
for(int i=1;i<a.length-1;i++) { multi=multi*a[i]; }
score=Math.pow(multi,1.0/n); return score; } } 2.
(1)策略(Strategy)PrintCharacter.java public interface PrintCharacter{
public abstract void printTable(char [] a,char[] b); }
(2) 具体策略 PrintStrategyOne.java
public class PrintStrategyOne implements PrintCharacter { public void printTable(char [] a,char[] b) { for(int i=0;i<a.length;i++) { System.out.print(a[i]+","); }
for(int i=0;i<b.length;i++) { System.out.print(b[i]+","); }
System.out.println(""); } }
PrintStrategyTwo.java
public class PrintStrategyTwo implements PrintCharacter { public void printTable(char [] a,char[] b) {
for(int i=0;i<a.length;i++) {
System.out.print(b[i]+","+a[i]+","); }
} }
(3)上下文 PrintGame.java public class PrintGame { PrintCharacter strategy;
public void setStrategy(PrintCharacter strategy) { this.strategy=strategy; }
public void getPersonScore(char[] a,char[] b){ if(strategy==null)
System.out.println("sorry!"); else
strategy.printTable(a,b); } } 应用以
上策略: public class Application {
public static void main(String args[]) { char [] a=new char[26]; char [] b=new char[26]; for(int i=0;i<=25;i++){ a[i]=(char)('a'+i); }
for(int i=0;i<=25;i++){ b[i]=(char)('A'+i); }
PrintGame game=new PrintGame(); //上下文对象
game.setStrategy(new PrintStrategyOne()); //上下文对象使用策略一
System.out.println("方案1:"); game.getPersonScore(a,b);
game.setStrategy(new PrintStrategyTwo()); //上下文对象使用策略二 System.out.println("方案2:"); game.getPersonScore(a,b); } }
3.参照本章8.3.3自主完成。
习题9 1.A,B,D 2. Love:Game 3.13 abc夏日 4.13579 5.9javaHello 6.
public class Xiti6 {
public static void main (String args[ ]) { String s1,s2,s3,t1="ABCDabcd";
System.out.println("字符串原来是这个样子: "+t1); s1=t1.toUpperCase();
System.out.println("字符串中的小写字母变成大写是这个样子: "+s1); s2=t1.toLowerCase();
System.out.println("字符串中的大写字母变成小写是这个样子: "+s2); s3=s1.concat(s2);
System.out.println("大写字符串连接小写字符串是这个样子: "+s3); } } 7. class Xiti7
{ public static void main(String args[ ]) { String s ="中华人民共和国"; char a=s.charAt(0); char b=s.charAt(6);
System.out.println("第一个字符: "+a); System.out.println("最后一个字符: "+b); } } 8.
import java.util.*; class Xiti8
{ public static void main(String args[]){ int year,month;
System.out.println("请输入年份和月份,每输入一个数回车确认"); Scanner reader=new Scanner(System.in); year= reader.nextInt(); month= reader.nextInt(); String [] day=new String[42];
System.out.println(" 日 一 二 三 四 五 六"); Calendar rili=Calendar.getInstance();
rili.set(year,month-1,1);//将日历翻到year年month月1日,注意0表示一月...11表示十二月
int 星期几=rili.get(Calendar.DAY_OF_WEEK)-1; int dayAmount=0;
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) dayAmount=31;
if(month==4||month==6||month==9||month==11) dayAmount=30; if(month==2)
if(((year%4==0)&&(year0!=0))||(year@0==0)) dayAmount=29; else
dayAmount=28;
for(int i=0;i<星期几;i++) day[i]="";
for(int i=星期几,n=1;i<星期几+dayAmount;i++){ if(n<=9)
day[i]=String.valueOf(n)+" " ; else
day[i]=String.valueOf(n); n++; }
for(int i=星期几+dayAmount;i<42;i++) day[i]=""; for(int i=0;i<星期
几;i++) { day[i]="**"; }
for(int i=0;i<day.length;i++) { if(i%7==0)
{ System.out.println(""); }
System.out.print(" "+day[i]); } } } 9.
import java.util.*; class Xiti9
{ public static void main(String args[]){ int year1,month1,day1,year2,month2,day2; Scanner reader=new Scanner(System.in);