第五天
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 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
运行结果:
/********************************************
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
代码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
运行结果:
/***********************************************
请输入评委数:
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
运行结果:
/****************
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.
******************************************************/