JAVA经典题

JAVA面向对象题目(包含一点输入输出流)

题目:
统计一个文本文件calcCharNum.txt中相关字符的出现次数,例如:中(8)、b(16)、+(10)等,括号外是字符,括号内代表字符出现次数。要求使用自定义类的方式封装字符和出现次数以及自定义类封装相关的操作,并按照出现次数排序后从大到小输出

public class CharNum implements Comparable<CharNum> {       //实现compare 接口,如果不懂这个 的意死,可以自行百度
	private int num = 1;     //表示各个字符出现的个数
	private char c;  //定义变量字符 存储 文本内的汉字、英文字母等、
	//构造函数
	public CharNum(char c) {
		
		this.c = c;
	}
	
	//set/get方法
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	public char getC() {
		return c;
	}
	public void setC(char c) {
		this.c = c;
	}

	@Override
	public String toString() {
		return "("+c+")"+"出现的次数为:"+num;
	}

	@Override
	public int compareTo(CharNum o) {      //实现接口compare中的方法
		if(this.num == o.num ) {
			return this.c - o.getC();
		}else {
			return this.num - o.num;
		}
	}
}
public class CharArray {
	private static CharNum[] arr = new CharNum[0];

	private CharArray() {}

	private static CharArray instance = new CharArray();

	public static CharArray getinstance() {
		return instance;
	}

	public void add(char c) {
		if (c == '\n' || c == '\r')
			return;
		boolean exist = false;
		int i = 0;
		for (; i < arr.length; i++) {
			CharNum temp = arr[i];
			if (temp == null)
				break;
			if (c == temp.getC()) {
				arr[i].setNum(arr[i].getNum() + 1);
				exist = true;
				break;
			}
		}

		if (!exist) {
			if (i >= arr.length) {
				addLength(c);
			}
			CharNum temp = new CharNum(c);
			arr[i] = temp;
		}
	}

	private void addLength(char c) {
		// TODO Auto-generated method stub
		int len = arr.length * 2 + 1;
		CharNum[] arr1 = new CharNum[len];
		for (int i = 0; i < arr.length; i++) {
			arr1[i] = arr[i];
		}
		arr = arr1;
	}

	public void sort() {
		for (int i = 1; i < arr.length; i++) {
			for (int k = 0; k < arr.length - i; k++) {
				if(arr[k]!=null&&arr[k+1]!=null) {
				if (arr[k].compareTo(arr[k + 1]) < 0) {
					CharNum temp = arr[k];
					arr[k] = arr[k + 1];
					arr[k + 1] = temp;
				}
				}
			}
		}
	}

	public String toString() {
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] != null) {
				sb.append(arr[i].toString() + ",");
				if ((i + 1) % 5 == 0)
					sb.append("\n");
			}
		}
		if(sb.length()>1) {
			sb.deleteCharAt(sb.length() - 1);
		}
		return sb.toString();
		

	}

}
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class CharTest {
	public static void main(String[] args) throws IOException {
		File f = new File("aaa.txt");
		CharArray arr = CharArray.getinstanct();
		if(f.exists()) {
			try(Reader r = new BufferedReader(new FileReader(f));){
				int cc;
				while((cc = r.read())!=-1) {
					arr.add((char)(cc));
				}
			}
			arr.sort();
			System.out.println(arr);
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值