Java复习2,3 练习

1.试编写Java代码实现一个计数器类Computer其中包括:
  域value :用来保存计数器的当前值;
  方法increment(): 计数器加一;
  方法decrement() :计数器减一;
  方法reset():计数器清零。
  请编写并测试程序。

2.要求产生10个随机的字符串,字符串由大小写英文字母和数字组成,每一个字符串互相不重复,每一个字符串中组成的字符(a-z,A-  Z,0-9)也不相同,每个字符串长度为10。

3. 编写程序,实现从命令行输入三个数值参数作为三角形的三条边,以此构造一个三角形。程序应该实现如下功能:
 检查用户输入的命令行参数是否足够,如果不够三个参数,则程序可能产生ArrayIndexOutOfBoundsException异常
 检查输入的命令行参数是否为数值格式,如果输入的数值参数格式错误,则程序可能产生NumberFormatException异常
 检查输入的命令行参数中是否有负值,如果有负值,则程序可能产生IiegalArgumentException异常
 检查输入的命令行参数的三个数值是否能够构造一个三角形,如果不能构造一个三角形,则程序可能产生InvailEdgesException异常(InvailEdgesException为自定义异常)

4.打印英式,中式日历

5.统计字符个数,再按字符个数降序排列信息

1.很简单,直接求解即可。(为了方便我直接写在一个类里面了)

package Homework;

import java.util.Scanner;
/**
  *试编写Java代码实现一个计数器类Computer其中包括:
  *域value :用来保存计数器的当前值;
  *方法increment(): 计数器加一;
  *方法decrement() :计数器减一;
  *方法reset():计数器清零。
  *请编写并测试程序。
  */
public class Test1 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个数字");
		int num = sc.nextInt();
		Computer k = new Computer(num);
		System.out.print(num+"加1后为:");
		k.increment(num);
		k.printInfo();
		System.out.print("再减1后为:");
		k.decrement(num);
		k.printInfo();
		System.out.print("归零:");
		k.reset(num);
		k.printInfo();
	}
}

class Computer {
	private int count;

	public Computer(int count) {
		super();
		this.count = count;
	}

	public void increment(int count) {
		this.count++;
	}

	public void decrement(int count) {
		this.count--;
	}

	public void reset(int count) {
		this.count = 0;
	}

	public void printInfo() {
		System.out.println(count);
	}
}

2.先将字符全都放在一个list中,再用hash表的去重性,循环即可实现

Math.random() * all.size()   表示在整个size大小的数字下取随机数

package Homework;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * 要求产生10个随机的字符串,字符串由大小写英文字母和数字组成,每一个字符串
 * 互相不重复,每一个字符串中组成的字符(a-z,A-Z,0-9)也不相同,每个字符串长度为10;
 */
public class RandomStr {
	public static void main(String[] args) {
		//String filename=RandomStringUtils.randomAlphanumeric(10);
		List<Character> all = new ArrayList<Character>();
		Set<Character> ran = new HashSet<Character>();
		for (char i = 'a'; i <= 'z'; i++) {
			all.add(i);
		}
		for (char i = 'A'; i <= 'Z'; i++) {
			all.add(i);
		}
		for (char i = '0'; i <= '9'; i++) {
			all.add(i);
		}
		for (int i = 0; i < 10; i++) {
			ran.clear();
			for (int j = 0; j < 10; j++) {
				int a = (int) (Math.random() * all.size());
				ran.add(all.get(a));
			}
			for (char c : ran) {
                System.out.print(c);
            }
			System.out.println();
		}
	}
}

3.实现异常命令即可

package Homework;
/**
 * 编写程序,实现从命令行输入三个数值参数作为三角形的三条边,以此构造一个三角形。程序应该实现如下功能:
 * 检查用户输入的命令行参数是否足够,如果不够三个参数,则程序可能产生ArrayIndexOutOfBoundsException异常
 * 检查输入的命令行参数是否为数值格式,如果输入的数值参数格式错误,则程序可能产生NumberFormatException异常
 * 检查输入的命令行参数中是否有负值,如果有负值,则程序可能产生IiegalArgumentException异常
 * 检查输入的命令行参数的三个数值是否能够构造一个三角形,如果不能构造一个三角形,则程序可能产生InvailEdgesException异常(InvailEdgesException为自定义异常)
 */
public class Triangle {
	public static void main(String[] args) throws InvailEdgesException {
		int a = Integer.parseInt(args[0]);
		int b = Integer.parseInt(args[1]);
		int c = Integer.parseInt(args[2]);
		if (args.length != 3) {
			throw new ArrayIndexOutOfBoundsException("请输入三个参数");
		}
		for (int i = 0; i < args.length; i++) {
			try {
				Integer.valueOf(args[i]);
			} catch (Exception e) {
				throw new NumberFormatException("请输入数值");
			}
			if (Integer.valueOf(args[i]) < 0)
				throw new IllegalArgumentException("请输入正数");
		}
		if (a >= b + c || b >= a + c || c >= a + b)
			throw new InvailEdgesException("不能够构造一个三角形");
		System.out.println(a + " " + b + " " + c + " " + "这三条边可以构成三角形");
	}
}

// 自定义的异常类
class InvailEdgesException extends Exception {
	public InvailEdgesException(String message) {
		super(message);
	}
}

4.(1)英式日历

package Afternoon;

import java.util.Calendar;

public class Test12 {
	// 打印2018年日历
	public static void main(String[] args) {
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, 2018);
		System.out.println("\t\t2018年日历\t\t");
		for (int i = 0; i < 12; i++) {
			System.out.println("---------------第" + (i + 1) + "月------------------");
			cal.set(Calendar.MONTH, i);
			generateCal(cal);
		}
	}

	private static void generateCal(Calendar cal) {
		// 将时间移动到本月的第一天
		cal.set(Calendar.DAY_OF_MONTH, 1);
		// 本月第一天在所在周是第几天
		int start = cal.get(Calendar.DAY_OF_WEEK);
		// 打印日历头
		System.out.println("日\t一\t二\t三\t四\t五\t六");
		for (int i = 1; i <= 7 * 6; i++) {
			if (i < start) {
				System.out.print("\t");
				continue;
			}
			System.out.print(cal.get(Calendar.DATE) + "\t");
			// 打印7天空一行
			if (i % 7 == 0) {
				System.out.println();
			}
			// 判断是否到月末
			if (cal.get(Calendar.DATE) == cal.getActualMaximum(Calendar.DAY_OF_MONTH)) {
				break;
			}
			// 日期的值增加
			cal.add(Calendar.DATE, 1);
		}
		System.out.println();
	}
}

(2)中式日历(即在英式日历上做小小的修改,把星期天放在最后即可)

package Homework;
/**
 * 打印中国式日历
 */
import java.util.Calendar;

public class CHcalendar {
	public static void main(String[] args) {
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, 2018);
		System.out.println("\t\t2018年日历\t\t");
		for (int i = 0; i < 12; i++) {
			System.out.println("----------------第" + (i + 1) + "月-----------------");
			cal.set(Calendar.MONTH, i);
			generateCal(cal);
		}
	}

	private static void generateCal(Calendar cal) {
		// 将时间移动到本月的第一天
		cal.set(Calendar.DAY_OF_MONTH, 1);
		// 本月第一天在所在周是第几天
		int start = cal.get(Calendar.DAY_OF_WEEK);
		if (start == 1) {
			start = 7;
		} else
			start -= 1;
		// 打印日历头
		System.out.println("一\t二\t三\t四\t五\t六\t日");
		for (int i = 1; i <= 7 * 6; i++) {
			if (i < start) {
				System.out.print("\t");
				continue;
			}
			System.out.print(cal.get(Calendar.DATE) + "\t");
			// 打印7天空一行
			if (i % 7 == 0) {
				System.out.println();
			}
			// 判断是否到月末
			if (cal.get(Calendar.DATE) == cal.getActualMaximum(Calendar.DAY_OF_MONTH)) {
				break;
			}
			// 日期的值增加
			cal.add(Calendar.DATE, 1);
		}
		System.out.println();
	}
}

5.

package Homework;
/**
 * 统计字符个数,再按字符个数降序排列信息
 */
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;

public class StatisticNum {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("请输入一个字符串:");
		String str = sc.nextLine();
		// 将str转换成字符数组
		char[] chs = str.toCharArray();
		// 将字符数组中的元素放入hashmap中
		Map<Character, Integer> map = new HashMap<Character, Integer>();
		for (int i = 0; i < chs.length; i++) {
			Integer num = map.get(chs[i]);
			if (num == null)
				// 第一次遇到这个字符
				map.put(chs[i], 1);
			else
				// 不是第一次遇到这个字符
				map.put(chs[i], num + 1);
		}
		System.out.println("按出现的字符降序排列:");
		// 排序
		// 将map转换成list
		Set<Entry<Character, Integer>> set = map.entrySet();
		ArrayList<Entry<Character, Integer>> list = new ArrayList<Entry<Character, Integer>>(set);
		Collections.sort(list, new NumComparator());
		for (Entry<Character, Integer> ey : list) {
			System.out.println(ey.getKey() + ":" + ey.getValue());
		}
	}
}

class NumComparator implements Comparator<Entry<Character, Integer>> {
	public int compare(Entry<Character, Integer> ey1, Entry<Character, Integer> ey2) {
		return ey2.getValue() - ey1.getValue();
	}
}


 

猜你喜欢

转载自blog.csdn.net/qq_40859235/article/details/81158119
今日推荐