求大神給出撲克牌插入排序的偽碼及其改進后的JAVA代碼
uj5u.com熱心網友回復:
private static final String[] pokerArray = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
private static final char[] decorArray = {'?','?','?','?'};
/**
* 1.初始化有序陣列,
* 2.提示用戶輸入物件屬性,校驗資料的合法性
* 3.獲取該物件應當插入的下標 :
* i.如果當前物件的點數小于串列中某一物件(list.get(i))的點數,說明當前物件應當插入在某一物件(list.get(i))之前
* ii.如果當前物件的點數的等于串列中某一物件(list.get(i))的點數,比較花色的大小,如果花色小于某一物件(list.get(i))的點數,說明當前物件應當插入在某一物件之前
* iii.如果遍歷結束都沒有找到下標,說明該物件大于當前串列中所有物件,直接插入在最后面即可
*/
public static void main(String[] args) {
ArrayList<Poker> list = initArrayList();;
System.out.println("已經為你隨機生成10張撲克牌,當前撲克牌的順序為:");
list.forEach(System.out::println);
Scanner sc = new Scanner(System.in);
System.out.println("----------------------");
while (true){
String point = "";
do{
try {
System.out.println("請輸入點數:");
point = sc.nextLine();
String finalPoint = point;
if (Arrays.stream(pokerArray).noneMatch(p -> p.equals(finalPoint))){
System.out.println("輸入的點數不合法請重新輸入:");
//置空,繼續進入回圈
point = "";
}
}catch (Exception e){
System.out.println("輸入的點數未識別到,請重新輸入:");
}
}while ("".equals(point));
char decor = ' ';
do{
try {
System.out.println("請輸入花色:");
decor = sc.nextLine().charAt(0);
boolean check = false;
for (char c : decorArray) {
if (c == decor) {
check = true;
break;
}
}
if (!check){
System.out.println("輸入的花色不合法請重新輸入:");
decor = ' ';
}
}catch (Exception e){
System.out.println("輸入的花色未識別到,請重新輸入:");
}
}while (decor ==' ');
Poker p = new Poker(point,decor);
int index = getIndex(list,p);
if (index != -1){
list.add(index,p);
System.out.println("插入成功,當前撲克牌的順序為:");
list.forEach(System.out::println);
}else {
System.out.println("當前已經在該張牌:");
}
}
}
private static ArrayList<Poker> initArrayList() {
ArrayList<Poker> list = new ArrayList<>();
do {
Poker p = new Poker(pokerArray[(int) (Math.random()*13)],decorArray[(int) (Math.random()*4)]);
int index = getIndex(list,p);
if (index != -1){
//牌重復,不添加
list.add(index,p);
}
}while (list.size()<10);
return list;
}
private static int getIndex(ArrayList<Poker> list, Poker p) {
if (list.size() == 0){
return 0;
}
for (int i = 0; i < list.size(); i++) {
//點數小于已排序串列中的第i個物件,說明要插入的位置就在這個元素之前
if (getPointNum(p) < getPointNum(list.get(i))){
return i;
}
if (getPointNum(p) == getPointNum(list.get(i))){
//點數小于相等 花色小于已排序串列中的第i個物件,也說明要插入的位置就在這個元素之前
if (getDecorNum(p) < getDecorNum(list.get(i))){
return i;
}
//如果花色相等,說明重復
if (getDecorNum(p) == getDecorNum(list.get(i))){
return -1;
}
}
}
//遍歷完說明最新的排大于任何一個元素
return list.size();
}
private static int getPointNum(Poker p ){
int point = 0;
for(int i = 0;i<pokerArray.length;i++){
if (pokerArray[i].equals(p.getPoint())){
point = i+1;
}
}
return point;
}
private static int getDecorNum(Poker p ){
int decor = 0;
for(int i = 0;i<decorArray.length;i++){
if (decorArray[i]==p.getDecor()){
decor = i+1;
}
}
return decor;
}
uj5u.com熱心網友回復:
Poker物件代碼
public class Poker {
String point;//點數
Character decor;//花色
public Poker(String point, Character decor) {
this.point = point;
this.decor = decor;
}
public String getPoint() {
return point;
}
public void setPoint(String point) {
this.point = point;
}
public Character getDecor() {
return decor;
}
public void setDecor(Character decor) {
this.decor = decor;
}
@Override
public String toString() {
return "Poker{" +
"point='" + point + '\'' +
", decor='" + decor + '\'' +
'}';
}
}
uj5u.com熱心網友回復:
運行結果:已經為你隨機生成10張撲克牌,當前撲克牌的順序為:
Poker{point='A', decor='?'}
Poker{point='2', decor='?'}
Poker{point='2', decor='?'}
Poker{point='4', decor='?'}
Poker{point='6', decor='?'}
Poker{point='7', decor='?'}
Poker{point='7', decor='?'}
Poker{point='8', decor='?'}
Poker{point='8', decor='?'}
Poker{point='Q', decor='?'}
----------------------
請輸入點數:
4
請輸入花色:
a
輸入的花色不合法請重新輸入:
請輸入花色:
?
當前已經在該張牌:
請輸入點數:
4
請輸入花色:
?
插入成功,當前撲克牌的順序為:
Poker{point='A', decor='?'}
Poker{point='2', decor='?'}
Poker{point='2', decor='?'}
Poker{point='4', decor='?'}
Poker{point='4', decor='?'}
Poker{point='6', decor='?'}
Poker{point='7', decor='?'}
Poker{point='7', decor='?'}
Poker{point='8', decor='?'}
Poker{point='8', decor='?'}
Poker{point='Q', decor='?'}
請輸入點數:
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/41399.html
標籤:Java相關
下一篇:空指標例外,求解決
