分享

java2 实用教程第五版 第四章课本案例及课后题...

 春和秋荣 2020-10-15

第五天
java2 实用教程第五版 耿祥义 张跃平编著
第四章代码
代码1:课本P80

package java课本项目;

import java.util.*;

public class Example4_11 {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
int [] a= {12,34,5,23,45,6,76,90,69,123,59};
Arrays.sort(a);
System.out.println(Arrays.toString(a));
System.out.println("请输入整数,判断该整数是否在数组中:");
int number = scanner.nextInt();
int index = Arrays.binarySearch(a, number);
if (index>=0)
System.out.println(number+"和数组中索引为"+index+"的元素值相同");
else
System.out.println(number+"不与数组中的任何元素值都不相同");
scanner.close();
}

}
运行结果:
/******************************************************
[5, 6, 12, 23, 34, 45, 59, 69, 76, 90, 123]
请输入整数,判断该整数是否在数组中:
90
90和数组中索引为9的元素值相同
*******************************************************/

代码2:课本P81

package java课本项目;

/*    注:方法重载的意思是:一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即:参数的个数不同,
           或参数的个数相同,但参数列表中对应的某个参数的类型不同     如果两个方法的名字相同,
           即使返回的类型不同,也必须保证传入的参数不同   */

class People {
float hello(int a,int b) {//方法名相同,传入不同类型的参数
return a+b;
}

float hello(long a,int b) {
return a-b;
}

double hello(double a,int b) {
return a*b;
}
}



public class Example4_12 {
public static void main(String args[]) {
People tom = new People();
System.out.println(tom.hello(10, 20));
System.out.println(tom.hello(10L, 20));
System.out.println(tom.hello(10.0, 20));
}
}
运行结果:
/**********************************
30.0
-10.0
200.0
***********************************/

代码3:课本P82

package java课本项目;

class Circlee {
double radius,area;
void setRadius(double r) {
radius = r;
}

double getArea() {
area = 3.14*radius*radius;
return area;
}
}


class Tixing {
double above,bottom,height;
Tixing (double a,double b,double h) {
above = a;
bottom = b;
height = h;
}

double getArea() {
return (above+bottom)*height/2;
}
}


class Studentt{
double computerArea(Circlee c) {//重载方法1
double area = c.getArea();
return area;
}

double computerArea(Tixing t) {//重载方法2
double area = t.getArea();
return area;

}
}


public class Example4_13 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Circlee circle=new Circlee();
circle.setRadius(196.87);
Tixing lader = new Tixing(3,21,9);
Studentt zhang = new Studentt();
System.out.println("zahng计算圆的面积:");
double result = zhang.computerArea(circle);
System.out.println(result);
System.out.println("zhang计算梯形的面积:");
result = zhang.computerArea(lader);
System.out.println(result);
}

}
运行结果:
/****************************************
zahng计算圆的面积:
121699.48226600002
zhang计算梯形的面积:
108.0
*****************************************/

代码4:课本P84

 package java课本项目;

//this关键字出现在类的构造方法中时,代表使用该构造方法所创建的对象 
 
public class Example4_14 {
int leg,hand;
String name;
 Example4_14(String s) {
name = s;
this.init();//可以省略this,即将“this.init()”写成“init()”
}
 
 void init() {
 leg = 2;
 hand = 2;
 System.out.println(name+"有"+hand+"只手"+","+leg+"条腿");
 }
 
 
public static void main(String[] args) {
// TODO Auto-generated method stub
Example4_14 boshi=new Example4_14("布什");//创建boshi时,构造方法中this就是对象boshi
}

}
运行结果:
/**********************************
布什有2只手,2条腿
**********************************/

代码5:课本P87

package java课本项目;



public class Example4_15 {

public static void main(String[] args) {
// TODO Auto-generated method stub
Sstudent  stu = new Sstudent(10001);//用Sstudent类中的有参构造方法,实例化stu对象,必须得传入参数
stu.speak();
System.out.println("主类的包名是:java课本项目");
}

}


class Sstudent {
int number;
Sstudent(int n){//有参构造方法
number = n;
}

void speak() {//实例方法
System.out.println("Sstudent类的包名是java课本项目,我的学号是:"+number);
}
}
运行结果:
/*************************************************
Sstudent类的包名是java课本项目,我的学号是:10001
主类的包名是:java课本项目
**************************************************/

代码6:课本P89

package java课本项目;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Example4_16 {

public static void main(String[] args) {
// TODO Auto-generated method stub
Date date = new Date();//调用Date类中的午餐构造方法,实例化date对象
SimpleDateFormat fomtter=new  SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//调用java.text.SimpleDateFormat对时间进行格式化
System.out.println("本地机器的时间:"+date.toString());//date对象调用Date类中的toString方法,打印当地时间
System.out.println("格式化后的本地时间:"+fomtter.format(date));
}

}


/*注意:(1)java.lang包是java语言的核心类库,它包含了运行java程序必不可少的系统类
系统自动为程序引入java.lang包中的类(如System类,Math类),因此不需要再使用import语句引入该类中的包
(2)如果使用了import语句引入了整个包中的类,那么可能会增加编译时间,但绝对不会影响程序运行的性能,因为当程序执行时,
只是将程序真正使用的字节码文件加载到内存。
 (3)如果没有使用import语句引入包中的类,也可以直接使用包名使用该类,例如:java.util.Date date = new java.util.Date();
*/
运行结果:
/***********************************************
本地机器的时间:Mon May 13 12:16:23 CST 2019
格式化后的本地时间:2019-05-13 12:16:23
***********************************************/

代码7:课本P90

package java课本项目;

public class Example4_17 {
double sideA,sideB,sideC;//定义Triangle类,为了不引起引用错误,此处我修改类名为Example4_17
public double getArea() {
double p=(sideA+sideB+sideC)/2;
double area = Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC));
return area;
} 

public void setSides(double a,double b,double c) {
sideA=a;
sideB=b;
sideC=c;
}

}

代码8:课本P91

package java课本项目;
import java课本项目.Example4_17;
public class Example4_18 {

public static void main(String[] args) {
// TODO Auto-generated method stub
Example4_17 tri=new Example4_17();
tri.setSides(30, 40, 50);
System.out.println(tri.getArea());

}

}
运行结果:
/****************
600.0
****************/

代码9:课本P92

package java课本项目;

class Studeent{
private int age;
public void setAge(int age) {
if(age>7 && age<28)
this.age = age;
}

public int getAge() {
return age;
}
}


public class Example4_19 {

public static void main(String[] args) {
// TODO Auto-generated method stub
Studeent zhang=new Studeent(); 
Studeent geng=new Studeent();
zhang.setAge(23);
System.out.println("zhang的年龄:"+zhang.getAge());
geng.setAge(25);
//zhang.age =23或geng.age=25都是非法的,因为zhang和geng都已经不在Studentt类中
System.out.println("geng的年龄:"+geng.getAge());
}

}
运行结果:
/*************************
zhang的年龄:23
geng的年龄:25
**************************/

代码10:课本P96

package java课本项目;

public class Example4_20 {

public static void main(String[] args) {
// TODO Auto-generated method stub
char [] a = {'a','b','c','D','E','F'};
for (int i=0;i<a.length;i++) {//遍历a
if(Character.isLowerCase(a[i]))
a[i]=Character.toUpperCase(a[i]);//如果a[i]是小写字母,则将它改为大写字母
else if(Character.isUpperCase(a[i]))
a[i]=Character.toLowerCase(a[i]);//r如果a[i]是大写字母,则将它改为小写字母
}
for(int i=0;i<a.length;i++)
System.out.print(" "+a[i]);
}

}
运行结果:
/***********************
A B C d e f
************************/

代码11:课本P96

package java课本项目;

class Stuudent{
int number;
}

public class Example4_21 {

public static void main(String[] args) {
// TODO Auto-generated method stub
Stuudent stu[] = new Stuudent[10];//创建对象数组stu
for(int i=0;i<stu.length;i++) {
stu[i]=new Stuudent();//对stu数组中每一个stu对象创建Stuudent对象
stu[i].number = 101+i;
System.out.print(stu[i].number+" ");
}

}

}
运行结果:
/********************************************
101 102 103 104 105 106 107 108 109 110 
*********************************************/

代码12:课本P100

package java课本项目;

public class Rational {
int numerator=1;//分子
int denominator=1;//分母
void setNumberator(int a) {
int c=f (Math.abs(a),denominator);
numerator=a/c;
denominator=denominator/c;
if(numerator<0 && denominator<0) {
numerator=-numerator;
denominator=-denominator;
}
}

void setDenminator(int b) {
int c=f(numerator,Math.abs(b));
numerator=numerator/c;
denominator=b/c;
if(numerator<0 && denominator<0) {
numerator=-numerator;
denominator=-denominator;
}
}

int getNumerator() {
return numerator;
}

int getDenominator(){
return denominator;
}

int f(int a,int b) {
if (a==0)
return 1;
if (a<b) {
int c=a;
a=b;
b=c;
}
int r=a%b;
while (r!=0){
a=b;
b=r;
r=a%b;
}
return b;
}

Rational add(Rational r) {
int a = r.getNumerator();
int b = r.getDenominator();
int newNumerator = numerator*b+denominator*a;
int newDenominator = denominator*b;
Rational result = new Rational();
result.setNumberator(newNumerator);
result.setDenminator(newDenominator);
return result;
}

Rational sub(Rational r) {
int a=r.getNumerator();
int b=r.getDenominator();
int newNumerator = numerator*b-denominator*a;
int newDenominator = denominator*b;
Rational result = new Rational();
result.setNumberator(newNumerator);
result.setDenminator(newDenominator);
return result;
}

Rational muti(Rational r) {
int a=r.getNumerator();
int b=r.getDenominator();
int newNumerator = numerator*a;
int newDenominator = denominator*b;
Rational result = new Rational();
result.setNumberator(newNumerator);
result.setDenminator(newDenominator);
return result;
}

Rational div(Rational r) {
int a=r.getNumerator();
int b=r.getDenominator();
int newNumerator = numerator*b;
int newDenominator = denominator*a;
Rational result = new Rational();
result.setNumberator(newNumerator);
result.setDenminator(newDenominator);
return result;
}

}

代码13:课本P102

package java课本项目;

public class Example4_23 {

public static void main(String[] args) {
// TODO 自动生成的方法存根
Rational r1=new Rational();
r1.setNumberator(1);
r1.setDenminator(5);
Rational r2=new Rational();
r2.setNumberator(3);
r2.setDenminator(2);
Rational result=r1.add(r2);
int a=result.getNumerator();
int b=result.getDenominator();
System.out.println("1/5-3/2="+a+"/"+b);
result=r1.sub(r2);
a=result.getNumerator();
b=result.getDenominator();
System.out.println("1/5*3/2="+a+"/"+b);
result=r1.muti(r2);
a=result.getNumerator();
b=result.getDenominator();
System.out.println("1/5/3/2="+a+"/"+b);
int n=10,k=1;
System.out.println("计算2/1+3/2+5/3+8/5+13/8+……+的前"+n+"项和。");
Rational sum=new Rational();
sum.setNumberator(0);
Rational item=new Rational();
item.setNumberator(2);
item.setDenminator(1);
while(k<=n) {
sum=sum.add(item);
k++;
int fenzi=item.getNumerator();
int fenmu=item.getDenominator();
item.setNumberator(fenzi+fenmu);
item.setDenminator(fenzi);
}
a=sum.getNumerator();
b=sum.getDenominator();
System.out.println("用分数表示:");
System.out.println(a+"/"+b);
double doubleResult=(a*1.0)/b;
System.out.println("用小数表示:");
System.out.println(doubleResult);

}

}
运行结果:
/************************************************
1/5-3/2=17/10
1/5*3/2=-13/10
1/5/3/2=3/10
计算2/1+3/2+5/3+8/5+13/8+……+的前10项和。
用分数表示:
998361233/60580520
用小数表示:
16.479905306194137
************************************************/

代码14:课本P103

package java课本项目;
import java.util.*;

class InputScore{
DelScore del;
InputScore(DelScore del){
this.del=del;
}

public void inputScore() {
System.out.println("请输入评委数:");
Scanner read=new Scanner(System.in);
int count = read.nextInt();
System.out.println("请输入各个评委的分数:");
double [] a =new double[count];
for(int i=0;i<count;i++) {
a[i]=read.nextDouble();
}
del.doDelete(a);
read.close();
}

}

class DelScore{
ComputerAver computer;
DelScore(ComputerAver computer){
this.computer = computer;
}

public void doDelete(double [] a) {
java.util.Arrays.parallelSort(a); //数组a从小到大排序
System.out.print("去掉一个最高分:"+a[a.length-1]+",");
System.out.println("去掉一个最低分:"+a[0]+"。");
double b[]=new double[a.length-2];
for (int i=1;i<a.length-1;i++) 
b[i-1] = a[i];
computer.giveAver(b);
}

}

class ComputerAver{
public void giveAver(double [] b) {
double sum=0;
for(int i=0;i<b.length;i++) 
sum+=b[i];
double aver=sum/b.length;
System.out.println("选手的最后的得分为:"+aver);
}
}

class Line{
InputScore one;
DelScore two;
ComputerAver three;
Line(){
three=new ComputerAver();
two=new DelScore(three);
one=new InputScore(two);
}
public void givePersonScore() {
one.inputScore();
}

}

public class Example4_24 {

public static void main(String[] args) {
// TODO Auto-generated method stub 
Line line=new Line();
line.givePersonScore();

}

}
运行结果:
/***********************************************
请输入评委数:
8
请输入各个评委的分数:
88
90
79
63
82
90
72
83
去掉一个最高分:90.0,去掉一个最低分:63.0。
选手的最后的得分为:82.33333333333333
*********************************************/

代码15:课本P108页3(1)

package java课本项目;

class Fish {//定义Fish类,初始化weight为1
int weight = 1;
}

class Lake {//定义Lake类,Lake类中包括一个Fish对象和两个方法
Fish fish;
void setfish(Fish s) {//修改器
fish = s;
}

void foodfish(int n) {//修改fish的weight属性
fish.weight = fish.weight + n;
}
}

public class E {

public static void main(String[] args) {
Fish redFish = new Fish();//实例化Fish对象,名为redfish
System.out.println(redFish.weight);//打印fish的初始化weight值
Lake lake = new Lake();//实例化Lake对象,名为lake
lake.setfish(redFish);//调用Lake类中修改器,将上面Fish实例传入
lake.foodfish(120);//调用Lake中方法修改weight属性
System.out.println(redFish.weight);//打印fish的weight值
System.out.println(lake.fish.weight);
}

}
运行结果:
/***************
1
121
121
*****************/

代码16:课本P108页3(2)

package java课本项目;

class B {
int x =100,y = 200;

public void setX(int x) {
x=x;//此语句没有起任何作用
}
public void setY(int y) {
this.y = y;
}
public int getXYSum() {
return x+y;
}
}

public class A {
public static void main(String[] args) {
B b = new B();
b.setX(-100);//由于setX方法没有起作用,所以x的值还是100,并没有将x改为-100
b.setY(-200);
System.out.println("sum="+b.getXYSum());



}
}
运行结果:
/***********
sum=-100
*************/

代码17:课本P108页3(3)

package java课本项目;

class C {
int n;
static int sum=0;
void setN(int n) {
this.n = n;
}

int getSum() {
for(int i=1;i<=n;i++) 
sum+=i;
return sum;
}
}


public class D {
public static void main(String[] args) {
C c1 = new C(), c2 = new C();
c1.setN(3);
c2.setN(5);
int s1=c1.getSum();
int s2=c2.getSum();
System.out.println(s1+s2);

}

}
运行结果:
/*
 注:sum是类变量,算完s1后sum的值变成6了,在b2对象还没有被创建出来之前,
 sum就已经存在于内存中的静态区域中,当b2对象被创建出来时,
 b2调用getsum方法的时候sum的初始值就是6,而不是0了
这正是因为sum变量是静态变量而不是成员变量的原因才导致了结果是27不是21
 */

/*****************
27
******************/

代码18:课本P108页3(4)

package java课本项目;

class F {
double f(int x,double y){
return x+y;
}

int f(int x,int y) {
return x*y;
}
}

public class G {
public static void main(String[] args) {
F a =new F();
System.out.println(a.f(10, 10));
System.out.println(a.f(10, 10.0));
}
}
运行结果:
/*************
100
20.0
****************/

代码19:课本P108页3(5)

package java课本项目;

public class H {
public static void main(String[] args) {
// TODO Auto-generated method stub
f(1,2);
f(-1,-2,-3,-4);//给参数传值时,参数的个数很灵活
f(9,7,6);
}
public static void f(int ... x) {//x是可变参数代表,代表若干个int型参数
for (int i=0;i<x.length;i++)//x.length是x代表的参数个数
System.out.println(x[i]);//x[i]是x代表的第i个参数(类似数组)
}
}
运行结果:
/****************
1
2
-1
-2
-3
-4
9
7
6
*******************/

代码20:课本P108页3(6)

package java课本项目;

public class QQ {
static {//static block
System.out.println("This is a ststic block.");
}
}
class RR{
static {//static block
System.out.println("//This static block will be executed first.");
}
public static void main(String[] args) {
QQ a = new QQ();//The byte code of the class QQ is loaded
System.out.println("Example for static block.");
}
}
运行结果:
/*******************************************************
//This static block will be executed first.
This is a ststic block.
Example for static block.
 ******************************************************/

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多