Java期末复习题之包与字符串

 点击返回标题->23年Java期末复习-CSDN博客


包是分类管理的需要,建立包用:package,包中类的引用import

学习使用javaAPI中的字符串类String,学会其成员方法的使用


 (必看)eclipse包的分层等级结构设置

因为eclipse的包的结构默认是平行等级的,所以要手动设置成分层等级,操作步骤如下:

完成下图设置后就可以在父包中建立子包了,但要注意一点,只有一个子包时,要在父包中先创建一个.java文件(即class类或者interface接口,如下图biology和school两个父包中,都有一个Main.java文件,否则创建的子包仍然会是平行结构!~也不太准确,反正自行摸索一下吧)

 

 

 


第1题. 

在biology包中的animal包中有human类,它具有name,height,weight的属性,还具有eat(),sleep()和work()的行为,在biology包中的plant包中有flower类,它具有name,color,smell的属性,还具有drink()和blossom()的行为.

现在在一个school包中的garden包中一个张三的人,他是一个human类的对象,种植的rose是一个flower类对象,编程实现并测试各自的方法.

项目结构

首先根据题意我们可以搭建出如下图所示的项目结构,但用eclipse的小白童鞋一定会遇到这样一个问题,就是无法在包中再建一个包,在开头已经放好教学了。

剩下写代码就简单呐,结合注释就明白了:

要注意的是,package导包语句是必须写在所有代码之前的,这是Java的规定!

human类代码

package biology.animal;

public class human {
	//成员变量
	private String name;
	private int height, weight;
	//成员方法
	public void eat() {
		System.out.println(this.name + ":我吃吃吃!");
	}
	public void sleep() {
		System.out.println(this.name + ":我睡睡睡!");
	}
	public void work() {
		System.out.println(this.name + ":我卷卷卷!");
	}
	//构造方法
	public human() {//无参构造
		System.out.println("human类的的无参构造被调用");
	}
	public human(String name, int height, int weight){//有参构造
		this.name = name;
		this.height = height;
		this.weight = weight;
	}
	//getter和setter就不全写了,很简单的,而且跟题目关系不大,反正用有参构造就可以解决对象的初始化
	public String getName() {
		return this.name;
	}
	//toString方法
	public String toString() {
		return "注意看,这个男人叫" + this.name + ",他的身高是" + this.height + "cm,他的体重是" + this.weight + "kg。";
	}
}

flower类代码 

package biology.plant;
 
public class flower {
	private String name, color, smell;//名字、颜色、气味应该都设置成String类型吧
	public void drink() {
		System.out.println("给" + this.name + "浇点水吧。");
	}
	public void blossom() {
		System.out.println(this.name + "开个发发(花花)!");
	}
	public flower(String name, String color, String smell) {
		this.name = name;
		this.color = color;
		this.smell = smell;
	}
	//flower类我们不用toString方法输出,而用getter配合println输出,human类用toString方法配合println输出
	public String getName() {
		return name;
	}

	public String getColor() {
		return color;
	}

	public String getSmell() {
		return smell;
	}
}

测试类代码 

package school.garden;
//导入biology父包中两个子包(animal子包和plant子包)的两个类
import biology.animal.human;
import biology.plant.flower;
 
 
public class zhangsan {
	public static void main(String[] args) {
		//对human类和flower类,采用有参构造的形式来实例化对象并赋值
		human h = new human("张三", 180, 70);
		flower f = new flower("琉璃百合", "淡蓝色", "小清新");
		
		System.out.println(h.toString());
		System.out.println("这是" + h.getName() + "培养的" + f.getName() + ",它的颜色是" + f.getColor() + "的,它的气味是" + f.getSmell() + "。");
		
		//测试human类和flower类里面的共五个方法,因为是跨包定义的类,因此这五个方法必须是public权限
		h.eat();
		h.sleep();
		h.work();
		f.drink();
		f.blossom();
	}
}


第2题.

在computer包中的mainbroad包中有一个VGACard的类,它有一个显示方法show(),显示”VGA checked success”,在server的包的mainbroad包中的showCard类是继承自VGACard,请测试showCard的show()功能。

这一题比上一题简单很多,首先还是先把项目的结构弄好(在第一题中有解释)

项目结构

VGACard类代码

package computer.mainbroad;

public class VGACard {
	public void show() {
		System.out.println("VGA checked success");
	}
}

showCard类(兼测试类)代码

package server.mainbroad;
import computer.mainbroad.VGACard;

public class showCard extends VGACard{
	public static void main(String[] args) {
		showCard sc = new showCard();
		sc.show();
	}
}


第3题.

在com.graphic包中定义一个圆柱体类Cylinder,其半径r,高h都为私有属性,有构造方法和求体级方法volume()。在com.test包中定义一个测试类test,测试一个半径为5.34、高为2的圆柱体体积。半径PI为3.14

项目结构 

Cylinder类代码 

package com.graphic;

public class Cylinder {
	private double r, h;
	public Cylinder() {
		
	}
	public Cylinder(double r, double h) {
		this.r = r;
		this.h = h;
	}
	public double volume() {
		return 3.14*this.r*this.r*this.h;
	}
}

 test类(即测试类)代码

package com.test;
import com.graphic.Cylinder;
public class test {
	public static void main(String[] args) {
		Cylinder c = new Cylinder(5.34, 2);
		double v = c.volume();
		System.out.println(v);
	}
	
}


第4题.

编写程序统计一个字符子串在一个字符串中出现的次数和位置。如子字符串“nba”在字符串”asfasfnabaasdfnbasdnbasnbasdnbadfasdf”中出现的次数和出现的位置。

indexOf()方法查找子串

要解决这题首先得学会用indexOf()方法查找子串;

这是本题重点考查内容!

代码格式:

Str.indexOf(strstart)

其中,Str是母串(String),str是待查找子串(String),start表示从母串的哪个下标(int)开始查找。

  1. 如果母串中存在这个子串,将返回该子串首字符在母串中的下标。
  2. 如果母串中不存在这个子串,将返回-1

 下面举一个样例进行理解:

思路

所以,本题的思路就是用indexOf()方法从下标0开始查找字串,找到一个字串后得到它的下标,借此再用indexOf()从此下标加上待查找子串长度的位置,继续往后查找,直到找不到子串,该方法返回-1。

完整代码 

public class Main {
	public static void main(String[] args) {
		String Str = "asfasfnabaasdfnbasdnbasnbasdnbadfasdf";
		String str = "nba";
		int index = 0, count = 0;//index用来记录子串出现的位置,count用来记录字串出现次数
		while((index = Str.indexOf(str, index)) != -1) {//不等于-1,就继续往下找
			count++;
			System.out.println("第" + count + "次,在下标为" + index + "处,找到了一个目标子串!");
			index += str.length();//更新index的值,让indexOf()方法继续往后查找子串
		}
		System.out.println("统计结果:" + str + "在" + Str + "中" + "共出现了" + count +"次");
	}
}


第5题.

对字符串“23 10 -8 0 3 7 108”中的数值进行升序排序,生成一个数值有序的字符串 “-8 0 3 7 10 23 208”。

思路

对于字符串而言,没有什么库函数可以实现直接对其内部的字符按照指定规则排序。因此我们采取这样的解决办法:

①将给定字符串,按空格分隔得到多个子串组成的字符串数组。

②将字符串数组中的子串转化为整型,并存放在一个整型数组中。

③对这个整型数组按升序排序。

④将整型数组中的整数重组成字符串,数与数之间用空格分隔。

完整代码

结合注释理解。

import java.util.Arrays;
import java.util.Iterator;

public class Main {
	public static void main(String[] args) {
		String Str = "23 10 -8 0 3 7 108";
		String[] Str_nums = Str.split(" ");//将Str中的字串按空格分隔,并存放在字符串数组中
		int[] nums = strs_to_ints(Str_nums);//将字符串数组转为整型数组
		Arrays.sort(nums);//Arrays.sort()方法默认按升序对整型数组nums排序
		String Str_new = toString(nums);//将整型数组转为字符串
		System.out.println(Str_new);
	}
	static int[] strs_to_ints(String[] Str_nums) {
		int len = Str_nums.length;
		int[] nums = new int[len];
		for(int i = 0; i < len; i++) {
			nums[i] = Integer.parseInt(Str_nums[i]);//用Integer.parseInt()方法可以之间将数字字符串转为对应的整数
		}
		return nums;
	}
	static String toString(int[] nums) {
		StringBuilder Str_new = new StringBuilder();//String类对象一旦定义就无法修改,因此必须采用StringBuilder类对象
		for(int i = 0; i < nums.length; i++) {
			//用.append()方法将整数(以字符的形式)或字符尾插到Str_new对象中,实现字符串的拼接
			if(i == nums.length - 1) {//最后一个数字后面没有空格,因此特殊处理
				Str_new.append(nums[i]);
			}
			else {
				Str_new.append(nums[i] + " ");
			}
		}
		return Str_new.toString();
	}
}

第6题(补充).

编写一个矩形类 Rect,包含:两个 private 属性: 矩形的宽width;矩形的高 height。
两个构造方法:

(1)一个带有两个参数的构造器方法,用于将 width 和 height 属性初化;

(2)一个不带参数的构造器,将矩形初始化为宽和高都为 10。

两个方法:
(1)求矩形面积的方法area()
(2)求矩形周长的方法 perimeter()

定义测试类 RectTest,在它的main 方法中定义一个 Rect类的对象,从键盘输入两个数据分别作为宽和高,并用area()和 perimeter()方法输出其面积和周长。

import java.util.Scanner;

public class Main{
	public static void main(String[] args) {
		Rect r1 = new Rect();//无参构造实例化对象r1,按理来说这个对象的宽和高都为10
        //输出面积和周长,\t就是tab键,水平制表符
		System.out.println("r1的面积为:" + r1.area() + "\tr1的周长为:" + r1.perimeter());
		
		Scanner sc = new Scanner(System.in);
		double w = sc.nextDouble(), h = sc.nextDouble();//输入宽,高
		Rect r2 = new Rect(w, h);//有参构造实例化对象r2,这个对象的高宽均为用户输入决定
		System.out.println("r2的面积为:" + r2.area() + "\tr2的周长为:" + r2.perimeter());
	}
}

class Rect{
	private double width, height;
	//一个不带参数的构造器,将矩形初始化为宽和高都为 10
	Rect(){
		this.width = 10;
		this.height = 10;
	}
	//一个带有两个参数的构造器方法,用于将 width 和 height 属性初始化
	Rect(double width, double height) {
		this.width = width;
		this.height = height;
	}
	
	public double area() {
		return this.width * this.height;
	}
	public double perimeter() {
		return 2 * (this.width + this.height);
	}
}

  • 45
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值