目录
7-1 jmu-java-m05-自定义Judgeable接口
7-6 定义接口(Biology、Animal)、类(Person)、子类(Pupil)
7-7 利用正则表达式得到一段HTML文本中所有超链接对应的网址
7-1 jmu-java-m05-自定义Judgeable接口
分数 10
全屏浏览题目
切换布局
作者 郑如滨
单位 集美大学
该程序包含
Person类
属性:String name,boolean gender String birthdate。
构造方法:
-
无参构造方法(初始化名字为空字符串,gender为false)
-
两个参数的构造方法(name,gender)
-
三个参数的构造方法(name,gender,birthdate)
方法:getter/setter方法。
自定义接口Judgeable
方法:boolean judge(String)
main类
静态方法:int countPerson(List,Judgeable),功能为调用List集合中所有元素的judge方法,并统计其中返回true的元素个数。
main方法:
定义一个Person类集合,输入个数n,在下面依次输入n行的name,gender,biryhDate值生成person对象并添加进集合。
判断集合中name长度为5的数的个数,并输出,具体格式见输出样例。
判断集合中name长度为7的数的个数,并输出,具体格式见输出样例。
判断集合中name为空的个数,并输出,具体格式见输出样例。
输入格式:
输入一个整数number
根据number,输入number行的name,gender,birthDate
参考代码:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
class Person{
//在这里按要求定义person类
}
//在这里给出Judgeable接口的定义,入参为String,返回boolean。
public class Main {
public static int countPerson(List<Person> personList, Judgeable judger) {
int n = 0;
for (Person person : personList) {
if (judger.judge(person.getName()))
n++;
}
return n;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
List<Person> personList = new ArrayList<Person>();
String name;
boolean gender;
String birthDate;
//在这里输入个数
//循环创建person对象存入personList最后
//注意:当name输入为null时,将其置为空
int nameLength5 = countPerson(personList, new Judgeable() {
//Judgeable的实现代码
});
System.out.println("Number of person with nameLength == 5:"+nameLength5);
int nameLength7 = countPerson(personList, new Judgeable() {
//Judgeable的实现代码
});
System.out.println("Number of person with nameLength == 7:"+nameLength7);
int nameisnull = countPerson(personList, new Judgeable() {
//Judgeable的实现代码
});
System.out.println("Number of person with null name:"+nameisnull);
}
}
输出格式:
name长度为5的名字的个数
name长度为7的名字的个数
name为null的个数
输入样例:
9
Aaron false 1999-12-19
Abigale true 1998-09-01
null false 1992-11-21
Bonnie true 1990-11-11
null false 1994-07-08
Carol false 1982-12-04
Celeste true 1987-03-01
null false 1996-04-01
Chloe true 1993-02-16
注意:输入中的null表示该行所代表的对象的name属性为null。
输出样例:
Number of person with nameLength == 5:3
Number of person with nameLength == 7:2
Number of person with null name:3
**注意:**样例输出不包含检验代码输出,提交时请务必添加检验代码。
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
class Person{
private String name;
private boolean gender;
private String birthdate;
Person(){
gender=false;
}
Person(String name,boolean gender){
this.name=name;
this.gender=gender;
}
Person(String name,boolean gender,String birthdate){
this.name=name;
this.gender=gender;
this.birthdate=birthdate;
}
public void settername(String name){
this.name=name;
}
public void settergender(boolean gender){
this.gender=gender;
}
public void setterbirthdate(String birthdate){
this.birthdate=birthdate;
}
public String getName(){
return this.name;
}
public boolean gettergender(){
return this.gender;
}
public String getterbirthdate(){
return this.birthdate;
}
}
//在这里给出Judgeable接口的定义,入参为String,返回boolean。
interface Judgeable{
public abstract boolean judge(String a);
}
public class Main {
public static int countPerson(List<Person> personList, Judgeable judger) {
int n = 0;
for (Person person : personList) {
if (judger.judge(person.getName()))
n++;
}
return n;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
List<Person> personList = new ArrayList<Person>();
String name;
boolean gender;
String birthDate;
int n=sc.nextInt();
//循环创建person对象存入personList最后
for(int i=0;i<n;i++) {
personList.add(new Person(sc.next(),sc.nextBoolean(),sc.next()));
}
//注意:当name输入为null时,将其置为空
int nameLength5 = countPerson(personList, new Judgeable() {
//Judgeable的实现代码
public boolean judge(String s) {
return s.length() == 5;
}
});
System.out.println("Number of person with nameLength == 5:"+nameLength5);
int nameLength7 = countPerson(personList, new Judgeable() {
public boolean judge(String s) {
return s.length() == 7;
}
//Judgeable的实现代码
});
System.out.println("Number of person with nameLength == 7:"+nameLength7);
int nameisnull = countPerson(personList, new Judgeable() {
//Judgeable的实现代码
public boolean judge(String s) {
return s.equals("null");
}
});
System.out.println("Number of person with null name:"+nameisnull);
}
}
7-2 sdut-String-5 图书价格汇总(II)
分数 10
全屏浏览题目
切换布局
作者 周雪芹
单位 山东理工大学
假设图书馆中图书信息的格式为:
Java程序设计: 34;Web程序设计: 56;JSP程序设计:20
按要求输出每本图书的名称及价格,计算所有图书的总价格并输出。
输入格式:
读入一行图书信息。如:
Java程序设计: 34;Web程序设计: 56;JSP程序设计:20
提示:
(1)每本书的价格是整数,价格与下一本书的名字之间有一个中文;价格前可能有空格,可能没有。
(2)题目中的分号”;“和冒号”:“为全角字符。
输出格式:
分别输出每本图书的名称及价格,一本书占一行,形式为:书名--价格;
最后,输出计算的所有图书的总价格,形式为:总价格--总价格
输入样例:
Java程序设计:34 ;Web程序设计: 56;JSP程序设计:20
输出样例:
Java程序设计--34
Web程序设计--56
JSP程序设计--20
总价格--110
import java.util.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String st = sc.nextLine();
String[] str = st.split(";");
int n = str.length;
int sum = 0;
for (int i = 0; i < n; i++) {
String[] str1 = str[i].split(":");
String price = str1[1];
char[] c = price.toCharArray();
price = "";
for (int j = 0; j < c.length; j++) {
if (c[j] != ' ') {
price += c[j];
}
}
System.out.println(str1[0] + "--" + price);
sum += Integer.parseInt(price);
}
System.out.println("总价格--" + sum);
}
}
7-3 两种异常捕获小程序
分数 30
全屏浏览题目
切换布局
作者 dainy
单位 湖南工学院
本题目要求读入2个整数a和b,然后输出它们的商 ,即a/b的值,正常输出结果并保留2位小数,如果出现输入非数值型数据,则捕获异常NameError,并输出the input is not numerical,如果输入的除数b为0,则捕获异常ZeroDivisionError,输出zero division error
输入格式:
在2行中输入2个数据。
输出格式:
在一行中输出a/b的值,保留2位小数,若存在异常则捕获输出相应信息。
输入样例1:
在这里给出一组输入。例如:
1
2
输出样例1:
在这里给出相应的输出。例如:
0.50
输入样例2:
在这里给出一组输入。例如:
2
b
输出样例2:
在这里给出相应的输出。例如:
the input is not numerical
输入样例3:
在这里给出一组输入。例如:
4
0
输出样例3:
在这里给出相应的输出。例如:
zero division error
import java.util.*;
public class Main{
public static void main(String[] args){
double a;
double b;
Scanner sc=new Scanner(System.in);
try{
a=sc.nextDouble();
b=sc.nextDouble();
if(b==0)
System.out.println("zero division error");
else
System.out.printf("%.2f\n",a/b);
}
catch(InputMismatchException e){
System.out.println("the input is not numerical");
}
}
}
7-4 计算长方体和四棱锥的表面积和体积
分数 25
全屏浏览题目
切换布局
作者 刘凤良
单位 天津仁爱学院
计算如下立体图形的表面积和体积。
从图中观察,可抽取长方体和四棱锥两种立体图形的共同属性到父类Rect中:长度:l 宽度:h 高度:z。
编程要求:
(1)在父类Rect中,定义求底面周长的方法length( )和底面积的方法area( )。
(2)定义父类Rect的子类立方体类Cubic,计算立方体的表面积和体积。其中表面积area( )重写父类的方法。
(3)定义父类Rect的子类四棱锥类Pyramid,计算四棱锥的表面积和体积。其中表面积area( )重写父类的方法。
(4)在主程序中,输入立体图形的长(l)、宽(h)、高(z)数据,分别输出长方体的表面积、体积、四棱锥的表面积和体积。
提示:
(1)四棱锥体积公式:V= (1/3)Sh,S——底面积 h——高
(2)在Java中,利用Math.sqrt(a)方法可以求得a的平方根(方法的参数及返回结果均为double数据类型)。
输入格式:
输入正整数n,然后输入n行数值型数据(double);
每行三个数值,分别表示l、h、z,数值之间用空格分隔。
若输入数据中有0或负数,则不表示任何图形,表面积和体积均为0。
输出格式:
行数与输入相对应,数值为长方体表面积 长方体体积 四棱锥表面积 四棱锥体积(中间有一个空格作为间隔,数值保留两位小数)。
输入样例:
4
1 2 3
0 2 3
-1 2 3
3 4 5
输出样例:
22.00 6.00 11.25 2.00
0.00 0.00 0.00 0.00
0.00 0.00 0.00 0.00
94.00 60.00 49.04 20.00
import java.util.*;
class rect{
double l;
double h;
double z;
rect(double l,double h,double z){
this.l=l;
this.z=z;
this.h=h;
}
public double area(){
return 0;
}
}
class Cubic extends rect{
Cubic(double l,double h,double z){
super(l,h,z);
}
public double area(){
return 2*(l*z+h*z+l*h);
}
public double V(){
return l*h*z;
}
}
class Pyramid extends rect{
Pyramid(double l,double h,double z){
super(l,h,z);
}
public double area(){
return l*h+(h*Math.sqrt((l/2)*(l/2)+z*z))+(l*Math.sqrt((h/2)*(h/2)+z*z));
}
public double V(){
return l*h*z/3;
}
}
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for(int i=0;i<n;i++){
double l=sc.nextDouble();
double h=sc.nextDouble();
double z=sc.nextDouble();
if(l<=0||h<=0||z<=0){
System.out.println("0.00 0.00 0.00 0.00") ;
continue;
}
Cubic c=new Cubic(l,h,z);
Pyramid p=new Pyramid(l,h,z);
System.out.printf("%.2f %.2f %.2f %.2f\n",c.area(),c.V(),p.area(),p.V());
}
}
}
7-5 设计一个学生类和它的一个子类——本科生类
分数 20
全屏浏览题目
切换布局
作者 吴光生
单位 新余学院
设计一个学生类(Student
)和它的一个子类——本科生类(Undergraduate
)。要求如下:
(1)Student类有姓名(name
)和年龄(age
)属性,两者的访问权限为protected
;一个包含两个参数的构造方法,用于给姓名和年龄属性赋值;一个show( )
方法用于输出Student的属性信息,输出格式为Student[name=XXX,age=XX]
。
(2)Undergraduate类增加一个专业(major
)属性,该属性的访问权限为private
;有一个包含三个参数的构造方法,前两个参数用于给继承的年龄和姓名属性赋值,第三个参数给专业属性赋值;一个show( )
方法用于输出Undergraduate的属性信息,输出格式为Undergraduate[name=XXX,age=XXX,major=XXX]
。
在测试类Main
的main( )
方法中,调用Student类的带参数的构造方法创建对象object1,调用Undergraduate类的带参数的构造方法创建对象object2,然后分别调用它们的show( )方法。
输入格式:
第一行从键盘输入姓名(字符串)、年龄(整数)给Student类的对象object1,中间以空格隔开。
第二行从键盘输入姓名(字符串)、年龄(整数)、专业(字符串)给Undergraduate类的对象object2,中间以空格隔开。
输出格式:
第一行输出object1的姓名、年龄,格式为:Student[name=XXX,age=XX]
第二行输出object2的姓名、年龄、专业,格式为: Undergraduate[name=XXX,age=XXX,major=XXX]
输入样例:
在这里给出一组输入。例如:
张三 12
李四 19 计算机科学与技术
输出样例:
在这里给出相应的输出,其中的标点符号为英文格式。例如:
Student[name=张三,age=12]
Undergraduate[name=李四,age=19,major=计算机科学与技术]
import java.util.*;
class Student{
String name;
int age;
Student(String name,int age){
this.name=name;
this.age=age;
}
public void show(){
System.out.println("Student[name="+this.name+",age="+this.age+"]");
}
}
class Undergraduate extends Student{
private String major;
Undergraduate(String name,int age,String major){
super(name,age);
this.major=major;
}
public void show(){
System.out.println("Undergraduate[name="+this.name+",age="+this.age+",major="+this.major+"]");
}
}
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
Student s1=new Student(sc.next(),sc.nextInt());
Undergraduate s2=new Undergraduate(sc.next(),sc.nextInt(),sc.next());
s1.show();
s2.show();
}
}
7-6 定义接口(Biology、Animal)、类(Person)、子类(Pupil)
分数 30
全屏浏览题目
切换布局
作者 吴光生
单位 新余学院
(1)定义Biology
(生物)、Animal
(动物)2个接口,其中Biology声明了抽象方法breathe( )
,Animal声明了抽象方法eat( )
和sleep( )
。
(2)定义一个类Person
(人)实现上述2个接口,实现了所有的抽象方法,同时自己还有一个方法think( )
。breathe()、eat()、sleep()、think()四个方法分别输出:我喜欢呼吸新鲜空气
我会按时吃饭
早睡早起身体好
我喜欢思考
(3)定义Person类的子类Pupil
(小学生),有私有的成员变量school
(学校),公有的成员方法setSchool( )
、getSchool( )
分别用于设置、获取学校信息。
(4)在测试类Main
中,用Pupil类创建一个对象zhangsan。尝试从键盘输入学校信息给zhangsan,获取到该信息后输出该学校信息,格式为“我的学校是XXX”;依次调用zhangsan的breathe()、eat()、sleep()、think()方法。
输入格式:
从键盘输入一个学校名称(字符串格式)
输出格式:
第一行输出:我的学校是XXX(XXX为输入的学校名称)
第二行是breathe()方法的输出
第三行是eat()方法的输出
第四行是sleep()方法的输出
第五行是think()方法的输出
输入样例:
在这里给出一组输入。例如:
新余市逸夫小学
输出样例:
在这里给出相应的输出。例如:
我的学校是新余市逸夫小学
我喜欢呼吸新鲜空气
我会按时吃饭
早睡早起身体好
我喜欢思考
import java.util.*;
interface Biology{
public abstract void breathe();
}
interface Animal{
public abstract void eat();
public abstract void sleep();
}
class person implements Biology,Animal{
public void breathe(){
System.out.println("我喜欢呼吸新鲜空气");
}
public void eat(){
System.out.println("我会按时吃饭");
}
public void sleep(){
System.out.println("早睡早起身体好");
}
public void think(){
System.out.println("我喜欢思考");
}
}
class Pupil extends person{
private String school;
Pupil(String school){
super();
this.school=school;
}
public void setschool(String school){
this.school=school;
}
public String getschool(){
return this.school;
}
}
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String str=sc.next();
Pupil zhangsan=new Pupil(str);
System.out.println("我的学校是"+zhangsan.getschool());
zhangsan.breathe();
zhangsan.eat();
zhangsan.sleep();
zhangsan.think();
}
}
7-7 利用正则表达式得到一段HTML文本中所有超链接对应的网址
分数 20
全屏浏览题目
切换布局
作者 lsr
单位 枣庄学院
编写程序实现以下功能:利用正则表达式得到一段HTML文本中所有超链接对应的网址,并将网址输出到屏幕上(每行输出一个网址)。
输入格式:
从键盘输入 一段HTML文本,多行输入,空行输入 结束。
输出格式:
输出从HTML文本中提取到的超链接所对应的网址,一行一个网址。
输入样例:
在这里给出一组输入。例如:
<h3 class="c-title">
<a href="https://baijiahao.baidu.com/s?id=1633289774665320636&wfr=spider&for=pc" data-click="{
'f0':'77A717EA',
'f1':'9F63F1E4',
'f2':'4CA6DE6E',
'f3':'54E5243F',
't':'1557660267'
}" target="_blank">
影片《周恩来回延安》在<em>南开大学</em>点映开启全国路演
</a>
</h3>
<a href="https://baijiahao.baidu.com/s?id=1632116753423885280&wfr=spider&for=pc" data-click="{
'f0':'77A717EA',
'f1':'9F73F1E4',
'f2':'4CA6DE6E',
'f3':'54E5243F',
't':'1557660267'
}" target="_blank">
天津“<em>南开大学</em>”——莘莘学子的梦想之地
</a>
输出样例:
在这里给出相应的输出。例如:
https://baijiahao.baidu.com/s?id=1633289774665320636&wfr=spider&for=pc
https://baijiahao.baidu.com/s?id=1632116753423885280&wfr=spider&for=pc
import java.util.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String []s=new String[101];
int i=0;
String r="href=['|\"](.*?)['|\"]";
Pattern p=Pattern.compile(r);
while(sc.hasNext()){
s[i]=sc.nextLine();
i++;
Matcher m=p.matcher(s[i-1]);
while(m.find()){
System.out.println(m.group().substring(6,m.group().length()-1));
}
}
}
}
7-8 jmu-Java-02基本语法-07-大整数相加
分数 4
全屏浏览题目
切换布局
作者 郑如滨
单位 集美大学
有若干大整数,需要对其进行求和操作。
输入格式
每行输入一个字符串代表一个大整数,连续输入若干行,当某行字符为e或E时退出。
输入样例:
42846280183517070527831839425882145521227251250327
55121603546981200581762165212827652751691296897789
e
输出样例:
97967883730498271109594004638709798272918548148116
import java.util.*;
import java.math.BigInteger;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
BigInteger a=new BigInteger("0");
String str;
while(sc.hasNext()){
str=sc.next();
if(str.equals("e")||str.equals("E"))
break;
a=a.add(new BigInteger(str));
}
System.out.println(a);
}
}