1.定义一个学生类 Student,它继承自 Person 类。
(1)Person类:
①成员变量(私有的):
●姓名(name),字符串类型(String); ●性别(sex),字符型(char); ●年龄(age),整型(int)。
②成员方法: ●构造方法:对所有成员变量初始化 ●重写Object类的toString方法,返回字符串形如:姓名,性别,年龄 ●重写Object类的equals方法,当且仅当两人的姓名相等且性别相等且年龄相等时,认为两人相等。
package impact;
public class Person {
private String name;
private int age;
private char sex;
public void setSex(char sex) {
this.sex=sex;
}
public char getSex() {
return sex;
}
public void setName(String name) {
this.name=name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age=age;
}
public int getAge() {
return age;
}
public Person(String name,int age,char sex) {
this();
this.name=name;
this.age=age;
this.sex=sex;
}
public Person() {
}
public String toString(){
return "性别:"+sex+",年龄:"+age+",名字:"+name;
}
public boolean equals(Person p){
Person other= (Person)p;
if(sex==other.sex&&name==other.name&&age==other.age){
return true;
}
return false;
}
}
(2)Student类
①新增加的成员变量: ●学号(number),长整型; ●三门功课的成绩:哲学(phi),整型; ●英语 (eng),整型; ●计算机(comp),整型。 ②新增加的方法: ●求三门功课的平均成绩 public double aver():该方法没有参数,返 回值类型为 double 型; ●求三门功课成绩的最高分 public int max():该方法没有参数,返回值为 int 型; ●求三门功课成绩的最低分 public int min():该方法没有参数,返回值为 int 型。 ●覆盖父类的同名方法:public String toString():获取学号、姓名、性别、平均分、最高分、最低分信息。 ●覆盖父类的同名方法equals:除了姓名、性别和年龄相等以外,学号也相等时,认为两学生相等。
package impact;
public class Student0 extends Person{
long number;
int phi,eng,comp;
public Student0(String name,int age,char sex,long number,int phi,int eng,int comp) {
super(name,age,sex);
this.phi=phi;
this.comp=comp;
this.eng=eng;
this.number=number;
}
public Student0() {
}
public double over () {
double avg;
System.out.println((double)(phi+eng+comp));
avg=((double)(phi+eng+comp)/3);
return avg;
}
public int max(){
int tempMax=phi;
int max1=tempMax>eng?tempMax:eng;
int max=max1>comp?max1:comp;
return max;
}
public int min(){
int tempMin=phi;
int min1=tempMin<eng?tempMin:eng;
int min=min1<comp?min1:comp;
return min;
}
public String toString() {
return "学号:"+number+",性别:"+getSex()+",年龄:"+getAge()+",名字:"+getName()+",平均分:"+over()+",最低分:"+min()+",最高分:"+max();
}
public boolean equals(Student0 s){
Student0 other= (Student0)s;
if(getSex()==other.getSex()&&getName()==other.getName()&&getAge()==other.getAge()&&number==other.number)
{
return true;
}
return false;
}
}
(另)求最大值和最小值的另一种方法
int[]a=new int[2];
a[0]=phi;
a[1]=comp;
a[2]=eng;
Arrays.sort(a);
int max=a[2];
int min=a[0];
(3)编写测试程序。
程序要求实现:在程序中设置若干个学生信息(学号、姓名、性别、年龄、各科分数),要求通过运行程序,在屏幕中输出如下的结果:例如:学号:200501 姓名:李丽 性别:女 年龄:20 平均分:90.0 最高分:95 分 最低分:87。 试着比较两名学生是否相等。
class Student0Test{
public static void main(String [] args) {
Student0 s1=new Student0("Youlandel",17,'女',12354,99,98,89);
Student0 s2=new Student0("Youlandel",17,'女',12345,86,98,73);
System.out.println(s1.toString());
System.out.print(s1.equals(s2));
}
}
运行结果
286.0
学号:12354,性别:女,年龄:17,名字:Youlandel,平均分:95.33333333333333,最低分:89,最高分:99
false
2.编写一个 Application,其中包含三个同名方法 mySqrt(),它们都只有一个参数,参数的类型分别为 int 型、float 型和 double 型,它们的功能均为返回参数的平方根,返回值的类型与参数的类型相同。在方法 main( ) 中调用上面的三个方法并输出结果。
public class Classl{
static int n;
public static void main (String[] args){
if(args.length >= 3){
int n;
float f;
double d;
n=Integer.parseInt(args[0]);
f=Float.valueOf(args[1]).floatValue();
d=Double.valueOf(args[2]).doubleValue();
System.out.,println(n+"的平方根为:"+mySqrt(n));
System.out.println(f+"的平方根为:"+mySqrt(f);
System.out.println(d+"的平方根为:"+mySqrt(d));
}
else
{ System.out.println("缺命令行参数!"); System.exit(-1);
}
static int mySqrt(int x){
return (int)Math.sqrt(x);
}
static float mySqrt(float x){
return (float)Math.sqrt(x);
}
static double mySqrt(double x){
return Math.sqrt(x);
}
}
3.用递归求菲波那契数列前15项
已知菲波那契数列的数学表达式为: fibonacci(n)=n, n=0,1; fibonacci(n)=fibonacci(n-1)+fibonacci(n-2), n≥2; 用递归方法计算 Fibonacci序列,并打印出其前 15项的值
递归的三个条件 ①边界条件 ②递归前进段 ③递归返回段 当边界条件不满足时递归前进;当边界条件满足时递归返回。
main
f15
f14
f13
f13
f12
f11
f12
...
...
...
...
package impact;
public class Fibonacci {
public static void main(String[] args) {
for(int i=1;i<16;i++){
System.out.print(f(i)+" ");
}
public static int f(int n ) {
if (1== n || 2 == n)
return 1;
else
return f(n-1) + f(n-2);
}
}
4.编程生产 100 个 1到 6 之间的随机数,统计 1到 6 每个数出现的概率。
方法1 if语句
package cv;
public class Impact {
public static void main(String[] args) {
int[] arr = new int[100];
int[] count=new int[6];
double[] c=new double[6];
for (int i = 0; i <arr.length ; i++) {
arr[bottom] = (int)( Math.random()*6)+1;
bottom++;
if (arr[i]== 1) {
count[1]++;
}
if (arr[i]== 2) {
count[2]++;
}
if (arr[i]== 3) {
count[3]++;
}
if (arr[i]== 4) {
count[4]++;
}
if (arr[i]== 5) {
count[5]++;
}
if (arr[i]== 6) {
count[6]++;
}
}
for(int j=0;j<count.length;j++){
c[j]=(float)count[j]/100;
System.out.println("出现"+(j+1)"的概率为"+c[j]);
}
}
}
方法2 switch语句
public static void main(String[]args){
int[] rand=new int[6];
double[] c=new double[6];
for(int i=0;i<100;i++){
int r=(int)(Math.random()*6)+1;
switch(r){
case 1: rand[0]++;break;
case 2: rand[1]++;break;
case 3: rand[2]++;break;
case 4: rand[3]++;break;
case 5: rand[4]++;break;
case 6: rand[5]++;break;
}
}
for(int j=0;j<rand.length;j++){
c[j]=(float)rand[j]/100;
System.out.println("出现"+(j+1)+"的概率为"+c[j]);
}
}
}
|