蕪湖推廣公司網(wǎng)站排名軟件優(yōu)化
這里要用到一些面向?qū)ο蟮幕局R
目錄
7-1 偽隨機(jī)數(shù)
輸入格式:
輸出格式:
輸入樣例:
輸出樣例:
7-2 jmu-Java-03面向?qū)ο蠡A(chǔ)-01-構(gòu)造方法與toString?
1.編寫無參構(gòu)造函數(shù):
2.編寫有參構(gòu)造函數(shù)
3.覆蓋toString函數(shù):
4.對每個屬性生成setter/getter方法
5.main方法中
輸入樣例:
輸出樣例:
7-3 jmu-Java-03面向?qū)ο蠡A(chǔ)-02-構(gòu)造方法與初始化塊?
1.定義一個Person類
2.定義類的初始化塊
3.編寫靜態(tài)初始化塊
4.編寫main方法
思考
輸入樣例:
輸出樣例:
7-4 復(fù)數(shù)類的定義?
輸入格式:
輸出格式:
輸入樣例:
輸出樣例:
7-5 jmu-Java-01入門-開根號?
輸入格式:
輸出格式:
輸入樣例:
輸出樣例:
7-6 jmu-Java-01入門-取數(shù)字浮點(diǎn)數(shù)?
輸入格式:
輸出格式:
輸入樣例:
輸出樣例:
7-7 日期類設(shè)計?
輸入格式:
輸出格式:
輸入樣例1:
輸出樣例1:
輸入樣例2:
輸出樣例2:
輸入樣例3:
輸出樣例3:
輸入樣例4:
輸出樣例4:
7-8 jmu-Java-03面向?qū)ο蠡A(chǔ)-03-形狀?
1. 定義長方形類與圓形類Circle
2. main方法
輸入樣例:
輸出樣例:
7-9 jmu-Java-02基本語法-01-綜合小測驗(yàn)?
輸入格式:
輸出格式:
7-10 jmu-Java-02基本語法-04-動態(tài)數(shù)組?
輸出格式說明
輸入樣例:
輸出樣例:
7-11 jmu-Java-02基本語法-07-大整數(shù)相加?
輸入格式
輸入樣例:
輸出樣例:
7-12 jmu-Java-03面向?qū)ο蠡A(chǔ)-05-覆蓋?
1. 新建PersonOverride類
2. main方法
輸入樣例:
輸出樣例:
7-1 偽隨機(jī)數(shù)
在java.util這個包里面提供了一個Random的類,我們可以新建一個Random的對象來產(chǎn)生隨機(jī)數(shù),他可以產(chǎn)生隨機(jī)整數(shù)、隨機(jī)float、隨機(jī)double,隨機(jī)long。Random的對象有兩種構(gòu)建方式:帶種子和不帶種子。不帶種子的方式將會返回隨機(jī)的數(shù)字,每次運(yùn)行結(jié)果不一樣。無論程序運(yùn)行多少次,帶種子方式構(gòu)建的Random對象會返回一樣的結(jié)果。
請編寫程序,使用第一種方式構(gòu)建Random對象,并完成下面輸入輸出要求。
輸入格式:
在一行中輸入3個不超過10000的正整數(shù)n,m,k。
輸出格式:
在一行中輸出以k為種子建立的Random對象產(chǎn)生的第n個0到m-1之間的偽隨機(jī)數(shù)。
輸入樣例:
10 100 1000
輸出樣例:
50
import java.util.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.lang.*;public class Main {static PrintWriter out = new PrintWriter(System.out);static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));static Scanner cin = new Scanner(System.in);static Random rnd = new Random();static void solve() throws IOException{int n,m,k;n = cin.nextInt();m = cin.nextInt();k = cin.nextInt();rnd.setSeed(k);int res = 0;for(int i=0;i<n;i++){res = rnd.nextInt(m); }out.println(res);}public static void main(String [] args) throws IOException{solve();out.flush();}
}
7-2 jmu-Java-03面向?qū)ο蠡A(chǔ)-01-構(gòu)造方法與toString?
定義一個有關(guān)人的Person
類,內(nèi)含屬性:String name
、int age
、boolean gender
、int id
,所有的變量必須為私有(private
)。
注意:屬性順序請嚴(yán)格按照上述順序依次出現(xiàn)。
1.編寫無參構(gòu)造函數(shù):
- 打印"This is constructor"。
- 將name,age,gender,id按照
name,age,gender,id
格式輸出
2.編寫有參構(gòu)造函數(shù)
依次對name,age,gender
賦值。
3.覆蓋toString函數(shù):
按照格式:類名 [name=, age=, gender=, id=]
輸出。建議使用Eclipse自動生成.
4.對每個屬性生成setter/getter方法
5.main方法中
- 首先從屏幕讀取n,代表要創(chuàng)建的對象個數(shù)。
- 然后輸入n行name age gender , 調(diào)用上面2編寫的有參構(gòu)造函數(shù)新建對象。
- 然后將剛才創(chuàng)建的所有對象
逆序
輸出。 - 接下來使用無參構(gòu)造函數(shù)新建一個Person對象,并直接打印該對象。
輸入樣例:
3
a 11 false
b 12 true
c 10 false
輸出樣例:
Person [name=c, age=10, gender=false, id=0]
Person [name=b, age=12, gender=true, id=0]
Person [name=a, age=11, gender=false, id=0]
This is constructor
null,0,false,0
Person [name=null, age=0, gender=false, id=0]
import java.util.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.lang.*;class Person{private String name = null;private int age = 0;private boolean gender = false;private int id = 0; Person(){System.out.println("This is constructor");System.out.printf("%s,%d,%b,%d%n",name,age,gender,id);}Person(String _name,int _age,boolean _gender){this.name = _name;this.age = _age;this.gender = _gender;}public String toString(){System.out.println("Person [name="+this.name+", age="+this.age+", gender="+this.gender+", id="+this.id+"]");return "love jyy three thousand times";}
}public class Main {static PrintWriter out = new PrintWriter(System.out);static Scanner in = new Scanner(System.in);static void solve() throws IOException{int n = in.nextInt();Person ps[] = new Person[n];for(int i=0;i<n;i++){String name = in.next();int age = in.nextInt();boolean gender = in.nextBoolean();ps[i] = new Person(name,age,gender);}for(int i=n-1;i>=0;i--){ps[i].toString();}Person a = new Person();a.toString();}public static void main(String [] args) throws IOException{solve();}
}
7-3 jmu-Java-03面向?qū)ο蠡A(chǔ)-02-構(gòu)造方法與初始化塊?
1.定義一個Person類
屬性:String name
,?boolean gender
,?int age
,?int id
?,所有的變量必須為私有(private)。
無參構(gòu)造函數(shù):Person()
,?功能:打印This is constructor?。
有參構(gòu)造函數(shù):Person(name, gender, age)
?,功能:給屬性賦值。
建議:使用Eclipse自動生成toString方法
2.定義類的初始化塊
為Person類加入初始化塊,在初始化塊中對id
屬性賦值,并且要保證每次的值比上次創(chuàng)建的對象的值+1
。然后在下一行打印This is initialization block, id is ...
?其中...
是id的值。
提示:可為Person
類定義一個static
屬性來記錄所創(chuàng)建的對象個數(shù)。
3.編寫靜態(tài)初始化塊
打印This is static initialization block
4.編寫main方法
- 首先輸入n,代表要創(chuàng)建的對象數(shù)量。
- 然后從控制臺分別讀取n行的
name age gender
, 并調(diào)用有參構(gòu)造函數(shù)Person(name, age, gender)
新建對象 。 - 將創(chuàng)建好的n個對象逆序輸出(即輸出
toString()
方法)。 - 使用無參構(gòu)造函數(shù)新建一個Person對象,然后直接打印該對象。
思考
初始化類與對象有幾種方法,構(gòu)造函數(shù)、初始化塊、靜態(tài)初始化塊。這三種方法執(zhí)行的先后順序是什么?各執(zhí)行幾次。
輸入樣例:
3
a 11 false
b 12 true
c 10 false
輸出樣例:
This is static initialization block
This is initialization block, id is 0
This is initialization block, id is 1
This is initialization block, id is 2
Person [name=c, age=10, gender=false, id=2]
Person [name=b, age=12, gender=true, id=1]
Person [name=a, age=11, gender=false, id=0]
This is initialization block, id is 3
This is constructor
null,0,false,3
Person [name=null, age=0, gender=false, id=3]
import java.util.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.lang.*;class Person{private String name = null;private int age = 0;private boolean gender = false;private int id = 0; private static int flag = 0;Person(){System.out.println("This is constructor");System.out.printf("%s,%d,%b,%d%n",name,age,gender,id);}Person(String _name,int _age,boolean _gender){this.name = _name;this.age = _age;this.gender = _gender;}public String toString(){System.out.println("Person [name="+this.name+", age="+this.age+", gender="+this.gender+", id="+this.id+"]");return "love jyy three thousand times";}{id = flag++;System.out.println("This is initialization block, id is " + id);}static{System.out.println("This is static initialization block");}
}public class Main {static Scanner in = new Scanner(System.in);static void solve() throws IOException{int n = in.nextInt();Person ps[] = new Person[n];for(int i=0;i<n;i++){String name = in.next();int age = in.nextInt();boolean gender = in.nextBoolean();ps[i] = new Person(name,age,gender);}for(int i=n-1;i>=0;i--){ps[i].toString();}Person a = new Person();a.toString();}public static void main(String [] args) throws IOException{solve();}
}
7-4 復(fù)數(shù)類的定義?
編寫一個復(fù)數(shù)類,可以進(jìn)行復(fù)數(shù)加法和減法運(yùn)算。編寫一個包含main方法的類測試該復(fù)數(shù)類。要求該復(fù)數(shù)類至少包含一個無參的構(gòu)造方法和一個帶參的構(gòu)造方法;數(shù)據(jù)成員包括復(fù)數(shù)的實(shí)部和虛部,為double類型;包括兩個方法,分別實(shí)現(xiàn)復(fù)數(shù)的加法和減法運(yùn)算。測試代碼如下:
public static void main(String [] args){Complex a=new Complex();Complex b=new Complex();Scanner in=new Scanner(System.in);a.setRealPart(in.nextDouble());a.setImaginaryPart(in.nextDouble());b.setRealPart(in.nextDouble());b.setImaginaryPart(in.nextDouble());System.out.println(a);System.out.println(b);System.out.println(a.add(b));System.out.println(a.sub(b));
}
輸入格式:
輸入兩個復(fù)數(shù)。輸入為兩行,每一行為一個復(fù)數(shù)的實(shí)部和虛部,用空格隔開。
輸出格式:
輸出復(fù)數(shù)加法和減法結(jié)果。輸出為4行,第一行和第二行輸出兩個復(fù)數(shù),第三行為兩個復(fù)數(shù)的加法運(yùn)算結(jié)果,第四行為減法運(yùn)算結(jié)果。
輸入樣例:
在這里給出兩組輸入。例如:
1 2
3 4
-1 2
1 2
輸出樣例:
在這里給出相應(yīng)的輸出。例如:
1.0+2.0i
3.0+4.0i
4.0+6.0i
-2.0-2.0i
-1.0+2.0i
1.0+2.0i
4.0i
-2.0
import java.util.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.lang.*;class Complex{private double real = 0;private double imag = 0;public void setRealPart(double _real){this.real = _real;}public void setImaginaryPart(double _imag){this.imag = _imag;}public Complex add(Complex a){Complex tmp = new Complex();tmp.real = this.real + a.real;tmp.imag = this.imag + a.imag; return tmp;}public Complex sub(Complex a){Complex tmp = new Complex();tmp.real = this.real - a.real;tmp.imag = this.imag - a.imag; return tmp;}public String toString(){if(this.real == 0 && this.imag == 0){return "0";}else if(this.real == 0 ){return this.imag + "i";}else if(this.imag == 0){return this.real+"";}else if(this.imag > 0){return this.real + "+" + this.imag + "i";}else{return this.real + "" + this.imag + "i";}}
} public class Main {static Scanner in = new Scanner(System.in);static void solve() throws IOException{Complex a=new Complex();Complex b=new Complex();Scanner in=new Scanner(System.in);a.setRealPart(in.nextDouble());a.setImaginaryPart(in.nextDouble());b.setRealPart(in.nextDouble());b.setImaginaryPart(in.nextDouble());System.out.println(a);System.out.println(b);System.out.println(a.add(b));System.out.println(a.sub(b));}public static void main(String [] args) throws IOException{solve();}
}
7-5 jmu-Java-01入門-開根號?
使用逐步逼近法對給定數(shù)值x求開根號。
逐步逼近法說明:從0開始逐步累加步長值。
步長=0.0001,epsilon(誤差)=0.0001
循環(huán)繼續(xù)的條件:
平方值<x
?且?|x-平方值| > epsilon
###說明與參考
- 數(shù)值輸出保留6位小數(shù),使用System.out.printf("%.6f\n")
- 求平方,參考Math.pow函數(shù)。
- 輸入值<0時,返回Double.NaN
輸入格式:
任意數(shù)值
輸出格式:
對每一組輸入,在一行中輸出其開根號。保留6位小數(shù)
輸入樣例:
-1
0
0.5
0.36
1
6
100
131
輸出樣例:
NaN
0.000000
0.707100
0.600000
1.000000
2.449500
10.000000
11.445600
import java.util.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.lang.*;class sqrt{private double pre;public void setPre(double _pre){this.pre = _pre;}public double cal(){double res = 0;if(this.pre < 0){return -1;}while(true){if(res * res >= this.pre || Math.abs(this.pre - res*res) <0.0001){break;}res += 0.0001;} return res;}} public class Main {static Scanner in = new Scanner(System.in);static void solve() throws IOException{while(true){double num = in.nextDouble();sqrt t = new sqrt();t.setPre(num);Double res = t.cal();if(res == -1){System.out.println("NaN");}else{System.out.printf("%.6f\n",res);}}}public static void main(String [] args) throws IOException{solve();}
}
7-6 jmu-Java-01入門-取數(shù)字浮點(diǎn)數(shù)?
本題目要求讀入若干以回車結(jié)束的字符串表示的整數(shù)或者浮點(diǎn)數(shù),然后將每個數(shù)中的所有數(shù)字全部加總求和。
輸入格式:
每行一個整數(shù)或者浮點(diǎn)數(shù)。保證在浮點(diǎn)數(shù)范圍內(nèi)。
輸出格式:
整數(shù)或者浮點(diǎn)數(shù)中的數(shù)字之和。題目保證和在整型范圍內(nèi)。
輸入樣例:
-123.01
234
輸出樣例:
7
9
import java.util.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.lang.*;public class Main {static Scanner in = new Scanner(System.in);static void solve() throws IOException{while(true){String s = in.nextLine();int res = 0;for(int i=0;i<s.length();i++){if(s.charAt(i)>='0' && s.charAt(i)<='9'){res += (int)(s.charAt(i) - '0');}}System.out.println(res);}}public static void main(String [] args) throws IOException{solve();}
}
7-7 日期類設(shè)計?
參考題目3和日期相關(guān)的程序,設(shè)計一個類DateUtil,該類有三個私有屬性year、month、day(均為整型數(shù)),其中,year∈[1820,2020] ,month∈[1,12] ,day∈[1,31] , 除了創(chuàng)建該類的構(gòu)造方法、屬性的getter及setter方法外,需要編寫如下方法:
public boolean checkInputValidity();//檢測輸入的年、月、日是否合法
public boolean isLeapYear(int year);//判斷year是否為閏年
public DateUtil getNextNDays(int n);//取得year-month-day的下n天日期
public DateUtil getPreviousNDays(int n);//取得year-month-day的前n天日期
public boolean compareDates(DateUtil date);//比較當(dāng)前日期與date的大小(先后)
public boolean equalTwoDates(DateUtil date);//判斷兩個日期是否相等
public int getDaysofDates(DateUtil date);//求當(dāng)前日期與date之間相差的天數(shù)
public String showDate();//以“year-month-day”格式返回日期值
應(yīng)用程序共測試三個功能:
- 求下n天
- 求前n天
- 求兩個日期相差的天數(shù)
注意:嚴(yán)禁使用Java中提供的任何與日期相關(guān)的類與方法,并提交完整源碼,包括主類及方法(已提供,不需修改)
程序主方法如下:
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner input = new Scanner(System.in);int year = 0;int month = 0;int day = 0;int choice = input.nextInt();if (choice == 1) { // test getNextNDays methodint m = 0;year = Integer.parseInt(input.next());month = Integer.parseInt(input.next());day = Integer.parseInt(input.next());DateUtil date = new DateUtil(year, month, day);if (!date.checkInputValidity()) {System.out.println("Wrong Format");System.exit(0);}m = input.nextInt();if (m < 0) {System.out.println("Wrong Format");System.exit(0);}System.out.print(date.getYear() + "-" + date.getMonth() + "-" + date.getDay() + " next " + m + " days is:");System.out.println(date.getNextNDays(m).showDate());} else if (choice == 2) { // test getPreviousNDays methodint n = 0;year = Integer.parseInt(input.next());month = Integer.parseInt(input.next());day = Integer.parseInt(input.next());DateUtil date = new DateUtil(year, month, day);if (!date.checkInputValidity()) {System.out.println("Wrong Format");System.exit(0);}n = input.nextInt();if (n < 0) {System.out.println("Wrong Format");System.exit(0);}System.out.print(date.getYear() + "-" + date.getMonth() + "-" + date.getDay() + " previous " + n + " days is:");System.out.println(date.getPreviousNDays(n).showDate());} else if (choice == 3) { //test getDaysofDates methodyear = Integer.parseInt(input.next());month = Integer.parseInt(input.next());day = Integer.parseInt(input.next());int anotherYear = Integer.parseInt(input.next());int anotherMonth = Integer.parseInt(input.next());int anotherDay = Integer.parseInt(input.next());DateUtil fromDate = new DateUtil(year, month, day);DateUtil toDate = new DateUtil(anotherYear, anotherMonth, anotherDay);if (fromDate.checkInputValidity() && toDate.checkInputValidity()) {System.out.println("The days between " + fromDate.showDate() + " and " + toDate.showDate() + " are:"+ fromDate.getDaysofDates(toDate));} else {System.out.println("Wrong Format");System.exit(0);}}else{System.out.println("Wrong Format");System.exit(0);} }
}
輸入格式:
有三種輸入方式(以輸入的第一個數(shù)字劃分[1,3]):
- 1 year month day n //測試輸入日期的下n天
- 2 year month day n //測試輸入日期的前n天
- 3 year1 month1 day1 year2 month2 day2 //測試兩個日期之間相差的天數(shù)
輸出格式:
- 當(dāng)輸入有誤時,輸出格式如下:
Wrong Format
- 當(dāng)?shù)谝粋€數(shù)字為1且輸入均有效,輸出格式如下:
year1-month1-day1 next n days is:year2-month2-day2
- 當(dāng)?shù)谝粋€數(shù)字為2且輸入均有效,輸出格式如下:
year1-month1-day1 previous n days is:year2-month2-day2
- 當(dāng)?shù)谝粋€數(shù)字為3且輸入均有效,輸出格式如下:
The days between year1-month1-day1 and year2-month2-day2 are:值
輸入樣例1:
在這里給出一組輸入。例如:
3 2014 2 14 2020 6 14
輸出樣例1:
在這里給出相應(yīng)的輸出。例如:
The days between 2014-2-14 and 2020-6-14 are:2312
輸入樣例2:
在這里給出一組輸入。例如:
2 1834 2 17 7821
輸出樣例2:
在這里給出相應(yīng)的輸出。例如:
1834-2-17 previous 7821 days is:1812-9-19
輸入樣例3:
在這里給出一組輸入。例如:
1 1999 3 28 6543
輸出樣例3:
在這里給出相應(yīng)的輸出。例如:
1999-3-28 next 6543 days is:2017-2-24
輸入樣例4:
在這里給出一組輸入。例如:
0 2000 5 12 30
輸出樣例4:
在這里給出相應(yīng)的輸出。例如:
Wrong Format
import java.util.Scanner;class DateUtil{private int year;private int month;private int day;public DateUtil(){}public DateUtil(int _year,int _month,int _day){this.year = _year;this.month = _month;this.day = _day;}public int getDay(){return this.day;}public int getYear(){return this.year;}public int getMonth(){return this.month;}public boolean checkInputValidity(){if(year <= 2020 && year >= 1820 && month >= 1 && month <= 12 && day >= 1 && day <= 31){if(day <= daysInMonth(year,month)){return true;}}return false;}public boolean isLeapYear(int _year){if(_year % 4 ==0 && _year % 100 != 0 || _year % 400 ==0){return true;}return false;}public DateUtil getNextNDays(int n){int _day = day;int _month = month;int _year = year;int[] daysInMonth = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};if (isLeapYear(_year)) {daysInMonth[2] = 29;}for (int i = 0; i < n; i++) {_day++;if (_day > daysInMonth[_month]) {_day = 1;_month++;if (_month > 12) {_month = 1;_year++;daysInMonth[2] = isLeapYear(_year) ? 29 : 28;}}}// _day += n;// while (_day > daysInMonth[_month]) {// _day -= daysInMonth[_month];// _month++;// if (_month > 12) {// _month = 1;// _year++;// daysInMonth[2] = isLeapYear(_year) ? 29 : 28;// }// }DateUtil res = new DateUtil(_year,_month,_day);return res;}public DateUtil getPreviousNDays(int n){int _day = day;int _month = month;int _year = year;int[] daysInMonth = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};if (isLeapYear(_year)) {daysInMonth[2] = 29;}for (int i = 0; i < n; i++) {_day--;if (_day == 0) {_month--;if (_month == 0) {_month = 12;_year--;daysInMonth[2] = isLeapYear(_year) ? 29 : 28;}_day = daysInMonth[_month];}}// _day -= n;// while (_day < 1) {// _month --;// if (_month < 1) {// _month = 12;// _year--;// daysInMonth[2] = isLeapYear(_year) ? 29 : 28;// }// _day += daysInMonth[_month];// }DateUtil res = new DateUtil(_year,_month,_day);return res;}public int daysInMonth(int _year, int _month) {int[] daysInMonth = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};if (isLeapYear(_year) && _month == 2) {return 29;}return daysInMonth[_month]; }public int getDaysofDates(DateUtil date){int year1 = this.year;int year2 = date.year;int day1 = this.day;int day2 = date.day;int month1 = this.month;int month2 = date.month;if (year1 > year2 || (year1 == year2 && month1 > month2) || (year1 == year2 && month1 == month2 && day1 > day2)) {int tempYear = year1;int tempMonth = month1;int tempDay = day1;year1 = year2;month1 = month2;day1 = day2;year2 = tempYear;month2 = tempMonth;day2 = tempDay;}int daysDifference = 0;for (int year = year1; year < year2; year++) {daysDifference += isLeapYear(year) ? 366 : 365;}daysDifference += dayOfYear(year2, month2, day2);daysDifference -= dayOfYear(year1, month1, day1);return daysDifference;}public int dayOfYear(int _year, int _month, int _day) {int[] daysInMonth = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};if (isLeapYear(_year)) {daysInMonth[2] = 29;}int dayOfYear = 0;for (int i = 1; i < _month; i++) {dayOfYear += daysInMonth[i];}dayOfYear += _day;return dayOfYear;}public String showDate(){return year + "-" + month + "-" + day;}}public class Main {public static void main(String[] args) {Scanner input = new Scanner(System.in);int year = 0;int month = 0;int day = 0;int choice = input.nextInt();if (choice == 1) { // test getNextNDays methodint m = 0;year = Integer.parseInt(input.next());month = Integer.parseInt(input.next());day = Integer.parseInt(input.next());DateUtil date = new DateUtil(year, month, day);if (!date.checkInputValidity()) {System.out.println("Wrong Format");System.exit(0);}m = input.nextInt();if (m < 0) {System.out.println("Wrong Format");System.exit(0);}System.out.print(date.getYear() + "-" + date.getMonth() + "-" + date.getDay() + " next " + m + " days is:");System.out.println(date.getNextNDays(m).showDate());} else if (choice == 2) { // test getPreviousNDays methodint n = 0;year = Integer.parseInt(input.next());month = Integer.parseInt(input.next());day = Integer.parseInt(input.next());DateUtil date = new DateUtil(year, month, day);if (!date.checkInputValidity()) {System.out.println("Wrong Format");System.exit(0);}n = input.nextInt();if (n < 0) {System.out.println("Wrong Format");System.exit(0);}System.out.print(date.getYear() + "-" + date.getMonth() + "-" + date.getDay() + " previous " + n + " days is:");System.out.println(date.getPreviousNDays(n).showDate());} else if (choice == 3) { //test getDaysofDates methodyear = Integer.parseInt(input.next());month = Integer.parseInt(input.next());day = Integer.parseInt(input.next());int anotherYear = Integer.parseInt(input.next());int anotherMonth = Integer.parseInt(input.next());int anotherDay = Integer.parseInt(input.next());DateUtil fromDate = new DateUtil(year, month, day);DateUtil toDate = new DateUtil(anotherYear, anotherMonth, anotherDay);if (fromDate.checkInputValidity() && toDate.checkInputValidity()) {System.out.println("The days between " + fromDate.showDate() + " and " + toDate.showDate() + " are:"+ fromDate.getDaysofDates(toDate));} else {System.out.println("Wrong Format");System.exit(0);}}else{System.out.println("Wrong Format");System.exit(0);} }
}
7-8 jmu-Java-03面向?qū)ο蠡A(chǔ)-03-形狀?
1. 定義長方形類與圓形類Circle
長方形類-類名:Rectangle
,private屬性:int width,length
圓形類-類名:Circle
,private屬性:int radius
編寫構(gòu)造函數(shù):
帶參構(gòu)造函數(shù):Rectangle(width, length)
,Circle(radius)
編寫方法:public int getPerimeter()
,求周長。public int getArea()
,求面積。toString
方法,使用Eclipse自動生成。
注意:
- 計算圓形的面積與周長,使用
Math.PI
。 - 求周長和面積時,應(yīng)先計算出其值(帶小數(shù)位),然后強(qiáng)制轉(zhuǎn)換為
int
再返回。
2. main方法
- 輸入2行長與寬,創(chuàng)建兩個Rectangle對象放入相應(yīng)的數(shù)組。
- 輸入2行半徑,創(chuàng)建兩個Circle對象放入相應(yīng)的數(shù)組。
- 輸出1:上面2個數(shù)組中的所有對象的周長加總。
- 輸出2:上面2個數(shù)組中的所有對象的面積加總。
- 最后需使用
Arrays.deepToString
分別輸出上面建立的Rectangle數(shù)組與Circle數(shù)組
思考:如果初次做該題會發(fā)現(xiàn)代碼冗余嚴(yán)重。使用繼承、多態(tài)思想可以大幅簡化上述代碼。
輸入樣例:
1 2
3 4
7
1
輸出樣例:
69
170
[Rectangle [width=1, length=2], Rectangle [width=3, length=4]]
[Circle [radius=7], Circle [radius=1]]
import java.util.*;class Rectangle{private int width;private int length;public Rectangle(){}public Rectangle(int _width,int _length){this.length = _length;this.width = _width;}public int getPerimeter(){return (length + width)*2;}public int getArea(){return length * width;}public String toString(){return "Rectangle "+ "[width=" + this.width +", length=" + this.length +"]"; }
}class Circle{private int radius;public Circle(){}public Circle(int _radius){this.radius = _radius;}public int getPerimeter(){double res = radius * 2 * Math.PI; return (int) res;}public int getArea(){double res = radius * radius * Math.PI;return (int) res;}public String toString(){return "Circle " + "[radius=" + this.radius + "]"; }
}public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int a,b;Rectangle r[] = new Rectangle[2];a = in.nextInt();b = in.nextInt();r[0] = new Rectangle(a,b);a = in.nextInt();b = in.nextInt();r[1] = new Rectangle(a,b);Circle c[] = new Circle[2];int radius = in.nextInt();c[0] = new Circle(radius);radius = in.nextInt();c[1] = new Circle(radius);int peri = r[0].getPerimeter() + r[1].getPerimeter() + c[0].getPerimeter() + c[1].getPerimeter();int area = r[0].getArea() + r[1].getArea() + c[0].getArea() + c[1].getArea();System.out.println(peri); System.out.println(area); System.out.println(Arrays.deepToString(r));System.out.println(Arrays.deepToString(c));}
}
7-9 jmu-Java-02基本語法-01-綜合小測驗(yàn)?
運(yùn)行程序后可以輸入4個選項(xiàng),分別為:fib,sort,search,getBirthDate
fib:根據(jù)輸入n,打印斐波那契數(shù)列。比如輸入:3,輸出:1 1 2
sort:輸入一串?dāng)?shù)字,然后進(jìn)行排序并輸出,注意數(shù)組元素輸出的格式為使用[ ]
包括。提示:可直接使用函數(shù)Arrays相關(guān)方法處理輸出。
search:如果找到返回所找到的位置,如果沒找到,返回-1。提示:?可以先對數(shù)組排序,然后使用Arrays相關(guān)函數(shù)進(jìn)行查找。
getBirthDate:輸入n個身份證,然后把輸入的n個身份號的年月日抽取出來,按年-月-日格式輸出。
當(dāng)輸入不是這幾個字符串(fib,sort,search,getBirthDate)的時候,顯示exit
并退出程序。
注意:?在處理輸入的時候,盡量只使用Scanner的nextLine()方法接收輸入,不要將nextLine()與其它next方法混用,否則可能會出現(xiàn)行尾回車換行未處理影響下次輸入的情況。
參考:jdk文檔的Arrays,String
輸入格式:
fib
3
sort
-1 10 3 2 5
search
-1
search
0
getBirthDate
1
330226196605054190
e
輸出格式:
1 1 2
[-1, 2, 3, 5, 10]
0
-1
1966-05-05
exit
import java.util.*;public class Main {static Scanner in = new Scanner(System.in);static int num[] = new int[1];public static void sort(){String numString[] = in.nextLine().split(" ");num = new int[numString.length];for(int i=0; i<numString.length;i++){num[i] = Integer.valueOf(numString[i]);}Arrays.sort(num);System.out.println(Arrays.toString(num));}public static void fib(){int n = in.nextInt();in.nextLine();int pre = 0;int now = 1;for(int i=0;i<n-1;i++){System.out.print(now + " ");int tmp = now;now += pre;pre = tmp;}System.out.println(now);}public static void getBirthDate(){int n = in.nextInt();in.nextLine();String s[] = new String[n];for(int i=0;i<n;i++){s[i] = in.nextLine();}for(int i=0;i<n;i++){System.out.println(s[i].substring(6,10) + "-" + s[i].substring(10,12) + "-" + s[i].substring(12,14));}}public static void search(){int n = in.nextInt();in.nextLine();int flag = 0;for (int i = 0; i < num.length; i++) {//System.out.println(num[i]);if (num[i] == n) {System.out.println(i);flag = 1;break;}}if (flag == 0){System.out.println(-1);}}public static void main(String[] args) {while(true){String op = in.nextLine();if(op.equals("sort")){sort();}else if(op.equals("search")){search();}else if(op.equals("fib")){fib();}else if(op.equals("getBirthDate")){getBirthDate();}else{System.out.println("exit");break;}}}
}
7-10 jmu-Java-02基本語法-04-動態(tài)數(shù)組?
根據(jù)輸入的n,打印n行乘法口訣表。
需要使用二維字符串?dāng)?shù)組存儲乘法口訣表的每一項(xiàng),比如存放1*1=1
.
為了保證程序中使用了二維數(shù)組,需在打印完乘法口訣表后使用Arrays.deepToString
打印二維數(shù)組中的內(nèi)容。
提醒:格式化輸出可使用String.format
或者System.out.printf
。
輸出格式說明
- 每行末尾無空格。
- 每一項(xiàng)表達(dá)式之間(從第1個表達(dá)式的第1個字符算起到下一個表達(dá)式的首字符之間),共有包含7個字符。如
2*1=2 2*2=4
從第1個2開始到第二項(xiàng)``2*2=4`首字母之間,總共有7個字符(包含空格,此例中包含2個空格)。
輸入樣例:
2
5
輸出樣例:
1*1=1
2*1=2 2*2=4
[[1*1=1], [2*1=2, 2*2=4]]
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
[[1*1=1], [2*1=2, 2*2=4], [3*1=3, 3*2=6, 3*3=9], [4*1=4, 4*2=8, 4*3=12, 4*4=16], [5*1=5, 5*2=10, 5*3=15, 5*4=20, 5*5=25]]
import java.util.*;public class Main {static Scanner in = new Scanner(System.in);public static void main(String[] args) {while(in.hasNextInt()) {int n = in.nextInt();String[][] arr = new String[n][];for(int i=0;i<n;i++) {arr[i] = new String[i+1];for(int j = 0;j < i+1;j++) {arr[i][j] = (i+1)+"*"+(j+1)+"="+(i+1)*(j+1);if(j<i){System.out.printf("%-7s",arr[i][j]);}else if(j==i){System.out.printf("%s",arr[i][j]);}}System.out.println();}System.out.println(Arrays.deepToString(arr));}}
}
7-11 jmu-Java-02基本語法-07-大整數(shù)相加?
有若干大整數(shù),需要對其進(jìn)行求和操作。
輸入格式
每行輸入一個字符串代表一個大整數(shù),連續(xù)輸入若干行,當(dāng)某行字符為e或E時退出。
輸入樣例:
42846280183517070527831839425882145521227251250327
55121603546981200581762165212827652751691296897789
e
輸出樣例:
97967883730498271109594004638709798272918548148116
import java.math.*;
import java.util.*;public class Main {static Scanner in = new Scanner(System.in);public static void main(String[] args) {BigInteger res = new BigInteger("0");while(in.hasNext()) {String s = in.next();if(s.equals("e") || s.equals("E")){break;}BigInteger tmp = new BigInteger(s);res=res.add(tmp);}System.out.println(res);}
}
7-12 jmu-Java-03面向?qū)ο蠡A(chǔ)-05-覆蓋?
Java每個對象都繼承自O(shè)bject,都有equals、toString等方法。
現(xiàn)在需要定義PersonOverride
類并覆蓋其toString
與equals
方法。
1. 新建PersonOverride類
a.?屬性:String name
、int age
、boolean gender
,所有的變量必須為私有(private)。
b.?有參構(gòu)造方法,參數(shù)為name, age, gender
c.?無參構(gòu)造方法,使用this(name, age,gender)
調(diào)用有參構(gòu)造方法。參數(shù)值分別為"default",1,true
d.toString()
方法返回格式為:name-age-gender
e.?equals
方法需比較name、age、gender,這三者內(nèi)容都相同,才返回true
.
2. main方法
2.1 輸入n1,使用無參構(gòu)造方法創(chuàng)建n1個對象,放入數(shù)組persons1。
2.2 輸入n2,然后指定name age gender
。每創(chuàng)建一個對象都使用equals方法比較該對象是否已經(jīng)在數(shù)組中存在,如果不存在,才將該對象放入數(shù)組persons2。
2.3 輸出persons1數(shù)組中的所有對象
2.4 輸出persons2數(shù)組中的所有對象
2.5 輸出persons2中實(shí)際包含的對象的數(shù)量
2.5 使用System.out.println(Arrays.toString(PersonOverride.class.getConstructors()));
輸出PersonOverride的所有構(gòu)造方法。
提示:使用ArrayList
代替數(shù)組大幅復(fù)簡化代碼,請嘗試重構(gòu)你的代碼。
輸入樣例:
1
3
zhang 10 true
zhang 10 true
zhang 10 false
輸出樣例:
default-1-true
zhang-10-true
zhang-10-false
2
[public PersonOverride(), public PersonOverride(java.lang.String,int,boolean)]
import java.math.*;
import java.util.*;class PersonOverride{private int age;private String name;private boolean gender;public PersonOverride(){this("default",1,true);}public PersonOverride(String _name,int _age,boolean _gender){this.name = _name;this.age = _age;this.gender = _gender;}public String toString(){return this.name + "-" + this.age + "-" + this.gender;}public boolean equals(PersonOverride a){return this.name.equals(a.name) && this.age == a.age && this.gender == a.gender;}}
public class Main {static Scanner in = new Scanner(System.in);static int num[] = new int[1];public static void main(String[] args) {int n1 = in.nextInt();ArrayList<PersonOverride> person1 = new ArrayList<PersonOverride>();for(int i=0;i<n1;i++){person1.add(new PersonOverride());}int n2 = in.nextInt();ArrayList<PersonOverride> person2 = new ArrayList<PersonOverride>();String name = in.next();int age = in.nextInt();boolean gender = in.nextBoolean();PersonOverride tmp = new PersonOverride(name,age,gender);person2.add(tmp);for(int i=1;i<n2;i++){name = in.next();age = in.nextInt();gender = in.nextBoolean();tmp = new PersonOverride(name,age,gender);int flag = 1;for(int j=0;j<person2.size();j++){if(tmp.equals(person2.get(j))){flag = 0;}}if(flag == 1){person2.add(tmp);}}for(int i=0;i<n1;i++){System.out.println(person1.get(i).toString());}for(int i=0;i<person2.size();i++){System.out.println(person2.get(i).toString());}System.out.println(person2.size());System.out.println(Arrays.toString(PersonOverride.class.getConstructors()));}
}