实验3 常用类(2学时)

1、编写一个Java应用程序。用户从键盘输入一个整数,程序将判断这个数是几位数并输出其位数,并判断这个数是否是回文数(是,则输出“是回文数”,否则输出“不是回文数”)。回文数是指将该数含有的数字逆序排列后得到的数和原数相同,例如12121、3223都是回文数。要求:定义两个方法,一个用于获取一个整数的位数,一个用于返回一个整数是否为回文数。

package test1;

import java.util.Scanner;

public class Number {

	static Scanner cin = new Scanner(System.in);

	public static int getDigit(int value) {
		String s = String.valueOf(value);// 将int转为string
		return s.length();
	}

	public static boolean isPalindrome(int value) {
		String s1 = String.valueOf(value);// 将int转为string
		String s2 = new StringBuffer(s1).reverse().toString();// 使用StringBuffer里的reverse方法,将s1反转
		return s1.equals(s2);// 检查是否相等
	}

	public static void main(String[] args) {
		int value;
		value = cin.nextInt();
		value = Math.abs(value);// 按其绝对值计算,保证负数的正确性
		System.out.println(getDigit(value));// 输出位数
		System.out.println(isPalindrome(value));// 输出是否为回文数

	}

}

2、 在安排教师监考时,需要从一组教师中随机选取n个教师参加监考。要求实现一个类RandomTeacher的静态方法public static String[] getRandomTeachers(String[] teachers, int n),能够从teachers中随机选择n个教师(名字)并返回。

package test2;
import java.util.*;

public class RandomTeacher {

	public static String[] getRandomTeachers(String[] teachers, int n) {
		int teacherNum = teachers.length;// 一共有多少个老师
		if (n > teacherNum) {
			return null;
		}
		Set<Integer> s = new HashSet<Integer>();//定义一个Set存放下标(可防止重复)
		while (s.size() < n) {// 选n个老师
			int no = (int) (Math.random() * (teacherNum));// 随机数(0~teacherNum-1);
			s.add(no);
		}
		Iterator<Integer> it=s.iterator();
		String[] luckteachers=new String[n];
		for(int i=0;it.hasNext();i++) {//遍历set
			luckteachers[i]=teachers[it.next()];
		}
		return luckteachers;// 返回这n个被选中的老师

	}

	static Scanner cin = new Scanner(System.in);

	public static void main(String[] args) {

		int n;// 挑选n个老师
		String[] teachers = new String[5];// 存所有的老师的姓名
		String[] luckteachers;// 存被选到的老师的姓名
		teachers[0] = ("Tom1");
		teachers[1] = ("Tom2");
		teachers[2] = ("Tom3");
		teachers[3] = ("Tom4");
		teachers[4] = ("Tom5"); // 初始化一下teachers[]
		n = cin.nextInt();
		if(n<=0) {
			System.out.println("输入不合法");
		}
		luckteachers = RandomTeacher.getRandomTeachers(teachers, n);
		if (luckteachers == null) {
			System.out.println("现有老师数量不足" + n + "个。");
		} else {
			for (int i = 0; i < n; i++) {
				System.out.println(luckteachers[i]);
			}
		}

	}

}

3、 编写一个方法,返回一个double型的二维数组,数组中的元素通过解析字符串参数获得。例如,字符串参数:“1,2;3,4,5;6,7,8”,对应的数组为:

      d[0,0] = 1.0  d[0,1] = 2.0 

      d[1,0] = 3.0  d[1,1] = 4.0  d[1,2] = 5.0 

      d[2,0] = 6.0  d[2,1] = 7.0  d[2,2] = 8.0

package test3;

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

public class DArray {

	static double[][] getDArray(String str) {
		String[] s1 = str.split(";");// 先把str按照“;”分隔开
		double[][] array = new double[s1.length][];// 分配内存

		for (int i = 0; i < s1.length; i++) {
			String[] s2 = s1[i].split(",");// 把s1[i]按照“,”分隔开
			array[i] = new double[s2.length];// 分配内存

			for (int j = 0; j < s2.length; j++) {
				array[i][j] = Double.parseDouble(s2[j]);// string转double
			}
		}
		// 打印并返回
		for (int i = 0; i < array.length; i++) {
			for (int j = 0; j < array[i].length; j++) {
				System.out.print(array[i][j] + " ");
			}
			System.out.println();
		}
		return array;
	}

	static Scanner cin = new Scanner(System.in);

	public static void main(String[] args) {

		String str = new String();
		str = cin.nextLine();// 输入一行合法字符串
		getDArray(str);

	}

}

4、 假设某餐馆中每桌顾客点菜记录的格式为“北京烤鸭:189 西芹百合:15 清蒸鲈鱼:80”(每道菜的价格与下一道菜的名字之间有一个空格)。编写一个类的方法,能够接受键盘录入的符合上述格式的点菜内容字符串,输出点菜记录中每种菜的价格及总价格。

package test4;

import java.util.*;

public class Food {

	static Scanner cin = new Scanner(System.in);

	public static void main(String[] args) {
		String str = cin.nextLine(); // 读入一行合法字符;
		String[] s1 = str.split(" "); // 先按“ ”分隔开,使得每种菜独立
		for (int i = 0; i < s1.length; i++) {// 输出所点的菜名和价格
			System.out.println(s1[i]);
		}
		int sum = 0;// 计算总价格
		for (int i = 0; i < s1.length; i++) {
			String[] s2 = s1[i].split(":");// 按“: ”分隔开(注意冒号是中文的)
			sum += Double.parseDouble(s2[1]);// s2[1]存的是价格,string转double
		}
		System.out.println(sum);

	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值