Java程式設計__Chap3 面對物件__程式設計題

吶_kululu發表於2020-09-26

6-1 設計一個矩形類Rectangle (10分)

設計一個名為Rectangle的類表示矩形。這個類包括: 兩個名為width和height的double型資料域,它們分別表示矩形的寬和高。width和height的預設值都為1. 一個無參構造方法。 一個為width和height指定值的矩形構造方法。 一個名為getArea()的方法返回這個矩形的面積。 一個名為getPerimeter()的方法返回這個矩形的周長。

類名為:

Rectangle

裁判測試程式樣例:

import java.util.Scanner;
/* 你的程式碼將被嵌入到這裡 */

public class Main {
  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    double w = input.nextDouble();
    double h = input.nextDouble();
    Rectangle myRectangle = new Rectangle(w, h);
    System.out.println(myRectangle.getArea());
    System.out.println(myRectangle.getPerimeter());

    input.close();
  }
}

輸入樣例:

3.14  2.78

輸出樣例:

8.7292
11.84

程式

class Rectangle
{
	private double width;
	private double height;
	public Rectangle(){}
	public Rectangle(double w,double h)
	{
		width=w;
		height=h;
	 }
	double getArea()
	{
		return width*height;
	 }
	double getPerimeter()
	{
		return (width+height)*2;
	 }
 }

7-1 類的定義與物件使用 (10分)

請定義一個學生類(Student),包含學號、姓名、年齡(7-60歲)三個私有成員。從鍵盤輸入學生的成員值後生成物件,並按要求輸出相應的結果。

輸入格式:

第一行一個整數k,代表後面要生成的學生人數。 從第二行開始的連續k行,每行3個資料,分別表示一個學生的學號、姓名和年齡。

輸出格式:

輸出每個學生的基本情況。如果資料不符合要求則輸出"bad"

輸入樣例:

3
20174042001 zhangsan 20
20174042030 lisi 2
20174042050 wangwu 17

輸出樣例:

zhangsan 20174042001 20
bad
wangwu 20174042050 17

程式

import java.util.*;
class Student
{
	private String sno;
	private String name;
	private int age;
	public Student(String s1,String n,int a)
	{
		sno=s1;
		name=n;
		age=a;
	 }
	public String toString()
	{
		return name+" "+sno+" "+age;
	 }
	
 }
public class Main
{
	public static void main(String[] args)
	{
		int k;
		Scanner s=new Scanner(System.in);
		k=s.nextInt();
		Student stu[]=new Student[k];
		for(int i=0;i<k;i++)
		{
			String sno1=s.next();
			String name1=s.next();
			int age1=s.nextInt();
			if(age1<7||age1>60) System.out.println("bad");
			else
			{
				stu[i]=new Student(sno1,name1,age1);
				System.out.println(stu[i]);
			 }
		 }
 	}
 }

7-2 好玩的圖形 (20分)

給定圖形介面定義如下:

interface Shape{
float getArea();//求面積
float getPerimeter();//求周長
}

請實現以上介面,定義圓形類(用數字1表示)、矩形類(用數字2表示)。
從鍵盤輸入圖形類別(1代表圓,2代表矩形)和相應的引數,計算並輸出相應圖形的面積和周長,結果保留小數點後2位資料。

輸入格式:

輸入資料包含多行,第一行一個整數n,表示接下來共有n個圖形物件需要生成。
每個圖形資料佔2行,第一行為數字1或2,表示圖形類別,第二行為生成圖形的引數。

輸出格式:

每個圖形對應的面積和周長。

輸入樣例:

2
1
1.0
2
1.0 2.0

輸出樣例:

3.14 6.28
2.00 6.00

程式

import java.util.*;
interface Shape
{
	public float getArea();
	public float getPerimeter();
 }
class Round implements Shape
{
	private float radius;
	
	public Round(float r)
	{
		radius=r;
	 }
	
	public float getArea()
	{
		return (float)(Math.PI*radius*radius);
	 }
	public float getPerimeter()
	{
		return (float)(2*Math.PI*radius);
	 }
 }
class Rect implements Shape
{
	private float length;
	private float width;
	public Rect(float l,float w)
	{
		length=l;width=w;
	 }
	public float getArea()
	{
		return (float)(length*width);
	 }
	public float getPerimeter()
	{
		return (float)(2*(length+width));
	 }
 }
public class Main
{
	public static void main(String[] args)
	{
		Scanner ss=new Scanner(System.in);
		int n=ss.nextInt();
		for(int i=1;i<=n;i++)
		{
			int m=ss.nextInt();
			if(m==1)
			{
				float r=ss.nextFloat();
				Round r1=new Round(r);
				System.out.println(String.format("%.2f",r1.getArea())+" "+String.format("%.2f",r1.getPerimeter()));
			 }
			else if(m==2)
			{
				float l=ss.nextFloat();
				float w=ss.nextFloat();
				Rect r2=new Rect(l,w);
				System.out.println(String.format("%.2f",r2.getArea())+" "+String.format("%.2f",r2.getPerimeter()));
			 }
		 }
	 }
 }

7-3 宣告圖書類,記錄圖書總冊數,利用靜態變數賦值。 (10分)

宣告一個圖書類,其資料成員為書名、編號(利用靜態變數實現自動編號)、書價,並擁有靜態資料成員冊數,記錄圖書的總冊數;在構造方法中,利用靜態變數為物件的編號賦值,在主方法中定義物件陣列,並求出總冊數。

輸出格式:

請輸出每本圖書對應的書名,書號,書價以及總圖書數。

輸出樣例:

書名:Java程式設計, 書號:1, 書價:34.5
書名:資料結構, 書號:2, 書價:44.8
書名:C++程式設計, 書號:3, 書價:35.0
圖書總冊數為:3

程式

class Book
{
	private String title;
	private double price;
	public static String sno;
	public static int num=0;
	public Book(String t,double p)
	{
		num++;
		title=t;
		price=p;
		sno=Integer.toString(Integer.parseInt("0")+num);	
	 }
	public String toString()
	{
		return "書名:"+title+", 書號:"+sno+", 書價:"+price;
	 }
	public static int getNum()
	{
		return num;
	 }
 }
public class Main
{
     public static void main(String[] args){
	Book a=new Book("Java程式設計",34.5);
	System.out.println(a);
	Book b=new Book("資料結構",44.8);
	System.out.println(b);
	Book c=new Book("C++程式設計",35.0);
	System.out.println(c);
	System.out.println("圖書總冊數為:"+Book.getNum());
   }
 }

7-4 jmu-Java-03物件導向基礎-04-形狀-繼承 (15分)

前言
前面題目形狀中我們看到,為了輸出所有形狀的周長與面積,需要建立多個陣列進行多次迴圈。這次試驗使用繼承與多型來改進我們的設計。

本題描述:

1、定義抽象類Shape 屬性:不可變靜態常量double PI,值為3.14, 抽象方法:public double
getPerimeter(),public double getArea() 2、Rectangle與Circle類均繼承自Shape類。
Rectangle類(屬性:int width,length)、Circle類(屬性:int radius)。
帶參建構函式為Rectangle(int width,int length),Circle(int radius)。
toString方法(Eclipse自動生成) 3、編寫double sumAllArea方法計算並返回傳入的形狀陣列中所有物件的面積和與
double sumAllPerimeter方法計算並返回傳入的形狀陣列中所有物件的周長和。 4、main方法
4.1 輸入整型值n,然後建立n個不同的形狀。如果輸入rect,則依次輸入寬、長。如果輸入cir,則輸入半徑。
4.2 然後輸出所有的形狀的周長之和,面積之和。並將所有的形狀資訊以樣例的格式輸出。 提示:使用Arrays.toString。
4.3 最後輸出每個形狀的型別與父型別.使用類似shape.getClass() //獲得型別, shape.getClass().getSuperclass() //獲得父型別;
注意:處理輸入的時候使用混合使用nextInt與nextLine需注意行尾回車換行問題。

思考

你覺得sumAllArea和sumAllPerimeter方法放在哪個類中更合適? 是否應該宣告為static?

輸入樣例:

4
rect
3 1
rect
1 5
cir
1
cir
2

輸出樣例:

38.84
23.700000000000003
[Rectangle [width=3, length=1], Rectangle [width=1, length=5], Circle [radius=1], Circle [radius=2]]
class Rectangle,class Shape
class Rectangle,class Shape
class Circle,class Shape
class Circle,class Shape

程式

import java.util.*;
abstract class Shape
{
	static final double  PI=3.14;
	public abstract double getPerimeter();
	public abstract double getArea();
 }
class Rectangle extends Shape
{
	private int width;
	private int length;
	public Rectangle(int width,int length)
	{
		this.width=width;
		this.length=length;
	 }
	public double getPerimeter()
	{
		return 2*(width+length);
	 }
	public double getArea()
	{
		return length*width;
	 }
	public String toString()
	{
		return "Rectangle [width="+width+", length="+length+"]";
	 }
 }
class Circle extends Shape
{
	private int radius;
	public Circle(int radius)
	{
		this.radius=radius;
	 }
	public double getPerimeter()
	{
		return 2*PI*radius;
	 }
	public double getArea()
	{
		return PI*radius*radius;
	 }
	public String toString()
	{
		return "Circle [radius="+radius+"]";
	 }
 }
public class Main
{
	public static void main(String[] args)
	{
		double sumAllArea=0,sumAllPerimeter=0;
		Scanner ss=new Scanner(System.in);
		int n=ss.nextInt();
		Shape sha[]=new Shape[n];
		for(int i=0;i<n;i++)
		{
			String s1=ss.next();
			if(s1.equals("rect"))
			{
				int w=ss.nextInt();
				int l=ss.nextInt();
				sha[i]=new Rectangle(w,l);
				sumAllArea+=sha[i].getArea();
				sumAllPerimeter+=sha[i].getPerimeter();
			 }
			else if(s1.equals("cir"))
			{
				int r=ss.nextInt();
				sha[i]=new Circle(r);
				sumAllArea+=sha[i].getArea();
				sumAllPerimeter+=sha[i].getPerimeter();
			 }
		 }
		System.out.println(sumAllPerimeter);
		System.out.println(sumAllArea);
		System.out.print("[");
		for(int i=0;i<n;i++)
		{
			if(i!=0) System.out.print(", ");
			System.out.print(sha[i]);
		 }
		System.out.println("]");
		for(int i=0;i<n;i++)
		{
			if(sha[i] instanceof Rectangle) System.out.println("class Rectangle,class Shape");
			else if(sha[i] instanceof Circle) System.out.println("class Circle,class Shape");
		 }
	 }
 }

7-5 學生類-建構函式 (10分)

定義一個有關學生的Student類,內含類成員變數: String name、String sex、int age,所有的變數必須為私有(private)。

1.編寫有參建構函式: 能對name,sex,age賦值。

2.覆蓋toString函式: 按照格式:類名 [name=, sex=, age=]輸出。使用idea自動生成,然後在修改成該輸出格式

3.對每個屬性生成setter/getter方法
4.main方法中 •輸入1行name age sex , 呼叫上面的有參建構函式新建物件。

輸入樣例:

tom 15 male

輸出樣例:

Student [name='tom', sex='male', age=15]

程式

import java.util.*;
class Student
{
	private String name;
	private String sex;
	private int age;
	public Student(String n,String s,int a)
	{
		name=n;
		sex=s;
		age=a;
	 }
	public String toString()
	{
		return "Student [name='"+name+"', sex='"+sex+"', age="+age+"]";
	 }
 }
public class Main
{
	public static void main(String[] args)
	{
		Scanner ss=new Scanner(System.in);
		String name=ss.next();
		int age=ss.nextInt();
		String sex=ss.next();
		Student s=new Student(name,sex,age);
		System.out.println(s);
	 }
 }

7-6 計算年齡 (10分)

定義一個Birthday類,其成員變數有3個整形變數(出生的年月日):year,month,day;提供構造方法對這3個成員變數進行初始化;提供成員變數的get、set方法;成員函式有getAge(),功能是實現計算到2017年12月25日時該Birthday物件的年齡。編寫程式測試這個類。

輸入格式:

輸入出生的年、月、日(注:輸入的年月日以換行隔開)

輸出格式:

計算得到年齡

輸入樣例:
在這裡給出一組輸入。例如:

1995
12
23

輸出樣例:
在這裡給出相應的輸出。例如:

age=22

程式

import java.util.*;
class Birthday
{
	private int year;
	private int month;
	private int day;
	public Birthday(int y,int m,int d)
	{
		year=y;month=m;day=d;
	 }
	public void setYear(int y1)
	{
		year=y1;
	 }
	public void setMonth(int m1)
	{
		month=m1;
	 }
	public void setDay(int d1)
	{
		day=d1;
	 }
	public int getYear()
	{
		return year;
	 }
	public int getMonth()
	{
		return month;
	 }
	public int getday()
	{
		return day;
	 }
	public int getAge()
	{
		if(day<=25)return 2017-year;
		else return 2016-year;
	 }
 }

public class Main
{
	public static void main(String[] args)
	{
		Scanner ss=new Scanner(System.in);
		int y=ss.nextInt();
		int m=ss.nextInt();
		int d=ss.nextInt();
		Birthday b=new Birthday(y,m,d);
		System.out.println("age="+b.getAge());
	 }
 }

相關文章