Java刷题集(2)

  1. 子类父类调用及方法重写(override)

Shape类

定义一个形状类Shape,提供计算周长getPerimeter()和面积getArea()的函数

定义一个子类正方形类Square继承自Shape类,拥有边长属性,提供构造函数,能够计算周长getPerimeter()和面积getArea()

定义一个子类长方形类Rectangle继承自Square类,拥有长、宽属性,提供构造函数,能够计算周长getPerimeter()和面积getArea()

定义一个子类圆形类Circle继承自Shape,拥有半径属性,提供构造函数,能够计算周长getPerimeter()和面积getArea()

在main函数中,分别构造三个子类的对象,并输出他们的周长、面积.

提示:用System.out.printf("%.2f",d)进行格式化输出

输入描述:

正方形类的边长

长方形类的长宽

圆类的半径

输出描述:

正方形的周长、面积

长方形的周长、面积

裁判测试程序样例:

import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
         Scanner scan = new Scanner(System.in);      
         double length = scan.nextDouble();
         Square s = new Square(length);
         System.out.printf("%.2f ",s.getPerimeter());
         System.out.printf("%.2f\n",s.getArea());

         length = scan.nextDouble();
         double wide = scan.nextDouble();
         Rectangle r = new Rectangle(length,wide);
         System.out.printf("%.2f ",r.getPerimeter());
         System.out.printf("%.2f\n",r.getArea());

         double radius = scan.nextDouble();
         Circle c = new Circle(radius);
         System.out.printf("%.2f ",c.getPerimeter());
         System.out.printf("%.2f\n",c.getArea());

         scan.close(); 
    }
}

/* 你的代码被嵌在这里 */

输入样例:

在这里给出一组输入。例如:

1
1 2
2

输出样例:

在这里给出相应的输出。例如:

4.00 1.00
6.00 2.00
12.57 12.57

题解分析:

主要要搞清楚父类和子类的继承关系,在子类里可以重写父类的方法。本题使用abstract类(抽象类)较适合,那么必须在非abstract类的子类中重写父类中的abstract方法。如果该子类是abstract类是abstract类的子类,它可以重写父类的abstract方法,也可以继承父类的abstract方法。

题解:

abstract class Shape{

    public abstract double getPerimeter();
    public abstract double getArea();

}

class Square extends Shape{
    double length;
    public Square(double length){
        this.length =length;
    }
    public double getArea(){
        return length*length;
    }
    public double getPerimeter(){
        return 4*length;
    }

}

class Rectangle extends Shape{
    double width,length;

    public Rectangle(double length, double width) {
        this.length=length;
        this.width=width;
    }

    public double getPerimeter(){
       return 2*(length+width);
    }
    public double getArea(){
       return length*width;
    }


}

class Circle extends Shape{
    double radius;
    Circle(double radius){
        this.radius =radius;
    }

    @Override
    public double getPerimeter() {
        return 2*Math.PI*radius;
    }

    @Override
    public double getArea() {
        return Math.PI*radius*radius;  //直接利用java中的Math.PI 
    }

}

2.

根据派生类写出基类(Java)

裁判测试程序样例中展示的是一段定义基类People、派生类Student以及测试两个类的相关Java代码,其中缺失了部分代码,请补充完整,以保证测试程序正常运行。

函数接口定义:

提示:
观察派生类代码和main方法中的测试代码,补全缺失的代码。

裁判测试程序样例:

注意:真正的测试程序中使用的数据可能与样例测试程序中不同,但仅按照样例中的格式调用相关方法(函数)。

classPeople{
protected String id;
protected String name;
/** 你提交的代码将被嵌在这里(替换此行) **/}
classStudentextendsPeople{
protected String sid;
protectedint score;
publicStudent(){
        name = "Pintia Student";
    }
publicStudent(String id, String name, String sid, int score){
super(id, name);
this.sid = sid;
this.score = score;
    }
publicvoidsay(){
        System.out.println("I'm a student. My name is " + this.name + ".");
    }
}
publicclassMain{
publicstaticvoidmain(String[] args){
        Student zs = new Student();
        zs.setId("370211X");
        zs.setName("Zhang San");
        zs.say();
        System.out.println(zs.getId() + " , " + zs.getName());
        Student ls = new Student("330106","Li Si","20183001007",98);
        ls.say();
        System.out.println(ls.getId() + " : " + ls.getName());
        People ww = new Student();
        ww.setName("Wang Wu");
        ww.say();
        People zl = new People("370202", "Zhao Liu");
        zl.say();
    }
}

输入样例:

在这里给出一组输入。例如:

(无)

输出样例:

在这里给出相应的输出。例如:

I'm a student. My name is Zhang San.
370211X , Zhang San
I'm a student. My name is Li Si.
330106 : Li Si
I'm a student. My name is Wang Wu.
I'm a person! My name is Zhao Liu.

题解分析:把基本函数get和set写好即可,注意格式输出中的感叹号!!!

  public People(){}   //需要无参构造

    public People(String id,String name){  //有参构造
        this.id = id;
        this.name =name;
    }

    public void setId(String s){
         this.id=s;
    }
    public void setName(String name) {
        this.name=name;
    }
    public String getId() {
        return id;
    }
    public String getName(){
        return name;
    }
    public void say(){
        System.out.println("I'm a person! My name is "+this.name+".");
    }

4.统计字符串中字符的个数

通过键盘输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

统计一行字符串中的英文字母个数、空格个数、数字个数、其他字符个数

输入格式:

通过键盘输入一行字符(任意字符)

输出格式:

统计一行字符串中的英文字母个数、空格个数、数字个数、其他字符个数

输入样例:

rwrwewre2345asdJSJQI%^&(&   *&sdf YY( 2342-k'

输出样例:

字母个数:22
数字个数:8
空格个数:5
其他字符个数:10

题解分析可以使用java中的工具类判断字符个数,空格个数等

要特别注意输出


import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int cout1 = 0;
        int cout2 = 0;
        int cout3 = 0;
        int cout4 = 0;

        //System.out.println("请输入一行字符:");
        Scanner input = new Scanner(System.in);
        String s = input.nextLine();
        char[] arr = s.toCharArray();   //将字符串转换为字符数组
        //System.out.println(Arrays.toString(arr));
        for (int i = 0; i < arr.length; i++) {
            if(Character.isLetter(arr[i])){
                cout1++;
            }
            else if(Character.isDigit(arr[i])){
                cout2++;
            }
            else if(arr[i]==' '){
                cout3++;
            }
            else {
                cout4++;
            }

        }
        System.out.println("字母个数:"+cout1);
        System.out.println("数字个数:"+cout2);
        System.out.println("空格个数:"+cout3);
        System.out.println("其他字符个数:"+cout4);

    }

}

5.钱币

编写程序,读取用户输入的代表总金额的double值,打印表示该金额所需的最少纸币张数和硬币个数,打印从最大金额开始。纸币的种类有十元、五元、一元,硬币的种类有五角、一角、贰分、壹分。

提示:

由于java浮点数精度问题,建议输入金额后做如下处理:

double totalMoney = in.nextDouble();
int total = (int)(totalMoney*1000);

输入格式:

47.63

输出格式:

4 张十元
1 张五元
2 张一元
1 个五角
1 个一角
1 个贰分
1 个壹分

输入样例:

47.63

输出样例:

4 张十元
1 张五元
2 张一元
1 个五角
1 个一角
1 个贰分
1 个壹分

题解:换算问题,不是很会

import java.util.Scanner;

public class Main {
 public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
float input = scanner.nextFloat(); //几元
int num = (int) (input * 100); // 几分 //强制转换 //这里乘了100,成了整数
int a = num / 1000; // 几张十元
num = num - a * 1000; //相当于这里把所有的十元给客人了
int b = num /500; // 几张五元
num = num - b * 500; //相当于把十元五元都给了,准备给更小单位的钱
int c = num / 100; // 几张一元
num = num - c * 100;
int d = num / 50; // 几个五角
num = num - d * 50;
int e = num / 10; // 几个一角
num = num - e *10;
int f = num / 2; // 几个两分
num = num - f * 2; // 几个一分
System.out.println(a +" "+ "张十元");
System.out.println(b +" "+ "张五元");
System.out.println(c +" "+ "张一元");
System.out.println(d +" "+ "个五角");
System.out.println(e +" "+ "个一角");
System.out.println(f +" "+ "个贰分");
System.out.println(num +" "+ "个壹分");
}
}

此处感谢,某帅哥

小江的江(最后一题来自他的代码)

总结今日学习:父类子类的调用,基本定义方法,重写方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Private Function setdata(num As Integer) As String '数字转换 Select Case num Case 0 setdata = "零" Case 1 setdata = "壹" Case 2 setdata = "贰" Case 3 setdata = "叁" Case 4 setdata = "肆" Case 5 setdata = "伍" Case 6 setdata = "陆" Case 7 setdata = "柒" Case 8 setdata = "捌" Case 9 setdata = "玖" End Select End Function Private Function chang(aaa As Integer) As String '位数转换 Select Case aaa Case 1 chang = "" Case 2 chang = "十" Case 3 chang = "百" Case 4 chang = "千" Case 5 chang = "万" Case 6 chang = "十" Case 7 chang = "百" Case 8 chang = "千" Case 9 chang = "亿" Case 10 chang = "十" End Select End Function Private Sub Form_Activate() '设定文本长度 Text2.MaxLength = 10 Text2.SetFocus End Sub Private Sub Text2_Change() '小写转大写 Dim i As Integer Dim j As Integer Dim myint As Integer Dim myint1 As Integer Dim mydoub As Double Dim mystr As String Dim mystr1 As String Dim mystr2 As String Dim mystr3 As String Dim mystr4 As String Dim money As Long Dim money1 As Integer Dim money2 As Long mystr = Text2.Text myint = InStr(mystr, ".") If myint = 0 Then mystr = Text2.Text Else mystr3 = Right(Text2.Text, Len(Text2.Text) - myint) If mystr3 <> "" Then '转换小数位 mystr4 = Left(mystr3, 1) mystr3 = Right(mystr3, Len(mystr3) - 1) If mystr4 <> "0" Then mystr2 = mystr2 + setdata(Val(mystr4)) + "角" End If If mystr3 <> "" Then mystr4 = Left(mystr3, 1) mystr2 = mystr2 + setdata(Val(mystr4)) + "分" End If End If mystr = Left(Text2.Text, myint - 1) End If j = Len(mystr) For i = 1 To Len(mystr) '转换整数位 money2 = Left(mystr, i) money1 = Right(money2, 1) If money1 = 0 Then If j = 5 Then If Right(mystr1, 1) <> "万" Then mystr1 = mystr1 & "万" Else If Right(mystr1, 1) <> "零" And Right(money, j) > 0 Then mystr1 = mystr1 & "零" End If Else mystr1 = mystr1 & setdata(money1) + chang(j) End If j = j - 1 Next i Text1.Text = mystr1 & "元" & mystr2 '显示大写 End Sub Private Sub Command1_Click() End End Sub
实验一: Java编程基础 (1) 配置环境变量,熟悉编程环境。 (2) 建立一个Java的Application程序,编译、运行以下例题: public class ex01 { public static void main( String arg[ ]) { System.out.println(“hello!”); } } 实验二:流程控制 (1) 编程输出100以内的奇数。 (2) 编程输出乘法表。 (3) 编写程序,定义一个一维数组并赋有初值,同时找出一维数组中的最大值和最小值并输出。 实验三:和对象 (1) 设计一个User,其中包括用户名、口令等属性以及构造方法(至少重载2个)、获取和设置口令的方法、显示和修改用户名的方法等。编写应用程序测试User。 (2) 定义一个Student,其中包括学号、姓名、性别、出生年月等属性以及init( )——初始化各属性、display( )——显示各属性、modify( )¬——修改姓名等方法。实现并测试这个。 (3) 从上题的Student中派生出Graduate(研究生),添加属性:专业subject、导师adviser。重载相应的成员方法。并测试这个。 实验四:的继承 (1) 定义一个Animal,其中包括昵称、性别、体重属性,构造函数初始化各属性,显示各属性的成员函数、修改属性的成员函数。实现并测试这个。 (2) 从上题的中派生出Dog,添加年龄属性。重载相应的成员方法,并添加新的方法bark(),输出“wangwangwang”。并测试这个。 实验五:接口 (1) 定义一个接口Inf,含有常量π和一个实现计算功能的方法calculate( ),再分别定义一个面积area和一个周长circumference,各自按计算圆面积和圆周长具体实现接口中的方法,并以半径为5来测试这两个。 (2) 定义一个接口run(),汽车和卡车分别实现这个,汽车实现这个接口输出的是“汽车在跑”,卡车输出的是“卡车在跑”,丰富这两个,在主程序中测试。 实验六:异常处理 (1) 定义一个,在main方法的try块中产生并抛出一个异常,在catch块中捕获异常,并输出相应信息,同时加入finally子句,输出信息,证明它的无条件执行。 (2) *定义一个Caculate实现10以内的整数加减法的计算。自定义一个异常NumberRangeException,当试图进行超范围运算时,产生相应的信息。编写应用程序进行测试。 实验七:图形界面编程 (1) 在窗体上产生一个单文本框和两个命令按纽:“显示”和“清除”。当用户单击“显示”按纽时,在文本框中显示“Java 程序”字样;单击“清除”按纽时清空文本框。 (2)设计如下界面: 当用户输入了两个操作数并点击运算种按纽后,在运算结果对应的文本框中显示运算结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值