第三阶段作业总结
这一阶段题量可以说很少,每次作业虽然只有一道题目,但是难度真的不比前两个阶段任何一次作业的难度小。而且在面对这一次作业时我的心态总是恐惧的,就害怕会根本写不出来这一次的作业。导致我这一阶段编程所花费心力和时间大大的增多了。比如这阶段第一次作业让我们加新的功能新的挡位,我愣是花了很久的时间才去看懂题目这里就浪费了我很多时间。然后就卡在了类图的设计上。
第三阶段的第一次作业是比较简单的,花了一个上午的时间去把它写出来,然后第二次作业花了那么久依然也是没有拿到满分只有70分,但是花费的时间可以说是这一阶段三次作业最多的一次了,我花了5天,而且我的提交次数达到了几十次。直到现在我依然没有搞懂那一道题目的做法。第三次作业考察的是我们对Java重要内容的合集有Java的几个特性有数据结构有栈,所以说也比较难,但是因为那个题目老师给我们降低了难度而且网上有很多类似的题目可以给我们用来借鉴,所以前前后后花了四天的时间去写了出来。
第三次作业虽然拿到了100分但是其中遇到的错误却是也不少,这道题我一共修改了很多次,一开始每次提交都是55分连基础的及格分60都没有达到,于是我开始自己去调试,去设置断点,发现了自己的一些问题。
7-1 图形卡片排序游戏 (40 分)
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int c=0,j=0,m=0;
int y=0,cf=0,sj=0,ti=0;
double r,l,w,a1,b1,c1,sum=0;
int a[]=new int[1000];
for(int i=0;i<1000;i++)
{
a[i]=sc.nextInt();
c++;
if(a[i]==0)
break;
if(a[i]>4||a[i]<0)
{
j=1;
break;}
}
if(j!=1) {
Circle[] circle=new Circle[100];
Rectangle[] rectangle=new Rectangle[100];
Triangle[] triangle=new Triangle[100];
Trap[] trap=new Trap[100];
ArrayList<shape> list = new ArrayList<shape>(400);
for(int i=0;i<c-1;i++)
{ if(a[i]==1)
{
r=sc.nextDouble();
if(r<=0)
{ m++;
break;
}
else {
circle[y]=new Circle(r,"Circle");
list.add(circle[y]);
y++;}
}
else if(a[i]==2)
{
l=sc.nextDouble();
w=sc.nextDouble();
if(l<=0||w<=0)
{ m++;
break;
}
else {
rectangle[cf]=new Rectangle(l,w,"Rectangle");
list.add(rectangle[cf]);
cf++;}
}
else if(a[i]==3)
{
a1=sc.nextDouble();
b1=sc.nextDouble();
c1=sc.nextDouble();
triangle[sj]=new Triangle(a1,b1,c1,"Triangle");
if(a1<=0||b1<=0||c1<=0||(a1+b1)<=c1||(c1+b1)<=a1||(a1+c1)<=b1)
{
m++;
break;
}
else {
list.add(triangle[sj]);
sj++;}
}
else
{
a1=sc.nextDouble();
b1=sc.nextDouble();
c1=sc.nextDouble();
if(a1<=0||b1<=0||c1<=0)
{
m++;
break;
}
else {
trap[ti]=new Trap(a1,b1,c1,"Trapezoid");
list.add(trap[ti]);
ti++;}
}
}
if(m==0) {
System.out.println("The original list:");
for(int i=0;i<c-1;i++)
{
System.out.printf(list.get(i).name);
System.out.printf(":%.2f",list.get(i).getArea());
System.out.printf(" ");
sum=sum+list.get(i).getArea();
}
System.out.println();
System.out.println("The sorted list:");
Collections.sort(list);
for(int i=0;i<c-1;i++)
{
System.out.printf(list.get(i).name);
System.out.printf(":%.2f",list.get(i).getArea());
System.out.printf(" ");
}
System.out.println();
System.out.printf("Sum of area:%.2f",sum);
}
else
System.out.println("Wrong Format");
}
else
{
System.out.println("Wrong Format");
}
}
}
class shape implements Comparable
{ String name;
public shape(String s)
{
this.name=s;
}
/*public shape(double a,double b,double c)
{
this.a=a;
this.b=b;
this.c=c;
}
public shape(double l,double w)
{
this.l=l;
this.w=w;
}*/
public double getArea()
{
return 1.0;
}
public int compareTo(Object o)
{ shape k=(shape) o;
if(this.getArea()<k.getArea())
{
return 1;
}
else
return -1;
}
}
class Circle extends shape
{ double radious;
public Circle(double r,String s)
{ super(s);
radious=r;
}
public double getArea()
{
return this.radious*this.radious*Math.PI;
}
}
class Rectangle extends shape{
double l,w;
public Rectangle(double l,double w,String s)
{ super(s);
this.l=l;
this.w=w;
}
public double getArea() {
return this.l*this.w;
}
}
class Triangle extends shape
{
double a,b,c;
public Triangle(double a,double b,double c,String s)
{
super(s);
this.a=a;
this.b=b;
this.c=c;
}
public double getArea()
{
return Math.sqrt((a+b+c)*(a+b-c)*(a+c-b)*(b+c-a))/4.0;
}
public boolean panduan() {
if((this.a+this.b)>this.c&&(this.c+this.b)>this.a&&(this.a+this.c)>this.b)
return true;
else
return false;
}
}
class Trap extends shape
{
double a,b,c;
public Trap(double a,double b,double c,String s)
{ super(s);
this.a=a;
this.b=b;
}
public double getArea()
{
return (this.a+this.b)*this.c/2.0;
}
}
JAVA这门课可以算得上是大学以来最重要的课之一了,因为这一门课是我们在大学以来接触到的第一门真正意义上的专业课,这一门课学的好或者歹直接决定了我们毕业后所找工作的好坏。接触这门课的这一个学期说实话我觉得很累,因为可以算的上是连轴转并且没有任何休息的时间。每个礼拜都要完成的作业,然后必须要自学很多东西,有些东西难度比较大,作业量也比较多,这就让我们必须要强迫自己去学习。虽然学习这门课是比较累的,但是我觉得我的收获还是比较大的,JAVA的基本内容我大部分能够搞懂搞清楚,比如封装性、继承性以及多态性这些东西基本上在多次练习的情况下都能够使用;另一个学到的比较使用的东西就是正则表达式,正则表达式在做针对字符串的操作时是非常方便的,能够提前学对以后肯定是有非常大的帮助的。
同时除了课本上的知识我还学到了一些课本上没有的东西,比如咬牙坚持,很多次有过崩溃甚至放弃的情绪,但是想了一下这门课程的重要性以及我自己的未来还是一次又一次的咬牙坚持;学会了和他人去交流,很多次题目比较难的时候,我都会私底下去问一下编程功底比较强的同学他们的思路是什么样的,然后我再拿我的思路和他们的思路去做比较,别人来问我的时候,我又可以获得一种新的想法,我觉得很好;最后一点我觉得我的自学能力获得了很大的提升,以前别的课我基本上都是跟着老师的脚步去学,基本没怎么自学过,到了JAVA课不懂得我回去网上查资料,去mooc上学,去问老师同学。我觉得这些收获不管是对现在还是对以后都是很宝贵的,我希望以后能将这些东西学以致用!
继承
继承的特性
1、子类拥有父类非 private 的属性、方法。
2、子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
3、子类可以用自己的方式实现父类的方法。
4、继承可以使用 extends 和 implements 这两个关键字来实现继承
5、子类是不能直接访问父类中的私有成员,但子类可以调用父类中的非私有方法,但是不能直接调用父类中的私有成员。
类的继承格式
在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的
面向对象程序设计的特性
1、封装性
2、继承性
3、多态性
7-3 ATM机类结构设计(一) (100 分)
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main (String[] args) {
Scanner input = new Scanner(System.in);
BankCard bankCard = new BankCard();
Bank bank1 = new Bank("中国建设银行");
Bank bank2 = new Bank("中国工商银行");
Bank.bankArrayList.add(bank1);
Bank.bankArrayList.add(bank2);
bank1.atmsUnderBank.add(new ATM("01",bank1));
bank1.atmsUnderBank.add(new ATM("02",bank1));
bank1.atmsUnderBank.add(new ATM("03",bank1));
bank1.atmsUnderBank.add(new ATM("04",bank1));
bank2.atmsUnderBank.add(new ATM("05",bank2));
bank2.atmsUnderBank.add(new ATM("06",bank2));
User user1 = new User("杨过");
User user2 = new User("郭靖");
User user3 = new User("张无忌");
User user4 = new User("韦小宝");
Account account1 = new Account("3217000010041315709",10000,bank1,user1);
Account account2 = new Account("3217000010041315715",10000,bank1,user1);
Account account3 = new Account("3217000010051320007",10000,bank1,user2);
Account account4 = new Account("3222081502001312389",10000,bank2,user3);
Account account5 = new Account("3222081502001312390",10000,bank2,user3);
Account account6 = new Account("3222081502001312399",10000,bank2,user3);
Account account7 = new Account("3222081502051320785",10000,bank2,user4);
Account account8 = new Account("3222081502051320786",10000,bank2,user4);
BankCard bankCard1 = new BankCard("6217000010041315709","88888888",account1);
BankCard bankCard2 = new BankCard("6217000010041315715","88888888",account1);
BankCard bankCard3 = new BankCard("6217000010041315718","88888888",account2);
BankCard bankCard4 = new BankCard("6217000010051320007","88888888",account3);
BankCard bankCard5 = new BankCard("6222081502001312389","88888888",account4);
BankCard bankCard6 = new BankCard("6222081502001312390","88888888",account5);
BankCard bankCard7 = new BankCard("6222081502001312399","88888888",account6);
BankCard bankCard8 = new BankCard("6222081502001312400","88888888",account6);
BankCard bankCard9 = new BankCard("6222081502051320785","88888888",account7);
BankCard bankCard10 = new BankCard("6222081502051320786","88888888",account8);
bank1.accountUnderBank.add(account1);
bank1.accountUnderBank.add(account2);
bank1.accountUnderBank.add(account3);
bank2.accountUnderBank.add(account4);
bank2.accountUnderBank.add(account5);
bank2.accountUnderBank.add(account6);
bank2.accountUnderBank.add(account7);
bank2.accountUnderBank.add(account8);
user1.accountsUnderUser.add(account1);
user1.accountsUnderUser.add(account2);
user2.accountsUnderUser.add(account3);
user3.accountsUnderUser.add(account4);
user3.accountsUnderUser.add(account5);
user3.accountsUnderUser.add(account6);
user4.accountsUnderUser.add(account7);
user4.accountsUnderUser.add(account8);
account1.cards.put(bankCard1.getBankCardID(),bankCard1);
account1.cards.put(bankCard2.getBankCardID(),bankCard2);
account2.cards.put(bankCard3.getBankCardID(),bankCard3);
account3.cards.put(bankCard4.getBankCardID(),bankCard4);
account4.cards.put(bankCard5.getBankCardID(),bankCard5);
account5.cards.put(bankCard6.getBankCardID(),bankCard6);
account6.cards.put(bankCard7.getBankCardID(),bankCard7);
account6.cards.put(bankCard8.getBankCardID(),bankCard8);
account7.cards.put(bankCard9.getBankCardID(),bankCard9);
account8.cards.put(bankCard10.getBankCardID(),bankCard10);
// account1.bankCardArrayList.add(bankCard2);
// account2.bankCardArrayList.add(bankCard3);
// account3.bankCardArrayList.add(bankCard4);
// account4.bankCardArrayList.add(bankCard5);
// account5.bankCardArrayList.add(bankCard6);
// account6.bankCardArrayList.add(bankCard7);
// account6.bankCardArrayList.add(bankCard8);
// account7.bankCardArrayList.add(bankCard9);
// account8.bankCardArrayList.add(bankCard10);
for (Bank bank : Bank.bankArrayList) {
ATM.atmArrayList.addAll(bank.atmsUnderBank);
Account.accountArrayList.addAll(bank.accountUnderBank) ;
for ( Account account : bank.accountUnderBank) {
BankCard.bankCardArrayList.addAll(account.cards.values());
}
}
String str = input.nextLine();
while (!str.equals("#")){
String[] splits = str.split("\\s+");
DealOperations dealOperations = new DealOperations(splits);
dealOperations.deal();
str = input.nextLine();
}
}
}
class DealOperations {
private String userName = "";
private String accountBankName = "";
private double balance;
private String atmBankName = "";
private String[] str;
Account account = new Account();
ATM atm = new ATM();
public DealOperations(String[] str) {
this.str = str;
}
public boolean validateOfBankCardID () {
for (Account account : account.accountArrayList) {
if (account.cards.containsKey(str[0])) {
userName = account.getUser().getUserName();
accountBankName = account.getBank().getBankName();
balance = account.getBalance();
return true;
}
}
return false;
}
public boolean validateATMID () {
for (ATM atm : atm.atmArrayList) {
if (atm.getAtmID().equals(str[2])) {
atmBankName = atm.getBank().getBankName();
return true;
}
}
return false;
}
public boolean validatePassword () {
for (BankCard bankCard : BankCard.bankCardArrayList) {
if (bankCard.getBankCardID().equals(str[0]) && bankCard.getPassword().equals(str[1])) {
return true;
}
}
return false;
}
public void deal () {
if (!validateOfBankCardID()) {
System.out.println("Sorry,this card does not exist.");
System.exit(0);
}
if (str.length == 1)
System.out.println("¥"+String.format("%.2f",balance));
else{
if (!validateATMID()) {
System.out.println("Sorry,the ATM's id is wrong.");
System.exit(0);
}
if (!validatePassword()) {
System.out.println("Sorry,your password is wrong.");
System.exit(0);
}
double newBalance = Double.parseDouble(str[3]);
if (newBalance > balance) {
System.out.println("Sorry,your account balance is insufficient.");
System.exit(0);
}
if (!atmBankName.equals(accountBankName)) {
System.out.println("Sorry,cross-bank withdrawal is not supported.");
System.exit(0);
}
if (newBalance > 0) {
System.out.print(userName+"在"+atmBankName+"的"+str[2]+"号ATM机上取款¥"+String.format("%.2f",newBalance));
balance = balance-newBalance;
System.out.println();
System.out.print("当前余额为¥"+String.format("%.2f",balance));
System.out.println();
}
else {
System.out.print(userName+"在"+atmBankName+"的"+str[2]+"号ATM机上存款¥"+String.format("%.2f",Math.abs(newBalance)));
balance = balance-newBalance;
System.out.println();
System.out.print("当前余额为¥"+String.format("%.2f",balance));
System.out.println();
}
}
}
}
class Bank {
private String bankName;
static ArrayList<Bank> bankArrayList = new ArrayList<>();
ArrayList<ATM> atmsUnderBank = new ArrayList<>();
ArrayList<Account> accountUnderBank = new ArrayList<>();
public Bank (String bankName) {
this.bankName = bankName;
}
public Bank() {
}
public String getBankName() {
return bankName;
}
}
class ATM {
private String atmID;
private Bank bank;
static ArrayList<ATM> atmArrayList = new ArrayList<>();
public ATM (String atmID,Bank bank) {
this.atmID = atmID;
this.bank = bank;
}
public ATM() {
}
public Bank getBank() {
return bank;
}
public String getAtmID() {
return atmID;
}
public void setAtmID(String atmID) {
this.atmID = atmID;
}
public void setBank(Bank bank) {
this.bank = bank;
}
}
class User {
private String userName;
ArrayList<User> userArrayList = new ArrayList<>();
ArrayList<Account> accountsUnderUser = new ArrayList<>();
public User (String userName) {
this.userName = userName;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
class Account {
private String accountID;
private double balance;
private Bank bank;
private User user;
static ArrayList<Account> accountArrayList = new ArrayList<>();
public Map<String,BankCard> cards = new HashMap<>();
public Account (String accountID,double balance,Bank bank,User user) {
this.accountID = accountID;
this.balance = balance;
this.bank = bank;
this.user = user;
}
public Account() {
}
public String getAccountID() {
return accountID;
}
public void setAccountID(String accountID) {
this.accountID = accountID;
}
public void setBank(Bank bank) {
this.bank = bank;
}
public Bank getBank() {
return bank;
}
public void setUser(User user) {
this.user = user;
}
public User getUser() {
return user;
}
public double getBalance() {
return balance;
}
}
class BankCard {
private String bankCardID;
private String password;
private Account account;
static ArrayList<BankCard> bankCardArrayList = new ArrayList<>();
public BankCard (String bankCardID,String password,Account account) {
this.bankCardID = bankCardID;
this.password = password;
this.account = account;
}
public BankCard() {
}
public void setBankCardID(String bankCardID) {
this.bankCardID = bankCardID;
}
public String getBankCardID() {
return bankCardID;
}
public Account getAccount() {
return account;
}
public void setAccount(Account account) {
this.account = account;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String toString () {
return bankCardID;
}
}
JAVA课程的最后一个阶段已经结束了。最后一个阶段的作业我也全部完成了,但是完成的却很艰难;在最后一个阶段的一个月里,JAVA课程的难度又再一次提高了。如果说JAVA前两个阶段是带领我去慢慢了解,熟悉了JAVA,那么最后一个阶段可以说是教我们如何去使用JAVA,去用JAVA去解决实际问题。并且让我们自己去设计解决方案去设计类图,让我们能够更好的去了解Java的例如可复用性可延展性这一类的特性。
课程建议
我觉得Java的教学模式很好,虽然学生会比较累,但是一个学期下来认认真真的听课完成PTA上的作业和学习通上的实验是真的可以学到东西的。
第一点就是希望在每次PTA作业结束之后,老师能够给出相应的源码,因为每一次PTA的作业过程中都能或多或少的遇到点问题,有些时候即使程序已经拿了满分,但是还是会有小疑惑。所以有这个意愿想搞懂,就希望老师能够在某一阶段结束后,将那一阶段的源码发出并且做出一些讲解让大家理解的更加透彻。
我觉得老师在PTA上放的那个讨论可以换成课堂讨论,因为PTA上的那个讨论呢功能很多同学不愿意在里面发表意见,然后如果每周能够抽个20分钟左右的课堂时间来进行讨论的话我觉得大家的积极性会高很多,同时对解决JAVA作业也有很大的帮助。
本学期的学习也即将结束了,这学期接触的Java编程语言也是和C语言不一样了,能够利用所学到的知识编写一些小程序,学习中难免会遇到一些困难,遇到困难要想办法解决,得到的提升才是有用的,图形界面自己编写一个记事本,用到的东西会比较的多,比较的繁琐,就要自己认真细致的去完成了,当然了,问题还是出现了蛮多的,总而言之,自己还是要多学多练,知识学了是自己的,还是得继续加油

浙公网安备 33010602011771号