1.2.1.設計一個Student類,該類中包括學生的姓名和成績。創建Student類的5個對象,如下所示:
姓名 |
成績 |
劉德華 |
85 |
張學友 |
100 |
劉傑 |
65 |
章子怡 |
58 |
周迅 |
76 |
將以上5個對象放入LinkedList中,
完成如下操作和統計:
1、輸出LinkedList中的對象個數。
2、刪除姓名爲「劉傑」的學生信息,並輸出LinkedList中現有學生信息。
3、將姓名爲「劉德華」的學生成績改爲95。
4、輸出成績不及格的學生姓名
源代碼:
package jihe;
import java.util.List;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
class Student implements Comparable<Student>
{
String name;
int sore;
public Student(String name, int sore) {
super();
this.name = name;
this.sore = sore;
}
@Override
public String toString() {
return "Student [name=" + name + ", sore=" + sore + "]";
}
@Override
public int compareTo(Student o) {
return this.name.compareTo(o.name);
}
}
public class Student類 {
public static void main(String[] args) {
List<Student> list=new ArrayList<Student>();
Collections.addAll(list,new Student("劉德華",85),new Student("張學友",100),new Student("劉傑",65),new Student("章子怡",58),new Student("周迅",78) );
System.out.println(list);
System.out.println(list.size());
for(int i=list.size()-1;i>=0;i--)
{
if(list.get(i).name.equals("劉傑"))
{
list.remove(i);
}
if(list.get(i).name.equals("劉德華"))
{
list.get(i).sore=95;
}
}
for(int i=list.size()-1;i>=0;i--)
if(list.get(i).sore<60)
{
System.out.println(list.get(i));
}
System.out.println(list);
}
}
1.2.2編寫一個ArrayList類,用來存儲1到10之間的數,打亂順序後輸出,按從小到大輸出,按從大到小輸出。
package jihe;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ArrayList打亂順序輸出 {
public static void main(String[] args) {
List<Integer> list=new ArrayList <Integer>();
for(int i=0;i<10;i++)
list.add(i);
Collections.shuffle(list);
System.out.println(list);
Collections.sort(list);
System.out.println(list);
Collections.reverse(list);
System.out.println(list);
}
}
1.2.4十五個猴子圍成一圈選大王,依次1-7 循環報數,報到7 的猴子被淘汰,直到最後一隻猴子成爲大王。問,哪隻猴子最後能成爲大王?(選擇一個適當的集合)
package jihe;
class JosephLoop
{ //n爲環中人數,m爲每次報數的人數,k爲報數的起始位置0~n-1
int n,m,k;
int[] persons;
int[] seq;
JosephLoop(int n, int k, int m){
this.n = n;
this.m = m;
this.k = k;
persons = new int[n];
seq = new int[n];
}
public void showSeq(){
for (int x:seq )
{
System.out.print(x+" ");
}
}
//殺死則把數組persons的相應位置的值賦值爲1,活這時候值默認爲0
public void calcLoop(){
for(int j=0;j<n;j++)
{
int index=k;
for (int i=1; i<=m ; index++)
{
if (persons[index%n]==0)//如果此人還活着則i++
{
i++;
}
}
persons[(index-1)%n] = 1;//表示相應位置的人被殺死
seq[j] = (index-1)%n;//輸出數組相應位置的人
k = (index)%n;//控制起始位置
}
}
}
class 約瑟環
{
public static void main(String[] args)
{
JosephLoop jose = new JosephLoop(15,0,7); //n,k,m
jose.calcLoop();
jose.showSeq();
}
}
1.2.5.定義一個Set,向Set中存儲5個人名,其中有兩個是重複的,輸出Set集合的數據,通過for each,和Iterator兩種方法。
package jihe;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class Set輸出 {
public static void main(String[] args) {
Set<String> set=new HashSet<String>();
set.add("李易峯");
set.add("張傑");
set.add("李榮浩");
set.add("李健");
set.add("馮提莫");
set.add("李易峯");
for(String i:set)
{
System.out.println(i);
}
System.out.println("1111111111");
Iterator<String> ite=set.iterator();
while(ite.hasNext())
{
System.out.println(ite.next());
}
}
}
1.2.6:編寫一個例子,測試Stack的push和pop方法
package jihe;
import java.util.Stack;
public class 棧的輸入和輸出 {
public static void main(String[] args) {
Stack<String> stack=new Stack<String>();
stack.push("李易峯");
stack.push("張傑");
stack.push("李榮浩");
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
}
}
1.2.7編寫一個22選5的彩票選號程序。每次選出不同的五組號碼,並輸出到控制檯中。
package jihe;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;
public class Work22選五 {
public static void main(String[] args) {
Set<Integer> set=new HashSet<Integer>();
Random random=new Random();
for(int i=1;set.size()<5;i++)
{
set.add(random.nextInt(22)+1);
}
System.out.println(set);
}
}
1.2.8 * 編寫一個撲克類(每張撲克有花色和數值,例如紅心A,草花10),將52張撲克牌放到集合中(自己去選擇集合類)
編寫3個方法
方法1.將集合中的所有撲克重新洗牌,並將撲克輸出(打印出來即可)
方法2.將集合中的所有撲克排序(按方塊3~方塊2,草花3~草花2, 紅心3~紅心2, 黑桃3~黑桃2的順序排序)
方法3:比較兩張撲克牌的大小,如果版面的值相等,則按(黑桃->紅心->草花->方塊)的順序進行排列
測試以上方法
package jihe;
import java.util.*;
class Poke implements Comparable<Poke>
{
private final static String [] STYLES= {"方塊","草花","紅心","黑桃"};
private final static String [] VALUES= {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
int style;//面值
int values; //花色
public Poke(int style, int values) {
this.style = style;
this.values = values;
}
@Override
public String toString() {
return STYLES[style] + VALUES[values];
}
@Override
public int compareTo(Poke o) {
return style==o.style?this.values-o.values:this.style-o.style;
}
}
class PokeCard
{
List<Poke> list=new ArrayList<Poke>();
public PokeCard()
{
//初始化52張牌
for(int i=0;i<52;i++)
{
list.add(new Poke(i%4,i/4));
}
}
//打亂順序
public void shuffle()
{
Collections.shuffle(list);
}
//排序1
public void sort()
{
Collections.sort(list);
}
//排序2
public void sort2()
{
Collections.sort(this.list,new MycomParator6());
}
//輸出
public void show()
{
for(Poke i:list)
System.out.println(i);
}
}
class MycomParator6 implements Comparator<Poke>
{
@Override
public int compare(Poke o1, Poke o2)
{
return o1.values==o2.values?o1.style-o2.style:o1.values-o2.values;
}
}
public class poke6 {
public static void main(String[] args) {
PokeCard card=new PokeCard();
card.show();
System.out.println("11111111111111111111111");
card.shuffle();
card.show();
System.out.println("22222222222222");
card.sort();
card.show();
System.out.println("333333333333333");
card.sort2();
card.show();
}
}
1.2.9 *自已實現一個動態數組類,爲這個類添加如下方法
class DynamicArray{
public void add(Object obj); //追加一個新元素
public void add(int index,Object obj); //在某個位置插入一個元素
public void remove(int index); //刪除指定位置的元素
public Object get(int index); //根據索引,獲得某個位置的元素
public void set(int index,Object obj); //修改指定位置的元素
public boolean contain(Object obj);//是否包含某個元素
}
1.2.11(Map)利用Map,完成下面的功能:
1.從命令行讀入一個字符串,表示一個年份,輸出該年的世界盃冠軍是哪支球隊。如果該
年沒有舉辦世界盃,則輸出:沒有舉辦世界盃。
2. 讀入一支球隊的名字,輸出該球隊奪冠的年份列表。
例如,讀入「巴西」,應當輸出
1958 1962 1970 1994 2002
讀入「荷蘭」,應當輸出
沒有獲得過世界盃
附:世界盃冠軍以及對應的奪冠年份,請參考本章附錄。
附錄
1. 截止到2009 年爲止,歷屆世界盃冠軍
package jihe;
import java.security.KeyStore.Entry;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
public class 世界盃 {
//根據Value取Key
public static void getKeyByValue(Map map, Object value) {
String keys="";
Iterator it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entry = (java.util.Map.Entry) it.next();
Object obj = entry.getValue();
if (obj != null && obj.equals(value)) {
keys=(String) entry.getKey();
System.out.println(keys);
}
}
}
public static void main(String[] args) {
Map<String,String> map=new HashMap<String,String>();
map.put("2006", "意大利");
map.put("2002", "巴西");
map.put("1998", "法國");
map.put("1994", "巴西");
map.put("1990", "德國");
map.put("1986", "阿根廷");
map.put("1982", "意大利");
map.put("1978", "阿根廷");
map.put("1974", "德國");
map.put("1970", "巴西");
map.put("1966", "英格蘭");
map.put("1962", "巴西");
map.put("1958", "巴西");
map.put("1954", "德國");
map.put("1950", "烏拉圭");
map.put("1938", "意大利");
map.put("1934", "意大利");
map.put("1930", "烏拉圭");
System.out.println("請輸入一個年份:");
Scanner scanner=new Scanner(System.in);
String s=map.get(scanner.next());
if(s.equals(null)==false)
{
System.out.println("該年的冠軍是:"+s);
}
else
{
System.out.println("沒有舉辦世界盃!!!");
}
System.out.println("請輸入相應的國家:");
String s1=scanner.next();
if(map.containsValue(s1))
{
getKeyByValue(map,s1);
}
else
{
System.out.println("沒有獲得過世界盃!!!");
}
}
}
1.2.12. (Map)已知某學校的教學課程內容安排如下:
完成下列要求:
1) 使用一個Map,以老師的名字作爲鍵,以老師教授的課程名作爲值,表示上述
課程安排。
2) 增加了一位新老師Allen 教JDBC
3) Lucy 改爲教CoreJava put方法
4) 遍歷Map,輸出所有的老師及老師教授的課程(Set<Map.Entry<String,String>>、Set<String> get(key))
5) *利用Map,輸出所有教JSP 的老師
package jihe;
import java.util.*;
public class 教學課程 {
public static void getKeyByValue(Map map, Object value) {
String keys="";
Iterator it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entry = (java.util.Map.Entry) it.next();
Object obj = entry.getValue();
if (obj != null && obj.equals(value)) {
keys=(String) entry.getKey();
System.out.println(keys);
}
}
}
public static void main(String[] args) {
Map<String,String> map=new HashMap<String,String>();
map.put("Tom", "CoreJava");
map.put("John", "Oracle");
map.put("Susan", "Oracle");
map.put("Jerry", "JDBC");
map.put("Jim", "Unix");
map.put("Kevin", "JSP");
map.put("Luck", "JSP");
System.out.println(map.entrySet());
map.put("Allen", "JDBC");
map.put("Lucy", "Corejava");
System.out.println(map.entrySet());
System.out.println("輸出所有教JSP 的老師爲:");
getKeyByValue(map,"JSP");
}
}
1.2.13**(綜合)有如下Student 對象
其中,classNum 表示學生的班號,例如「class05」。
有如下List
List list = new ArrayList();
list.add(new Student(「Tom」, 18, 100, 「class05」));
list.add(new Student(「Jerry」, 22, 70, 「class04」));
list.add(new Student(「Owen」, 25, 90, 「class05」));
list.add(new Student(「Jim」, 30,80 , 「class05」));
list.add(new Student(「Steve」, 28, 66, 「class06」));
list.add(new Student(「Kevin」, 24, 100, 「class04」));
在這個list 的基礎上,完成下列要求:
1) 計算所有學生的平均年齡
2) 計算各個班級的平均分
class05:3個學生,總分:,平均分:
class04:3個學生,總分:,平均分:
class06:3個學生,總分:,平均分:
package jihe;
import java.util.*;
class Stydent2
{
String name;
int age;
double score;
String classNum;
public Stydent2(String name, int age, double score, String classNum) {
super();
this.name = name;
this.age = age;
this.score = score;
this.classNum = classNum;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public String getClassNum() {
return classNum;
}
public void setClassNum(String classNum) {
this.classNum = classNum;
}
@Override
public String toString() {
return "Stydent2 [name=" + name + ", age=" + age + ", score=" + score + ", classNum=" + classNum + "]";
}
}
public class student對象 {
public static void main(String[] args) {
List<Stydent2> list = new ArrayList<Stydent2>();
list.add(new Stydent2("Tom", 18,100,"class05"));
list.add(new Stydent2("Jerry", 22, 70, "class04"));
list.add(new Stydent2("Owen", 25, 90, "class05"));
list.add(new Stydent2("Jim", 30,80 , "class05"));
list.add(new Stydent2("Steve", 28, 66, "class06"));
list.add(new Stydent2("Kevin", 24, 100, "class04"));
int pjage=0;
int pjscore[]=new int[3];
int count[]=new int[3];
for(int i=0;i<list.size();i++)
{
pjage+=list.get(i).getAge();
if(list.get(i).getClassNum().equals("class04"))
{
pjscore[0]+=list.get(i).getScore();
count[0]++;
}
if(list.get(i).getClassNum().equals("class05"))
{
pjscore[1]+=list.get(i).getScore();
count[1]++;
}
if(list.get(i).getClassNum().equals("class06"))
{
pjscore[2]+=list.get(i).getScore();
count[2]++;
}
}
System.out.println("平均年齡爲:"+pjage/list.size());
System.out.println("class04平均分數爲:"+pjscore[0]/count[0]+"該班共有學生人數爲:"+count[0]+"人");
System.out.println("class05平均分數爲:"+pjscore[1]/count[1]+"該班共有學生人數爲:"+count[1]+"人");
System.out.println("class06平均分數爲:"+pjscore[2]/count[2]+"該班共有學生人數爲:"+count[2]+"人");
}
}
1.2.14 *微信紅包的實現
封裝一個微信紅包類,主要的功能有
紅包中存有錢,多少個人分;每個分到的錢數,及獲收紅包的時間;
主要的功能有
打開紅包;(如果打開紅包的人數沒有達到上限,則可以打開,並隨機獲得金額)
查看紅包分配信息;
設置截止日期;(如果超過最大金額,則再打時提示過期)
例如紅包中的錢數爲500;分成10個包
在1到499之間產生9個不重複的值,並排序即可;
package jihe;
import java.util.*;
public class 微信紅包 {
public static void main(String[] args) {
Random r = new Random();
List<Integer> list = new ArrayList<Integer>();
int[] s = new int[9];
for (int i = 0; i < 9; i++) {
s[i] = r.nextInt(499) + 1;
}
Arrays.sort(s);
list.add(s[0]);
for (int i = 1; i < 9; i++) {
list.add(s[i] - s[i - 1]);
}
list.add(500 - s[8]);
while (list.size() != 0) {
System.out.println("恭喜你搶到了" + list.get(0));
list.remove(0);
}
Date date=new Date();
System.out.println("紅包已過期");
System.out.println(date);
}
}
1.2.15魔術師發牌問題
魔術師手中有A、2、3……J、Q、K十三張黑桃撲克牌。在表演魔術前,魔術師已經將他們按照一定的順序疊放好(有花色的一面朝下)。魔術表演過程爲:一開始,魔術師數1,然後把最上面的那張牌翻過來,是黑桃A;然後將其放到桌面上;第二次,魔術師數1、2;將第一張牌放到這些牌的最下面,將第二張牌翻轉過來,正好是黑桃2;第三次,魔術師數1、2、3;將第1、2張牌依次放到這些牌的最下面,將第三張牌翻過來正好是黑桃3;……直到將所有的牌都翻出來爲止。問原來牌的順序是如何的。
package jihe;
/**
**問題名稱:魔術師發牌問題
*問題描述:魔術師手裏一共有13張牌,全是黑桃,1~13.
*********魔術師需要實現一個魔術:這是十三張牌全部放在桌面上(正面向下),
********第一次摸出第一張,是1,翻過來放在桌面上。
******第二次摸出從上往下數第二張,是2,翻過來 放在桌面上,(第一張放在最下面去,等會兒再摸),
*****第三次摸出從上往下數第三張,是3,翻過來放在桌面上,(第一張和第二張 放在最下面去,等會兒再摸)
*** 以此類推 最後一張就是13
*
* 方法:
* 1、創建一個長度爲13的單向循環鏈表,鏈表中值全部存0
* 2、遍歷鏈表進行修改值
* @author wyl
*
*/
public class 魔術師 {
private Node head; //定義鏈表的頭結點
/**
* 創建鏈表中的Node類
*/
class Node{
private Integer data;
private Node next;
public Node(){
}
public Node(Integer data){
this(data, null);
}
public Node(Integer data, Node next) {
this.data = data;
this.next = next;
}
public Integer getData() {
return data;
}
public void setData(Integer data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
/**
* 構造函數中直接初始化長度爲13的循環鏈表
* 第一個節點的值默認爲1
*/
public 魔術師(){
head = new Node(1);
Node p = head ;
int i = 1;
while(p.next == null && i < 13){
Node newNode = new Node(0);
p.next = newNode;
p = p.next;
i++;
}
p.next = head; //構建循環鏈表
}
//打印循環鏈表
public void print(){
Node p = head;
int i = 0;
while(i++<13){
System.out.print(p.data + "、");
p = p.next ;
}
}
//循環修改節點的值
public void magic(){
int i = 2; //從2開始存數字到13
Node p = head; //指針p指向head,用來控制每次指針移動的下一個位置
for(;i<=13;i++){
for(int j = 0; j<i; j++){
p = p.next;
if(p.data != 0){
j--;
}
}
p.data = i;
}
}
public static void main(String[] args) {
魔術師 magicCord = new 魔術師();
magicCord.print();
magicCord.magic();
System.out.println();
magicCord.print();
}
}
1.2.16 價格標籤丟失(京東筆試題)
超市有商品若干,每個商品都對應一個價格標籤,標籤已經寫好價格,但還沒放置到對應的商品上,如果某一顧客已經購買了n種商品,每種商品都有對應的數量,求出最少花費和最多花費;
提示,已經寫好的價格標籤可存在數組中,每種商品的數量也可存在數據中;
例如:int[] price={78,2,54,12,90,100,23,5,12};
int[] amount={4,7,1,9,4};
package jihe;
import java.util.Collection;
import java.util.Collections;
public class 京東筆試題 {
static void sort(int [] a)
{
for(int i=0;i<a.length-1;i++)
{
for(int j=0;j<a.length-i-1;j++)
{
if(a[j]>a[j+1])
{
int c=a[j];
a[j]=a[j+1];
a[j+1]=c;
}
}
}
}
public static void main(String[] args) {
int[] price={78,2,54,12,90,100,23,5,12};
int[] amount={4,7,1,9,4};
sort(price);
for(int i:price)
System.out.print(i+" ");
System.out.println();
sort(amount);
for(int i:amount)
System.out.print(i+" ");
System.out.println();
int max=0;
int jj=price.length-amount.length;
for(int i=0;i<amount.length;i++)
{
max+=(amount[i]*price[jj]);
jj++;
}
System.out.println(max);
int min=0;
int gg=amount.length-1;
for(int i=0;i<amount.length;i++)
{
min+=(amount[gg]*price[i]);
gg--;
}
System.out.println(min);
}
}
1.2.10. (Map)關於下列Map 接口中常見的方法(填空)
put 方法表示放入一個鍵值對,如果鍵已存在則則替換,如果鍵不存在則
則添加。
remove 方法接受_1__個參數,表示_如果存在一個鍵的映射關係,則將其從此映射中移除(可選操作)。
get 方法表示__key_____對應的_______values_________,get 方法的參數表示__key_,返回值表示_values_。
要想獲得Map 中所有的鍵,應該使用方法__keyset________,該方法返回值類型爲__set___。
要想獲得Map 中所有的值,應該使用方法___values________,該方法返回值類型爲___collection___。
要想獲得Map 中所有的鍵值對的集合,應該使用方法____entryset_______,該方法返回一個
___Map.Entry<K,V>
類型所組成的Set。