JAVA語言程序設計(基礎篇) 第十版——第11章 繼承和多態 (參考答案)

編程練習題

(11.2~11.4節)+(11.5~11.14節)

11.1(三角形Triangle)

父類(左邊) 和   子類(右邊)繼承關係,

如下圖: 



package p11;

public class GeometricObject {
	private String color = "white";
	private boolean filled;
	private java.util.Date dateCreated;
	
	public GeometricObject() {
		dateCreated=new java.util.Date();
	}
	
	public GeometricObject(String color, boolean filled) {
		dateCreated=new java.util.Date();
		this.color=color;
		this.filled=filled;
	}
	
	public String getColor() {
		return color;
	
	}
	
	public void setColor(String color) {
		this.color=color;
	}
	
	public boolean isFilled() {
		return filled;
	
	}
	
	public void setFilled(boolean filled) {
		this.filled=filled;
	
	}
	
	public java.util.Date getDateCreated() {
		return dateCreated;
	
	}
	
	public String toString() {
		return "created on " + dateCreated + "\ncolor: " + color+   
				" and filled: " + filled;
	
	}
}

 

package p11;

public class Triangle extends GeometricObject {
	private double side1 = 1.0;
	private double side2 = 1.0;
	private double side3 = 1.0;
	
	public Triangle() {
		
	}
	
	//這是一個 重載 的構造方法
	public Triangle(double side1, double side2,
			double side3, String color, boolean filled) {   
		
		super(color,filled);//或者 調用父類中已有方法 ,如下
							//setColor(color);
		                   //setFilled(filled);
		this.side1=side1;
		this.side2=side2;
		this.side3=side3;
		
	}
	
	public double getSide1() {
		return side1;
	
	}
	
	public double getSide2() {
		return side2;
	
	}
	
	public double getSide3() {
		return side3;
	
	}
	
	public double getArea() {
		double s=(side1+side2+side3)/2;
		double area=Math.pow( s*(s-side1)*(s-side2)*(s-side3) , 0.5); 
		return area;
	}
	
	public double getPerimeter() {
		return side1+side2+side3;
	
	}
	
	@Override
	public String toString() {
	
		return super.toString() + "\nArea is " + getArea();
	
	}
}
package p11;

import java.util.Scanner;

public class Test1 {

	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		System.out.print("請輸入三角形的三條邊:");
		double s1=input.nextInt();
		double s2=input.nextInt();
		double s3=input.nextInt();
		
		System.out.print("請輸入三角形的顏色: ");
		String c1=input.next();
		
		System.out.print("請輸入一個boolean值(false:不填充;true:填充):");   
		boolean f1=input.nextBoolean();
		
		input.close();
		
		//創建對象
		GeometricObject object=new Triangle(s1, s2, s3, c1, f1);
		
		System.out.println(object.toString());
		
		
		
	}

}

 

(11.5~11.14節)

11.2(Person、Student、Employee、Faculty 和 Staff類)

這個不難,我也就是在 受聘日期 那裏“卡殼”了一下

總體的繼承關係:


 

package p11;

public class Person {
	private String name;
	private String adress;
	private String phone;
	private String email;
	
	public Person(String name, String adress, String phone, String email) {
		this.name=name;
		this.adress=adress;
		this.phone=phone;
		this.email=email;
	}
	
	public Person(String name) {
		this.name=name;
	}
	
	public String getAdress() {
		return adress;
	
	}
	
	public void setAdress(String adress) {
		this.adress=adress;
	}
	
	public String getPhone() {
		return phone;
	
	}
	
	public void setPhone(String phone) {
		this.phone=phone;
	}
	
	public String getEmail() {
		return email;
	
	}
	
	public void setEmail(String email) {
		this.email=email;
		
	}
	
	public String toString() {
		return "The Person's name is "+name+"\nAdress is "+adress+
				"\nPhone is "+phone+"\nEmail is "+email;
	
	}
}
package p11;

public class Student extends Person {
	
	private int classState;
	
	public final static int FRESHMAN=1;//大一新生
	public final static int SOPHOMORE=2;//大二學生
	public final static int JUNIOR=3;//大三學生
	public final static int SENIOR=4;//大四學生
	
	
	public Student(int classState, String name, String adress, String phone, String email) {
		super(name, adress, phone, email);
		this.classState=classState;
		
	}
	
	public int getClassState() {
		return classState;
	
	}
	
	public void setClassState(int classState) {
		this.classState=classState;
	}
	
	@Override
	public String toString() {
		return "The Student's classState is "+classState+"\n"+super.toString();
	
	}
}
package p11;

import java.util.Date;

import p10.MyDate;

public class Employee extends Person {
	
	private String office;
	private double salary;
	private MyDate DateOfAppointment;//受聘日期
	
	//構造方法
	public Employee(String office, double salary, MyDate DateOfAppointment, 
			String name, String adress, String phone, String email) {
		
		super(name, adress, phone, email);
		
		this.DateOfAppointment=DateOfAppointment;
		this.salary=salary;
		this.office=office;
		
	}
	
	public String getOffice() {
		return office;
	
	}
	
	public void setOffice(String office) {
		this.office=office;
	}
	
	public double getSalary() {
		return salary;
	
	}
	
	public void setSalary(double salary) {
		this.salary=salary;
	}
	
	public String getDateOfAppointment() {
		
		return DateOfAppointment.getYear()+"年"+DateOfAppointment.getMonth()
			+"月"+DateOfAppointment.getDay()+"日";
	
	}
	
	@Override
	public String toString() {
		return "The Employee's dateOfAppointment is "+  getDateOfAppointment()
								+"\nOffice is "+office+"\nSalary is "+salary+"\n"+super.toString();
	
	}
}
package p11;

import p10.MyDate;

public class Faculty extends Employee {
	private long officeHours;
	private String rank;
	
	//構造方法
	public Faculty(long officeHours, String rank, String office, double salary, MyDate DateOfAppointment,
			String name, String adress, String phone, String email) {
		
		super(office, salary, DateOfAppointment, name, adress, phone, email);
		this.officeHours=officeHours;
		this.rank=rank;
	}
	
	public long getOfficeHours() {
		return officeHours;
	
	}
	
	public void setOfficeHours(long officeHours) {
		this.officeHours=officeHours;
	}
	
	public String getRank() {
		return rank;
	
	}
	
	public void setRank(String rank) {
		this.rank=rank;
	}
	
	@Override
	public String toString() {
		return "The Faculty's officeHours is "+officeHours+"\nRank is "+rank+
				"\n"+super.toString();
	
	}
}
package p11;

import p10.MyDate;

public class Staff extends Employee {
	
	private String title;
	
	//構造方法
	public Staff(String title, String office, double salary, MyDate DateOfAppointment, String name, 
			String adress, String phone, String email) {
	
		super(office, salary, DateOfAppointment, name, adress, phone, email);
		this.title=title;
	}
	
	public String getTitle() {
		return title;
	
	}
	
	public void setTitle(String title) {
		this.title=title;
	}
	
	@Override
	public String toString() {
		return "The Staff's title is "+title+"\n"+super.toString();
	
	}
}
package p11;

import p10.MyDate;

public class Test2 {

	public static void main(String[] args) {
		
		Person person=new Person("王大狗","垃圾堆","123456789","[email protected]");  
		
		Person student=new Student(4,"王大狗","垃圾堆","123456789","[email protected]"); 
		
		Person employee=new Employee("五星街辦公室一號",5600,new MyDate(1996,12,17),"王大狗","垃圾堆","123456789","[email protected]");

		Person faculty=new Faculty(8, "二等", "五星街辦公室一號",5600,new MyDate(1996,12,17),"王大狗","垃圾堆","123456789","[email protected]");
		
		Person staff=new Staff("優秀員工","五星街辦公室一號",5600,new MyDate(1996,12,17),"王大狗","垃圾堆","123456789","[email protected]");
		
		
		System.out.println(person.toString());
		System.out.println();
		System.out.println(student.toString());
		System.out.println();
		System.out.println(employee.toString());
		System.out.println();
		System.out.println(faculty.toString());
		System.out.println();
		System.out.println(staff.toString());
		
	}

}

 

11.3(賬戶類Account的子類)

  

1.我先解釋一下下:
       透支限定額:也就是可以讓你在卡沒有錢的情況下還   可以借你最大的資金限額 ,透支額度是銀行根據你提交的個人資料、財力證明等材料來綜合評定的,一般是3000到5w不等。普卡最高在1w左右,金卡最高可以到5w甚至更高。

package p9;

import java.util.Date;

public class Account {
		
	public int id=0;//用戶名
	public double balance=0;//餘額
	public double annualInteresRate=0;//當前利率
	public java.util.Date dateCreated;//存儲開戶日期
	
	//無參構造方法
	public Account(){
		Date dateCreated=new Date();
		this.dateCreated=dateCreated;
	}
	
	//有參構造方法
	public Account(int id, double balance){
		Date dateCreated=new Date();
		this.dateCreated=dateCreated;
		this.id=id;
		this.balance=balance;
	}
	
	public int getId(){
		return id;
		
	}
	
	public double getBalance() {
		return balance;
	}
	
	
	public double getAnualInterestRate() {
		return annualInteresRate;
		
	}
	
	
	public void setId(int id){
		this.id=id;
	}
	
	
	public void setBalance(double balance) {
		this.balance=balance;
	}
	
	//設置 年利率
	public void setAnnualInterestRate(double annualInterestRate) {
		this.annualInteresRate=annualInterestRate;
	}

	//獲得開戶日期
	public String getDateCreated(){
		return dateCreated.toString();
		}
	
	//月利息
	public double getMonthlyInterestRate() {
		return annualInteresRate/12;
		
	}
	
	//取錢
	public double withDraw(double withdraw) {
		return this.balance=this.balance-withdraw;
	}
	
	//存錢
	public double deposit(double deposit) {
		return this.balance=this.balance+deposit;
	}

	
}
package p11;

import p9.Account;

public class CheckingAccount extends Account{
	
	private double OverDraftLimit;//限定透支額度
	
	public CheckingAccount(int id, double balance, double OverdraftLimit) {
		
		super(id, balance);
		
		this.OverDraftLimit=OverDraftLimit;//可用額度
	}
	
	//
	public double getOverDraftLimit() {
		return OverDraftLimit;
	}
	
	public void setOverDraftLimit(double OverDraftLimit) {
		this.OverDraftLimit=OverDraftLimit;
	}
	
	@Override
	//取錢
	public double withDraw(double withdraw) {
		
		//可用額度不爲0時
		if(getOverDraftLimit() != 0) {
			
			//自動提款機,小於100元不提取
			if(this.balance<100) {
				
			//移用,“可用額度”
			this.balance = this.balance + this.OverDraftLimit;
			
			//移用,“可用額度”後,系統自動將可用額度 “清零”,以後的可用額度就爲 "0"
			setOverDraftLimit(0);
			
			return this.balance=this.balance-withdraw;
			}
			else {
				//正常卡里有錢並且>100元時,不用 “可用額度”
				return this.balance=this.balance-withdraw;
			}
			
		}   
		//當可用額度爲0時
		else if(getOverDraftLimit() == 0){
			if(this.balance<100) {
				return -1;//返回一個負數,表示不可取錢了!!!
			}
			else {
				//正常卡里有錢並且>100元時,不用 “可用額度”
				return this.balance=this.balance-withdraw;
			}
		}
		
		return this.balance;
	}
				
	public String toString() {
		return "The ID:"+id+"\nThe balance is "
					+balance+"\n可用額度爲:"+getOverDraftLimit();
	
	}
}

 

package p11;

import p9.Account;

public class SavingAccount extends Account{
	
	public SavingAccount(int id, double balance) {
		super(id,balance);
	}
	
	@Override   //取錢方法 不可透支
	public double withDraw(double withdraw) {
		//自動提款機 <100 元是不能夠取出來的,我這裏用-1表示
		if(this.balance<100) {
			return -1;
		}
		else {
			return this.balance=this.balance-withdraw;
		}
	}
	
	public String toString() {
		return "The ID:"+id+"\nThe balance is "
				+balance;
	
	}
}

 

11.4(ArrayList 的最大元素)

package p11;

import java.util.ArrayList;
import java.util.Scanner;

public class Test4 {

	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		System.out.println("請輸入一個以0結尾的數值序列:");
		
		//創建一個數組列表:該ArrayList對象可以用於存儲 Integer整型數值    
		ArrayList<Integer> list=new ArrayList<>();
		
		int value=input.nextInt();
		
		while(value != 0) {
			
			list.add(value);
			value=input.nextInt();
		}
		
		input.close();
		
		//調用max方法,來返回輸入的最大值
		System.out.println("最大值是:"+max(list));
		
	}

	//一個返回數組列表中最大值的方法
	public static Integer max(ArrayList<Integer> list) {
		if(list.isEmpty() || list.size()==0) {
			return null;
		}
		else {
			int max=list.get(0);
			int maxIndex=0;
			
			for(int i=1; i<list.size(); i++) {
				if(max<list.get(i)) {
					max=list.get(i);
					maxIndex=i;
				}
			}
			
			return max;
			
		}
		
		
		
	}

}

11.5(課程類 Course)

package p11;

import java.util.ArrayList;

public class Course {
	
	private String courseName;
	
	//用數組列表存儲學生名
	private ArrayList<String> students = new ArrayList<>();
	
	private int numberOfStudents;
	
	//課程的一個構造方法
	public Course(String courseName) {
		this.courseName = courseName;
	}
	
	//返回課程名
	public String getCourseName() {
		return courseName;
	
	}
	
	//增加學生名字
	public void addStudent(String student) {
		students.add(student);
	}
	
	//刪除學生名字
	public void dropStudent(String student) {
		students.remove(student);
	}
	
	//返回 學生名字列表
	public ArrayList<String> getStudents() {
		return students;
	
	}
	
	//返回 學生人數
	public int getNumberOfStudents() {
		return numberOfStudents=students.size();
	
	}
}
package p11;

public class Test5 {

	public static void main(String[] args) {
		Course object1=new Course("Date Structures");
		Course object2=new Course("Date Systems");
		
		object1.addStudent("Peter Jones");
		object1.addStudent("Kim Smith");
		object1.addStudent("Anne Kennedy");
		
		object2.addStudent("Peter Jones");
		object2.addStudent("Steve Smith");
		
		System.out.println("Number of students in course1: "    
				+ object1.getNumberOfStudents());
		
		//輸出 數組列表
		System.out.println(object1.getStudents());
	
		System.out.println("Number of students in course2: "
					+object2.getNumberOfStudents());   
		
	}

}

 

11.6(使用 ArrayList)

說明一下:我沒有創建Loan類、Circle類,而是直接用我自己之前包裏有的類來創建對象,其實用哪個類都是一樣的。

package p11;

import java.util.ArrayList;
import java.util.Date;

public class Test6 {

	public static void main(String[] args) {
		
		ArrayList<Object> list=new ArrayList<>();
		
		Person object1=new Person("陳霄潔", "縣府9棟701號", "18867076391", "[email protected]");
		
		Date object2=new Date();
		
		Triangle object3=new Triangle();
		
		list.add(object1);
		list.add(object2);
		list.add("Welcome to Java !");
		list.add(object3);
		
		for(int i=0; i<list.size(); i++) {
			System.out.println(list.get(i));
			System.out.println();
		}
		
		

	}

}

11.7(打亂ArrayList)

package p11;

import java.util.ArrayList;
import java.util.Arrays;

public class Test7 {

	public static void main(String[] args) {
		
		Integer[] array= {3, 5, 95, 4, 15, 34, 3, 6, 5};
		ArrayList<Integer> list=new ArrayList<>(Arrays.asList(array));  
		
		shuffle(list);

	}
	
	public static void shuffle(ArrayList<Integer> list) {
		
		java.util.Collections.shuffle(list);
		System.out.println(list);
		
		
		
	}

}

**11.8(新的 Account 類)

 

package p11;

import java.util.ArrayList;

public class Test8 {

	public static void main(String[] args) {
		//用於爲賬戶存儲交易
		//ArrayList<Object> transactions=new ArrayList<>();
		
		NewAccount object=new NewAccount("George", 1122, 1000);  
		object.setAnnualInterestRate(0.015);
		
		object.deposit(30);
		object.deposit(40);
		object.deposit(50);
		
		object.withDraw(5);
		object.withDraw(4);
		object.withDraw(2);
		
		System.out.println("賬戶持有者名字: "+object.getName()
					+ "\n利率: "+object.getAnnualInterestRate()
					+ "\n收支額: "+object.getBalance()
					+ "\n所有的交易:"+object.toString());
		
		
	}

}
package p11;

import java.util.ArrayList;
import java.util.Date;

public class NewAccount {
	
	private String name;
	
	//用於爲賬戶存儲交易
	private ArrayList<Object> transactions=new ArrayList<>();
	
	public int id=0;//用戶名
	public double balance=0;//餘額
	public double annualInteresRate=0;//當前利率
	public java.util.Date dateCreated;//存儲開戶日期
	
	//無參構造方法
	public NewAccount() {
		Date dateCreated=new Date();
		this.dateCreated=dateCreated;
		
	}
	
	//有參構造方法
	public NewAccount(int id, double balance){
		Date dateCreated=new Date();
		this.dateCreated=dateCreated;
		this.id=id;
		this.balance=balance;
	}
	
	//一個新的有參構造方法
	public NewAccount(String name, int id, double balance) {
		Date dateCreated=new Date();
		this.dateCreated=dateCreated;
		this.id=id;
		this.balance=balance;
		this.name=name;
	}
	
	public void setId(int id) {
		this.id=id;
	}
	
	public void setBalance(double balance) {
		this.balance=balance;
	}
	
	public void setAnnualInterestRate(double annualInterestRate) {
		this.annualInteresRate=annualInterestRate;
	}
	
	public int getId() {
		return id;
	
	}
	
	public double getBalance() {
		return balance;
	
	}
	
	public String getName() {
		return name;
		
	}
	
	public double getAnnualInterestRate() {
		return annualInteresRate;
	
	}
	
	public double getMonthlyInterestRate() {
		return annualInteresRate/12;
	
	}
	
	public String getDateCreated() {
		return dateCreated.toString();
	
	}
	
	
	//取錢
	public double withDraw(double withDarw) {
		
		//創建一筆取錢交易
		Transaction withDrawTransacte=new Transaction('W', withDarw, (this.balance=this.balance-withDarw), "取款:"+withDarw+"美元");
		transactions.add(withDrawTransacte.getDescription());
		
		return this.balance;
		
	}
	
	
	//存錢
	public double deposit(double deposit) {
		//創建一筆存錢交易
		Transaction depositTransacte=new Transaction('D', deposit, (this.balance=this.balance+deposit), "存款:"+deposit+"美元");
		transactions.add(depositTransacte.getDescription());	
		
		return this.balance;
	}
	
	public String toString() {
		return "\n日期: "+getDateCreated()+"\n"+transactions.toString();
		
	}
	
}
package p11;

import java.util.Date;

public class Transaction {
	//交易日期
	private java.util.Date date;
	
	//交易類型,例如'W','D'
	private char type;
	
	//交易量
	private double amount;
	
	//交易後的新餘額
	private double balance;
	
	//交易描述
	private String description;
	
	
	//一個有參構造方法
	public Transaction(char type, double amount, double balance, String description) {
		this.type=type;
		this.amount=amount;
		this.balance=balance;
		this.description=description;
		
		//創建一個交易日期
		date=new Date();
		this.date=date;
	}
	
	//獲得交易日期
	public String getDate() {
		return date.toString();
	
	}
	
	//設置交易日期
	public void setDate(long eclapseTime) {
		date.setTime(eclapseTime);
	}
	
	//交易類型:‘W’——取款,‘D’——存款
	public char getType() {
		return type;
	
	}
	
	public void setType(char type) {
		this.type=type;
	}
	
	public double getAmount() {
		return amount;
	
	}
	
	public void setAmount(double amount) {
		this.amount=amount;
	}
	
	public double getBalance() {
		return balance;
	
	}
	
	public void setBalance(double balance) {
		this.balance=balance;
	}
	
	public String getDescription() {
		return description;
	
	}
	
	public void setDescription(String description) {
		this.description=description;
	}
}

 

*11.9(最大的行和列)

注意:本人感覺我這代碼還不夠完善,比如,測試完會有這種[【0,0,0,1,2,3】的下標出現,其實代表的也就是【0,1,2】

以下的沒有出現重複的下標,是偶然的隨機數產生的結果:

 當然也會出現這種樣子的運行結果:

       【0,0,0,0,0,2】其實代表的是【0,2】.

package p11;

import java.util.ArrayList;
import java.util.Scanner;

public class Test9 {

	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		System.out.print("Enter the array size n: ");
		int n=input.nextInt();
		
		input.close();
		
		System.out.println("The random array is : ");
		
		
		//創建一個二維數組
		int[][] array=new int[n][n];
		
		//下標[row]:行
		//下標[column]:列
		
		//按行,循環賦值,並且輸出
		for(int row=0; row<array.length; row++) {
			for(int column=0; column<array[row].length; column++) {      
				
				array[row][column]=(int) (Math.random()*2);
				
				System.out.print(" "+array[row][column] + " ");
			}
			
			//換行
			System.out.println();
		}
		
//---------------------------------------------------------------------------------------		
//先通過比較,知道哪一行的和最大
		
		//用數組列表來存儲——最大值下標
		ArrayList<Integer> list1=new ArrayList<>();
		
		
		int maxRow1=0;//"行最大值"——(一行的元素相加得到的最大值)
		int maxIndex1=0;//"行最大值的下標 "——(若某一行具有最大值,則將其下標賦值給maxIndex)    
		
		
		//先計算第一行的和,並且先讓它的和爲最大值,它的下標爲最大值下標。
		//然後拿這個最大值 與 剩下的行的各自的和相比較,找出真正的最大值和最大值下標         
		for(int column=0; column<array[0].length; column++) {
			maxRow1 += array[0][column];
			list1.add(maxIndex1);//先把 0下標暫時加入數組列表
		}   
		
		
		//一一比較找出真正的最大值和最大值下標    
		
		for(int row=0; row<array.length; row++) {
			
			int total=0;
			for(int column=0; column<array[row].length; column++) {
				total += array[row][column];
			}
				
			if(maxRow1<total) {
				list1.clear();
				maxRow1=total;
				maxIndex1=row;
				list1.add(maxIndex1);
				
			}
			else if(maxRow1==total) {
				list1.add(row);
			}
			
		}
		
		
		System.out.println("行最大值爲: "+maxRow1+"\n行最大值下標是: "+list1.toString());  
		
//--------------------------------------------------------------------------------------		
//先通過比較,知道哪一列的和最大
		ArrayList<Integer> list2=new ArrayList<>();
		
		int maxColumn=0;
		int MaxIndex=0;
		
		for(int row=0; row<array.length; row++) {
			maxColumn += array[row][0];
			list2.add(MaxIndex);
		}
		
		
		for(int column=1; column<array[1].length; column++) {
			
			int all=0;
			for(int row=0; row<array.length; row++) {
				all += array[row][column];
			}
			
			if(maxColumn<all) {
				list2.clear();
				maxColumn=all;
				MaxIndex=column;
				list2.add(MaxIndex);
			}
			else if(maxColumn==all) {
				list2.add(column);
			}
		}
		
		System.out.println("列最大值爲: "+maxColumn+"\n列最大值下標是: "+list2.toString());
		
		
	}

}

 

11.10(利用繼承實現MyStack)

 

package p11;

import java.util.ArrayList;

	public class MyStack extends ArrayList{
		
		private ArrayList<Object> list=new ArrayList<>();
		
		public boolean isEmpty() {
			return list.isEmpty();
		}
		
		public int getSize() {
			return list.size();
		}
		
		public Object peek() {
			return list.get(getSize()-1);
		}
		
		public Object pop() {
			Object o=list.get(getSize()-1);
			list.remove(getSize()-1);
			return o;
		
		}
		
		public void push(Object o) {
			list.add(o);
		}
		
		@Override
		public String toString() {
			return "stack: " + list.toString();
			
		}
	}
package p11;

import java.util.Scanner;

public class Test10 {

	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		System.out.println("請輸入5個字符串: ");
		String s1=input.nextLine();
		String s2=input.nextLine();
		String s3=input.nextLine();
		String s4=input.nextLine();
		String s5=input.nextLine();
		
		input.close();
		
		//創建一個棧類
		MyStack stack=new MyStack();
		
		//入棧
		stack.push(s1);
		stack.push(s2);
		stack.push(s3);
		stack.push(s4);
		stack.push(s5);
		
		//輸出:可以直接用toString()——不過這是給你看一個入棧效果,它是順序的    
		System.out.println(stack.toString());
		//換行
		System.out.println();
		
		//逆序輸出:可以用出棧 pop():先進後出
		
		int leng=stack.getSize();
		for(int i=0; i<leng; i++) {
			System.out.print(" " + stack.pop());
		}
		
		//換行
		System.out.println();
		System.out.println();
		
		//元素出棧後再看一下,棧裏面現在的情況
		System.out.println(stack.toString());

	}

}

 

11.11(對ArrayList排序)

package p11;

import java.util.ArrayList;
import java.util.Scanner;

public class Test11 {

	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		System.out.print("請輸入5個數字: ");
		int number1=input.nextInt();
		int number2=input.nextInt();
		int number3=input.nextInt();
		int number4=input.nextInt();
		int number5=input.nextInt();
		input.close();
		
		ArrayList<Integer> list=new ArrayList<>();
		
		list.add(number1);
		list.add(number2);
		list.add(number3);
		list.add(number4);
		list.add(number5);
		
		sort(list);
		
		System.out.println(list);
		

	}

	//對一個數值的ArrayList進行升序排序(從小到大排序)
	public static void sort(ArrayList<Integer> list) {
		java.util.Collections.sort(list);
		
	}
}

 11.12(對ArrayList求和)


 

package p11;

import java.util.ArrayList;
import java.util.Scanner;

public class Test12 {

	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		System.out.print("請輸入5個數字: ");
		double number1=input.nextDouble();
		double number2=input.nextDouble();
		double number3=input.nextDouble();
		double number4=input.nextDouble();
		double number5=input.nextDouble();
		input.close();
		
		ArrayList<Double> list=new ArrayList<>();
		
		list.add(number1);
		list.add(number2);
		list.add(number3);
		list.add(number4);
		list.add(number5);
		
		System.out.println("它們的和爲: " + sum(list));
		
	}
	
	public static double sum(ArrayList<Double> list) {
		
		double sum=0;
		int leng=list.size();
		for(int i=0; i<leng; i++) {
			sum += list.get(i);
		}
		return sum;
		
	}

}

 

*11.13(去掉重複元素)

兩種輸出方式給你隨意選擇

package p11;

import java.util.ArrayList;
import java.util.Scanner;

public class Test13 {

	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		//創建一個數組 list
		ArrayList<Integer> list=new ArrayList<>();
		
		System.out.print("Enter ten integers: ");
		int n1=input.nextInt();
		int n2=input.nextInt();
		int n3=input.nextInt();
		int n4=input.nextInt();
		int n5=input.nextInt();
		int n6=input.nextInt();
		int n7=input.nextInt();
		int n8=input.nextInt();
		int n9=input.nextInt();
		int n10=input.nextInt();
		
		input.close(); 
		
		list.add(n1);
		list.add(n2);
		list.add(n3);
		list.add(n4);
		list.add(n5);
		list.add(n6);
		list.add(n7);
		list.add(n8);
		list.add(n9);
		list.add(n10);
		
		//去除重複的數字
		removeDuplicate(list);
		

	}

	
	public static void removeDuplicate(ArrayList<Integer> list) {      
		
		ArrayList<Integer> newList=new ArrayList<>();
		
		for(int i=0; i<list.size(); i++) {
			//如果"新數組"——newList裏沒有 "舊數組"——list裏的元素值
			//則把這個元素加入"新數組"——newList到裏     
			if( !newList.contains(list.get(i)) ) {   
				newList.add(list.get(i));
			}
		}
		
		//輸出方式一:
		System.out.print("The distinct integers are : "+newList.toString());  
		
		//換兩次行,給你們看得清楚點
		System.out.println();
		System.out.println();
		
		//輸出方式二:
		System.out.print("The distinct integers are: ");
		for(int i=0; i<newList.size(); i++) {
			System.out.print(" " + newList.get(i));
		}
	}
}

 

 11.14(結合兩個列表)

package p11;

import java.util.ArrayList;
import java.util.Scanner;

public class Test14 {

	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		
		System.out.print("Enter five integers for list1: ");
		int t1;
		ArrayList<Integer> list1=new ArrayList<>();
		for(int i=0; i<5; i++) {
			 t1=input.nextInt();
			list1.add(t1);
		}
		
		System.out.print("Enter five integers for list2: ");
		int t2;
		ArrayList<Integer> list2=new ArrayList<>();
		for(int i=0; i<5; i++) {
			 t2=input.nextInt();
			list2.add(t2);
		}
		
		union(list1,list2);
		
	}
	

	public static void union(ArrayList<Integer> list1, ArrayList<Integer> list2) {
		//將list2加在list1後面
		list1.addAll(list2);
		
		System.out.print("The combined list is ");
		for(int i=0; i<list1.size(); i++) {
			System.out.print(list1.get(i) + " ");
		}
		
	}

}

 

 *11.15(凸多邊形面積)

//這題不太懂面積怎麼求,你們可以去百度看看別的大神咋弄得

我有帶更新。。。。

我先做下一題,(#^.^#)嘻嘻~

 

**11.16(加法測試)

package p11;

import java.util.ArrayList;
import java.util.Scanner;

public class Test16 {

	public static void main(String[] args) {
		int number1=(int) (Math.random()*10);
		int number2=(int) (Math.random()*10);
		
		//創建一個數組,用來存放錯誤成績
		ArrayList<Integer> list=new ArrayList<>();
		
		
		Scanner input=new Scanner(System.in);
		
		System.out.print("What is "+number1+" + "+number2+"?");  
		
		int answer=input.nextInt();
		
		while(number1+number2!=answer) {
			if( !list.contains(answer) ) {
				list.add(answer);
			}
			else {
				System.out.println("You already entered "+answer);
			}
			
			
			System.out.print("Wrong answer.Try again.What is "
					+ number1+" + "+number2+"? ");
			answer=input.nextInt();
		}
		
		System.out.println("You got it!");

	}

}

 

**11.17(代數:完全平方)

這一題其實不難,分爲兩大步驟走:(兩大要點,基本掌握,你自己都會編程了)

一、知道怎樣從一個整數中分離出它的因子(在第五單元的練習題(5.16題)中做過)

二、知道怎樣統計一個列表中出現重複元素的個數(其實這個和消除重複的過程有點相似)

package p11;

import java.util.ArrayList;
import java.util.Scanner;

public class Test17 {

	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		
		//創建一個數組列表來保存“因子”
		ArrayList<Integer> list=new ArrayList<>();
		
		
		System.out.print("Enter an integer m: ");
		
//-------------------------------------------------------------
//源代碼在我之前做過的練習裏出現過。
//第五單元 編程練習題 5.16(找出一個整數的因子)題中	
		int number=input.nextInt();
		input.close();
		
		//得到 M
		int m=number;
		
		int i=2;
		
		System.out.print("因子爲: ");
		
		while(number != 1) {
			if(number % i ==0) {
				number = number / i ;
				System.out.print( i + " ");//輸出因子
				list.add(i);
			}
			else {
				i++;
			}
		}
		
		System.out.println();
		System.out.println("檢查 list數組裏的情況: "+list.toString());
//--------------------------------------------------------------------		
		
		ArrayList<Integer> newList=new ArrayList<>();
		
		int[] countArray=new int[1000];
		
		for(int j=0; j<list.size(); j++) {
			if(!newList.contains(list.get(j))) {
				newList.add(list.get(j));
				countArray[list.get(j)]++;
			}
			else {
				countArray[list.get(j)]++;
			}
		}
		
		System.out.println("檢查 newList數組裏的情況: "+newList.toString());
		System.out.println();
		
		//先定義 N 爲 1
		int n=1;
		for(int j=0; j<newList.size(); j++) {
			//不能將2整除的是奇數
			if(countArray[newList.get(j)] % 2 != 0 ) {
				n = n*newList.get(j) ;
			}
		}
		
		//輸出 N :是列表中出現奇數次的因子的乘積
		System.out.println("The smallest number m*n to "
				+ "be a perfect square is " + n);
		
		
		System.out.println(" m*n is " + m*n);
		
		

	}

}

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章