济南做网站公司/yy直播
这里要用到一些面向对象的基本知识
目录
7-1 伪随机数
输入格式:
输出格式:
输入样例:
输出样例:
7-2 jmu-Java-03面向对象基础-01-构造方法与toString
1.编写无参构造函数:
2.编写有参构造函数
3.覆盖toString函数:
4.对每个属性生成setter/getter方法
5.main方法中
输入样例:
输出样例:
7-3 jmu-Java-03面向对象基础-02-构造方法与初始化块
1.定义一个Person类
2.定义类的初始化块
3.编写静态初始化块
4.编写main方法
思考
输入样例:
输出样例:
7-4 复数类的定义
输入格式:
输出格式:
输入样例:
输出样例:
7-5 jmu-Java-01入门-开根号
输入格式:
输出格式:
输入样例:
输出样例:
7-6 jmu-Java-01入门-取数字浮点数
输入格式:
输出格式:
输入样例:
输出样例:
7-7 日期类设计
输入格式:
输出格式:
输入样例1:
输出样例1:
输入样例2:
输出样例2:
输入样例3:
输出样例3:
输入样例4:
输出样例4:
7-8 jmu-Java-03面向对象基础-03-形状
1. 定义长方形类与圆形类Circle
2. main方法
输入样例:
输出样例:
7-9 jmu-Java-02基本语法-01-综合小测验
输入格式:
输出格式:
7-10 jmu-Java-02基本语法-04-动态数组
输出格式说明
输入样例:
输出样例:
7-11 jmu-Java-02基本语法-07-大整数相加
输入格式
输入样例:
输出样例:
7-12 jmu-Java-03面向对象基础-05-覆盖
1. 新建PersonOverride类
2. main方法
输入样例:
输出样例:
7-1 伪随机数
在java.util这个包里面提供了一个Random的类,我们可以新建一个Random的对象来产生随机数,他可以产生随机整数、随机float、随机double,随机long。Random的对象有两种构建方式:带种子和不带种子。不带种子的方式将会返回随机的数字,每次运行结果不一样。无论程序运行多少次,带种子方式构建的Random对象会返回一样的结果。
请编写程序,使用第一种方式构建Random对象,并完成下面输入输出要求。
输入格式:
在一行中输入3个不超过10000的正整数n,m,k。
输出格式:
在一行中输出以k为种子建立的Random对象产生的第n个0到m-1之间的伪随机数。
输入样例:
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面向对象基础-01-构造方法与toString
定义一个有关人的Person
类,内含属性:String name
、int age
、boolean gender
、int id
,所有的变量必须为私有(private
)。
注意:属性顺序请严格按照上述顺序依次出现。
1.编写无参构造函数:
- 打印"This is constructor"。
- 将name,age,gender,id按照
name,age,gender,id
格式输出
2.编写有参构造函数
依次对name,age,gender
赋值。
3.覆盖toString函数:
按照格式:类名 [name=, age=, gender=, id=]
输出。建议使用Eclipse自动生成.
4.对每个属性生成setter/getter方法
5.main方法中
- 首先从屏幕读取n,代表要创建的对象个数。
- 然后输入n行name age gender , 调用上面2编写的有参构造函数新建对象。
- 然后将刚才创建的所有对象
逆序
输出。 - 接下来使用无参构造函数新建一个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面向对象基础-02-构造方法与初始化块
1.定义一个Person类
属性:String name
, boolean gender
, int age
, int id
,所有的变量必须为私有(private)。
无参构造函数:Person()
, 功能:打印This is constructor 。
有参构造函数:Person(name, gender, age)
,功能:给属性赋值。
建议:使用Eclipse自动生成toString方法
2.定义类的初始化块
为Person类加入初始化块,在初始化块中对id
属性赋值,并且要保证每次的值比上次创建的对象的值+1
。然后在下一行打印This is initialization block, id is ...
其中...
是id的值。
提示:可为Person
类定义一个static
属性来记录所创建的对象个数。
3.编写静态初始化块
打印This is static initialization block
4.编写main方法
- 首先输入n,代表要创建的对象数量。
- 然后从控制台分别读取n行的
name age gender
, 并调用有参构造函数Person(name, age, gender)
新建对象 。 - 将创建好的n个对象逆序输出(即输出
toString()
方法)。 - 使用无参构造函数新建一个Person对象,然后直接打印该对象。
思考
初始化类与对象有几种方法,构造函数、初始化块、静态初始化块。这三种方法执行的先后顺序是什么?各执行几次。
输入样例:
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 复数类的定义
编写一个复数类,可以进行复数加法和减法运算。编写一个包含main方法的类测试该复数类。要求该复数类至少包含一个无参的构造方法和一个带参的构造方法;数据成员包括复数的实部和虚部,为double类型;包括两个方法,分别实现复数的加法和减法运算。测试代码如下:
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));
}
输入格式:
输入两个复数。输入为两行,每一行为一个复数的实部和虚部,用空格隔开。
输出格式:
输出复数加法和减法结果。输出为4行,第一行和第二行输出两个复数,第三行为两个复数的加法运算结果,第四行为减法运算结果。
输入样例:
在这里给出两组输入。例如:
1 2
3 4
-1 2
1 2
输出样例:
在这里给出相应的输出。例如:
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入门-开根号
使用逐步逼近法对给定数值x求开根号。
逐步逼近法说明:从0开始逐步累加步长值。
步长=0.0001,epsilon(误差)=0.0001
循环继续的条件:
平方值<x
且 |x-平方值| > epsilon
###说明与参考
- 数值输出保留6位小数,使用System.out.printf("%.6f\n")
- 求平方,参考Math.pow函数。
- 输入值<0时,返回Double.NaN
输入格式:
任意数值
输出格式:
对每一组输入,在一行中输出其开根号。保留6位小数
输入样例:
-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入门-取数字浮点数
本题目要求读入若干以回车结束的字符串表示的整数或者浮点数,然后将每个数中的所有数字全部加总求和。
输入格式:
每行一个整数或者浮点数。保证在浮点数范围内。
输出格式:
整数或者浮点数中的数字之和。题目保证和在整型范围内。
输入样例:
-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 日期类设计
参考题目3和日期相关的程序,设计一个类DateUtil,该类有三个私有属性year、month、day(均为整型数),其中,year∈[1820,2020] ,month∈[1,12] ,day∈[1,31] , 除了创建该类的构造方法、属性的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);//比较当前日期与date的大小(先后)
public boolean equalTwoDates(DateUtil date);//判断两个日期是否相等
public int getDaysofDates(DateUtil date);//求当前日期与date之间相差的天数
public String showDate();//以“year-month-day”格式返回日期值
应用程序共测试三个功能:
- 求下n天
- 求前n天
- 求两个日期相差的天数
注意:严禁使用Java中提供的任何与日期相关的类与方法,并提交完整源码,包括主类及方法(已提供,不需修改)
程序主方法如下:
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);} }
}
输入格式:
有三种输入方式(以输入的第一个数字划分[1,3]):
- 1 year month day n //测试输入日期的下n天
- 2 year month day n //测试输入日期的前n天
- 3 year1 month1 day1 year2 month2 day2 //测试两个日期之间相差的天数
输出格式:
- 当输入有误时,输出格式如下:
Wrong Format
- 当第一个数字为1且输入均有效,输出格式如下:
year1-month1-day1 next n days is:year2-month2-day2
- 当第一个数字为2且输入均有效,输出格式如下:
year1-month1-day1 previous n days is:year2-month2-day2
- 当第一个数字为3且输入均有效,输出格式如下:
The days between year1-month1-day1 and year2-month2-day2 are:值
输入样例1:
在这里给出一组输入。例如:
3 2014 2 14 2020 6 14
输出样例1:
在这里给出相应的输出。例如:
The days between 2014-2-14 and 2020-6-14 are:2312
输入样例2:
在这里给出一组输入。例如:
2 1834 2 17 7821
输出样例2:
在这里给出相应的输出。例如:
1834-2-17 previous 7821 days is:1812-9-19
输入样例3:
在这里给出一组输入。例如:
1 1999 3 28 6543
输出样例3:
在这里给出相应的输出。例如:
1999-3-28 next 6543 days is:2017-2-24
输入样例4:
在这里给出一组输入。例如:
0 2000 5 12 30
输出样例4:
在这里给出相应的输出。例如:
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面向对象基础-03-形状
1. 定义长方形类与圆形类Circle
长方形类-类名:Rectangle
,private属性:int width,length
圆形类-类名:Circle
,private属性:int radius
编写构造函数:
带参构造函数:Rectangle(width, length)
,Circle(radius)
编写方法:public int getPerimeter()
,求周长。public int getArea()
,求面积。toString
方法,使用Eclipse自动生成。
注意:
- 计算圆形的面积与周长,使用
Math.PI
。 - 求周长和面积时,应先计算出其值(带小数位),然后强制转换为
int
再返回。
2. main方法
- 输入2行长与宽,创建两个Rectangle对象放入相应的数组。
- 输入2行半径,创建两个Circle对象放入相应的数组。
- 输出1:上面2个数组中的所有对象的周长加总。
- 输出2:上面2个数组中的所有对象的面积加总。
- 最后需使用
Arrays.deepToString
分别输出上面建立的Rectangle数组与Circle数组
思考:如果初次做该题会发现代码冗余严重。使用继承、多态思想可以大幅简化上述代码。
输入样例:
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-综合小测验
运行程序后可以输入4个选项,分别为:fib,sort,search,getBirthDate
fib:根据输入n,打印斐波那契数列。比如输入:3,输出:1 1 2
sort:输入一串数字,然后进行排序并输出,注意数组元素输出的格式为使用[ ]
包括。提示:可直接使用函数Arrays相关方法处理输出。
search:如果找到返回所找到的位置,如果没找到,返回-1。提示: 可以先对数组排序,然后使用Arrays相关函数进行查找。
getBirthDate:输入n个身份证,然后把输入的n个身份号的年月日抽取出来,按年-月-日格式输出。
当输入不是这几个字符串(fib,sort,search,getBirthDate)的时候,显示exit
并退出程序。
注意: 在处理输入的时候,尽量只使用Scanner的nextLine()方法接收输入,不要将nextLine()与其它next方法混用,否则可能会出现行尾回车换行未处理影响下次输入的情况。
参考: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-动态数组
根据输入的n,打印n行乘法口诀表。
需要使用二维字符串数组存储乘法口诀表的每一项,比如存放1*1=1
.
为了保证程序中使用了二维数组,需在打印完乘法口诀表后使用Arrays.deepToString
打印二维数组中的内容。
提醒:格式化输出可使用String.format
或者System.out.printf
。
输出格式说明
- 每行末尾无空格。
- 每一项表达式之间(从第1个表达式的第1个字符算起到下一个表达式的首字符之间),共有包含7个字符。如
2*1=2 2*2=4
从第1个2开始到第二项``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-大整数相加
有若干大整数,需要对其进行求和操作。
输入格式
每行输入一个字符串代表一个大整数,连续输入若干行,当某行字符为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面向对象基础-05-覆盖
Java每个对象都继承自Object,都有equals、toString等方法。
现在需要定义PersonOverride
类并覆盖其toString
与equals
方法。
1. 新建PersonOverride类
a. 属性:String name
、int age
、boolean gender
,所有的变量必须为私有(private)。
b. 有参构造方法,参数为name, age, gender
c. 无参构造方法,使用this(name, age,gender)
调用有参构造方法。参数值分别为"default",1,true
d.toString()
方法返回格式为:name-age-gender
e. equals
方法需比较name、age、gender,这三者内容都相同,才返回true
.
2. main方法
2.1 输入n1,使用无参构造方法创建n1个对象,放入数组persons1。
2.2 输入n2,然后指定name age gender
。每创建一个对象都使用equals方法比较该对象是否已经在数组中存在,如果不存在,才将该对象放入数组persons2。
2.3 输出persons1数组中的所有对象
2.4 输出persons2数组中的所有对象
2.5 输出persons2中实际包含的对象的数量
2.5 使用System.out.println(Arrays.toString(PersonOverride.class.getConstructors()));
输出PersonOverride的所有构造方法。
提示:使用ArrayList
代替数组大幅复简化代码,请尝试重构你的代码。
输入样例:
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()));}
}
相关文章:

Java程序设计2023-第二次上机练习
这里要用到一些面向对象的基本知识 目录 7-1 伪随机数 输入格式: 输出格式: 输入样例: 输出样例: 7-2 jmu-Java-03面向对象基础-01-构造方法与toString 1.编写无参构造函数: 2.编写有参构造函数 3.覆盖toString函数: 4.对每个属性生成setter…...

如何在 uniapp 里面使用 pinia 数据持久化 (pinia-plugin-persistedstate)
想要在 uniapp 里面使用 pinia-plugin-persistedstate 会遇到的问题就是 uniapp里面没有浏览器里面的 sessionStorage localStorage 这些 api。 我们只需要替换掉 pinia-plugin-persistedstate 默认的储存 api 就可以了。使用 createPersistedState 重新创建一个实例, 把里面的…...

智慧矿山AI算法助力护帮板支护监测,提升安全与效率
在智慧矿山AI算法系列中,护帮板支护监测是保障矿山安全和提高生产效率的重要环节。护帮板作为矿山支护体系中的重要组成部分,在矿山生产中起到了关键的作用。那么,护帮板在哪种状态下是正常打开的呢?本文将对此进行介绍。 护帮板的…...

shell中的运算
目录 1.运算符号 2.运算指令 练习 1.运算符号 运算符号意义加法-减法*乘法/除法%除法后的余数**乘方自加一- -自减一<小于<小于等于>大于>大于等于等于ji ->jji*j*i->jj*i/j/i->jj/i%j%i->jj%i 2.运算指令 (()) //((a12))let //let a12 …...

【Java 进阶篇】解决Java Web应用中请求参数中文乱码问题
在Java Web应用开发中,处理请求参数时经常会遇到中文乱码的问题。当浏览器向服务器发送包含中文字符的请求参数时,如果不正确处理,可能会导致乱码问题,使得参数无法正确解析和显示。本文将详细探讨Java Web应用中请求参数中文乱码…...

51单片机-点阵屏led
代码配置 这样就能选择每一列哪个亮了 进行位选,段清零,这样就不会影响多列同时了 实现动画 1、使用文字摸提取文件,提取图案的16进制表示数组 offest作为偏移量,count作为计时。count10,偏移量加1,就相当于得到下一…...

Angular-03:组件模板
各种学习后的知识点整理归纳,非原创! 组件模板 ① 数据绑定② 属性绑定③ 类名绑定④ 样式绑定⑤ 事件绑定⑥ 获取原生DOM对象6.1 在组件模板中获取6.2 在组件类中获取 ⑦ 双向数据绑定⑧ 内容投影8.1 select选择器8.2 单槽投影8.3 多槽投影 ⑨ 安全操作…...

mysql 操作慢查询日志
1、mysql 批量插入300w数据 CREATE PROCEDURE test_insert_200w() BEGINDECLARE i INT;SET i1;WHILE i<3000000 DOINSERT INTO shop_user (password, telephone, username) VALUES (admin, 15510304125, concat(admin, i));SET ii1;END WHILE; END; //执行sql call test_in…...

illuminate/database 使用 二
上一篇文章写怎么单独使用illuminate/database,这回讲下怎么整合到项目里使用。为此特意看了下laravel对其使用。本篇文章,参照laravel的使用,简单实现。 一 原理 laravel 里使用illuminate/config。 illuminate/config composer 地址&…...

二叉树的概念
文章目录 二叉树一、树的概念1.树形结构1.1. 树的特点:1.2 概念:1.3 树的表示形式 2.树的应用 二、二叉树1.二叉数的概念2.满二叉树3.完全二叉树4.二叉树的性质练习: 二叉树 一、树的概念 1.树形结构 1.1. 树的特点: 1.根节点没…...

SpringCloud之Eureka的学习【详细】
目录 服务架构演变 单体架构 分布式架构 分布式架构需要考虑的问题 微服务 架构比较 微服务技术对比 服务拆分注意事项 案例 服务远程调用 RestTemplate Eureka注册中心 RestTemplate存在的问题 服务调用考虑的问题 Eureka的作用 搭建EurekaServer 服务注册 …...

学习ftp
文章目录 一、FTP介绍二、两种模式(主动模式和被动模式)三、FTP配置文件详解四、实际场景举例五、黑白名单六、网络限制 一、FTP介绍 1.FTP(File Transfer Protocol)是一种应用广泛且古老的互联网文件传输协议。 2.主要应用于互联…...

Android笔记(九):Compose组件的状态(一)
在使用Compose定义UI界面时,可以发现界面的变换往往与Compose组件内部的状态相关,当状态值发生变化时,Compose构成的可组合的界面也会刷新发生相应的变化。将在本笔记中将对可组合项的状态的定义、状态提升、状态丢失和状态的保存进行简单介绍…...

3.2. onnx export multi_batch
前言 将onnx bs=1 修改为多batch操作 参考链接: https://www.cnblogs.com/tangjunjun/p/16500116.html https://blog.csdn.net/weixin_43863869/article/details/128638397?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault…...

探索低代码PaaS平台的优势与选择原因
PaaS是一种云产品,它为应用程序的开发和部署提供基础结构。它提供中间件、开发工具和人工智能来创建功能强大的应用程序,大多数PaaS服务都与存储和网络基础架构捆绑在一起,就像基础架构即服务(IaaS)一样,可…...

AD教程(一)工程组成及创建
AD教程(一)工程组成及创建 工程组成 原理图库 绘制电阻模型、芯片模型、电容模型等,即将元件模型绘制出来。 原理图 将绘制的原件模型放置到原理图中,然后再添加连接的导线、网络标号。器件和器件之间的连接关系,在原…...

SAP业务从ECC升级到SAP S/4HANA有哪些变化?有哪些功能得到增强?
SAP在2015年推出了新一代商务套件SAP S/4 HANA。 SAP S/4 HANA (全称SAP Business suite 4 SAP HANA),这款新产品完全构建于目前先进的内存平台SAP HANA 之上,同时采用现代设计理念,通过SAP Fiori 提供精彩的用户体验 (UX)。提供比ECC更强大的功能。S/4h…...

常用conda和pip命令总结
conda 环境相关命令 conda 新建环境命令 conda create -n env_name pythonx.xenv_name 是环境名,自己换成所要创建的虚拟环境的名字 pythonx.x 是版本号,比如3.7,3.8这样 查看conda环境下所有的虚拟环境 conda info -e conda env list两条…...

【计算机网络】路由器的工作原理
文章目录 输入端口处理和基于目的地转发交换结构输出端口处理排队问题参考资料 路由器的四个组件 输入端口(input port):执行物理层功能(input port 左边方框、output port 右边方框)、数据链路层功能(input/output port 中间方框…...

队列概念|循环队列的实现
前言 今天我们将学习循环队列实现,我们首先介绍队列的概念和结构,之后一步步讲解循环队列由来与实现。 一、队列的概念与结构 1、队列的概念 队列: 只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表。队列是…...

监控数据控中的数据表
背景: 在做一个项目的时候,每次代码分析的数据会写入到数据库,目前想实现当数据插入到数据库后,对新插入的数据进行监控解析。当有一个新纪录插入到数据表的时候,数据库可以自动解析新插入的数据记录。 思路如下&…...

进程替换..
1、单进程版 – 最简单的先看看程序替换 现象就是 1、我们用自己的进程封装了内置指令ls,并且代码中execl 后 printf 的after并没有打印出来。 2、谈进程替换的原理 单进程替换基本原理 上面例子中execl的做法非常简单粗暴,要调用ls,那么就把mycom…...

M1安装OpenPLC Editor
下载OpenPLC Editor for macOS.zip文件后,使用tar -zvxf命令解压,然后将"OpenPLC Editor"拖入到"应用程序"文件夹 右键点击"OpenPLC Editor",打开这个""文件,替换为以下内容 #!/bin/bash…...

STM32F10xx 存储器和总线架构
一、系统架构 在小容量、中容量和大容量产品 中,主系统由以下部分构成: 四个驱动单元 : Cotex-M3内核、DCode总线(D-bus)和系统总线(S-bus) 通用DMA1和通用DMA2 四个被动单元 内部SRAM 内部…...

并发编程
什么是并发编程? 并行:在同一个时间节点上,多个线程同时执行(是真正意义上的同时执行) 并发:一个时间段内,多个线程依次执行。 并发编程:在例如买票、抢购、秒杀等等场景下,有大量的请求访问…...

Lauterbach使用指南之RunTime功能
Lauterbach使用指南之RunTime功能 前言 首先,请问大家几个小小问题,你清楚: Lauterbach这个工具是干什么用的吗?在软件运行过程中如何测量两个运行point之间的runtime时间呢?Lauterbach的RunTime功能具体应当如何来操…...

GaussDB数据库管理系统介绍
1.GaussDB的发展 2.GaussDB的生态 内部: 云化自动化方案。通过数据库运行基础设施的云化将DBA(数据库管理员)和运维人员的日常工作 自动化。外部: 采用与数据库周边生态伙伴对接与认证的生态连接融合方案,解决开发者/DBA难获取、应用难对接等…...

使用docker部署lnmp多站点
1. 创建一个 Docker 网络 以便容器可以在同一网络上进行通信 docker network create lnmpnetwork2. 运行 MySQL 容器: 运行 MySQL 容器并将其连接到创建的网络。确保将 MySQL 的端口映射到宿主机上,以便您可以从宿主机访问数据库。 将mysql的配置和数…...

实例详解:Java使用JWT和Redis实现高效单点登录(SSO)
前言 单点登录(Single Sign-On,简称SSO)是一种身份验证和访问控制机制,允许用户使用一组凭证(如登录名和密码)登录到多个应用程序中,而无需为每个应用程序单独进行身份验证。用户只需要登录一次…...

SQL中使用ROLLUP和CUBE函数轻松生成汇总行
在数据分析和报表制作中,通常需要对数据进行汇总和分组,我们常用的就是GROUP BY汇总数据,当我们想按照不同维度汇总时,往往需要编写多个GROUP BY预计,而借助ROLLUP 和 CUBE 函数可以一次性生成子总计和总计行ÿ…...