1. 程式人生 > >實驗3 常用類(2學時)

實驗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);

	}

}