Java怎么让数组中元素按照牌值从小到大的顺序排列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java怎么让数组中元素按照牌值从小到大的顺序排列相关的知识,希望对你有一定的参考价值。

数组中元素可能包括四种花色(黑桃、红心、梅花、方块),13种牌值(A、2、3、4、5、6、7、8、9、10、J、Q、K),以及大小王,元素以类似(黑桃A、红心3、大王)的形式存在,有可能有些牌没有,也可能有些牌重复(因为不只一副牌),如何让元素按照(3、4、5、6、7、8、9、10、J、Q、K、A、2、小王、大王)的顺序排列,而且花色牌值都相同的排在一起?

你说的这些牌是用数组来存放的,所以有些麻烦。直接复制运行,更改牌的数量测试,有不懂的再问我

package test;

import java.util.Arrays;
import java.util.Random;

public class DaoTest 

public static void main(String[] args) 
String[] str = getArr(100);
str = sorts(str);
System.out.println(Arrays.toString(str));


/**
 * 从牌堆里抽出n张牌,可以有重复
 * 
 * @param n
 * @return
 */
public static String[] getArr(int n) 
String[] suit =  "黑桃", "红心", "梅花", "方块" ;
String[] number =  "A", "2", "3", "4", "5", "6", "7", "8", "9", "10",
"J", "Q", "K" ;
String[] result = new String[54];
int index = 0;
for (int i = 0; i < suit.length; i++) 
for (int j = 0; j < number.length; j++) 
result[index] = "" + suit[i] + number[j];
index++;



result[52] = "小王";
result[53] = "大王";
String[] some = new String[n];
for (int i = 0; i < n; i++) 
some[i] = result[(new Random()).nextInt(54)];

return some;


/**
 * 将所有牌分为5组,排序后在放到一起
 * @param arr
 * @return
 */
public static String[] sorts(String[] arr) 
System.out.println(Arrays.toString(arr));
StringBuffer ht = new StringBuffer("");
StringBuffer hx = new StringBuffer("");
StringBuffer mh = new StringBuffer("");
StringBuffer fk = new StringBuffer("");
StringBuffer king = new StringBuffer();
for (int i = 0; i < arr.length; i++) 
if (arr[i].length() == 2) 
if (king.toString().isEmpty()) 
king.append(arr[i]);
 else 
king.append("," + arr[i]);

 else if (arr[i].contains("黑桃")) 
if (ht.toString().isEmpty()) 
ht.append(arr[i]);
else
ht.append("," + arr[i]);

 else if (arr[i].contains("红心")) 
if (hx.toString().isEmpty()) 
hx.append(arr[i]);
else
hx.append("," + arr[i]);

 else if (arr[i].contains("梅花")) 
if (mh.toString().isEmpty()) 
mh.append(arr[i]);
else
mh.append("," + arr[i]);

 else 
if (fk.toString().isEmpty()) 
fk.append(arr[i]);
else
fk.append("," + arr[i]);



String[] aht = ht.toString().trim().split(",");
String[] ahx = hx.toString().trim().split(",");
String[] amh = mh.toString().trim().split(",");
String[] afk = fk.toString().trim().split(",");
String[] aking = king.toString().trim().split(",");
aht = sort1(aht);
ahx = sort1(ahx);
amh = sort1(amh);
afk = sort1(afk);
aking = sort1(aking);
String[] result = new String[arr.length];
int index = 0;
if (aht[0].length() != 0) 
for (int i = 0; i < aht.length; i++) 
result[index] = aht[i];
index++;


if (ahx[0].length() != 0) 
for (int i = 0; i < ahx.length; i++) 
result[index] = ahx[i];
index++;


if (amh[0].length() != 0) 
for (int i = 0; i < amh.length; i++) 
result[index] = amh[i];
index++;


if (afk[0].length() != 0) 
for (int i = 0; i < afk.length; i++) 
result[index] = afk[i];
index++;


if (aking[0].length() != 0) 
for (int i = 0; i < aking.length; i++) 
result[index] = aking[i];
index++;


return result;


/**
 * 按照3-J-A-2-小王-大王的顺序排序
 * @param some
 * @return
 */
public static String[] sort1(String[] some) 
if (some.length == 1 && some[0].length() == 0) 
return some;

if (some[0].length() == 2) 
Arrays.sort(some);
String[] result = new String[some.length];
for(int i = 0;i<some.length;i++)
result[i] = some[some.length-1-i];

return result;

String[] result = new String[some.length];
int[] number = new int[some.length];
String suit = "" + some[0].charAt(0) + some[0].charAt(1);
for (int i = 0; i < some.length; i++) 
String s = "" + some[i].substring(2);
if ("A".equals(s)) 
s = "14";
 else if ("J".equals(s)) 
s = "11";
 else if ("Q".equals(s)) 
s = "12";
 else if ("K".equals(s)) 
s = "13";
 else if ("2".equals(s)) 
s = "15";

number[i] = Integer.parseInt(s);

Arrays.sort(number);
for (int i = 0; i < result.length; i++) 
String s = "" + number[i];
if (number[i] == 11) 
s = "J";
 else if (number[i] == 12) 
s = "Q";
 else if (number[i] == 13) 
s = "K";
 else if (number[i] == 14) 
s = "A";
 else if (number[i] == 15) 
s = "2";

result[i] = suit + s;

return result;

参考技术A 运行结果是:
牌值a
花色红桃
牌值2
花色方块
牌值3
花色黑桃
牌值4
花色梅花
牌值5
花色红桃
牌值6
花色方块
牌值7
花色黑桃
牌值8
花色梅花
牌值9
花色红桃
牌值10
花色方块
牌值j
花色黑桃
牌值q
花色梅花
牌值k
花色红桃
牌值a
花色方块
牌值2
花色黑桃
牌值3
花色梅花
牌值4
花色红桃
牌值5
花色方块
牌值6
花色黑桃
牌值7
花色梅花
牌值8
花色红桃
牌值9
花色方块
牌值10
花色黑桃
牌值j
花色梅花
牌值q
花色红桃
牌值k
花色方块
牌值a
花色黑桃
牌值2
花色梅花
牌值3
花色红桃
牌值4
花色方块
牌值5
花色黑桃
牌值6
花色梅花
牌值7
花色红桃
牌值8
花色方块
牌值9
花色黑桃
牌值10
花色梅花
牌值j
花色红桃
牌值q
花色方块
牌值k
花色黑桃
牌值a
花色梅花
牌值2
花色红桃
牌值3
花色方块
牌值4
花色黑桃
牌值5
花色梅花
牌值6
花色红桃
牌值7
花色方块
牌值8
花色黑桃
牌值9
花色梅花
牌值10
花色红桃
牌值j
花色方块
牌值q
花色黑桃
牌值k
花色梅花

如何将数组中的数字按照从小到大的顺序排列???

经过视频的学习,总结了一下,大神们请指教。。。。

如果要将数组中的数字按照从小到大的顺序排列。

完成思路:将最小的数字放在数组的第一项,将第二小的数组放在第二项,一直重复,知道完成。

那么如何将最小的数字放在数组索引为0的位置呢?

示例:

 

for(int j = i+1;j  < arrays.Length;j++)

{

     if (arrays[0] > arrays[j])

     {    

             int temp = arrays[0];

             arrays[0] = arrays[j];

             arrays[j] = temp;

      }

}

实现方法:把第一个位置的数字拿出来依次和后面位置的数字进行比较,如果后面位置的数字大,则交换位置。

代码实现分析:重复的动作,如果索引为0的数字比索引为j的数字大,则交换。j的取值范围是1-arrays.Length-1.

int i = ?;//当前处理的数组索引位

for(int j = i + 1;j  < arrays.Length;j++)

{

     if (arrays[i] > arrays[j])

     {    

             int temp = arrays[i];

             arrays[i] = arrays[j];

             arrays[j] = temp;

      }

}

由于示例中的0表示为当前处理的数组索引,则提出来形成一个变量i,变量j的位置则应该是从索引i的下一项开始。

示例:用交换顺序来实现对int类型的数据arrays从小到大排序:

for(int i = 0;i < arrays.Length - 1; i++)

{

       for(int j = i + 1;j < arrays.Length;i++)

       {

             if (arrays[i] > arrays[j])

             {

                 int temp = arrays[i];

                 arrays[i] = arrays[j];

                  arrays[j] = temp;

              }

           }

同理,对double类型的数组arrays从小到大排序示例:

for(int i = 0;i < arrays.Length - 1;i++)

{

      for (int j = i + 1;j < arrays.Length;j++)

      {

            if (arrays[i] < arrays[j])

            {

               double temp = arrays[i];

               arrays[i] = arrays[j];

               arrays[j] = temp;

             }

       }

}

 

 

上面总结的一些可能会有错误,大神们看到了麻烦告知,感激不尽。。。

以上是关于Java怎么让数组中元素按照牌值从小到大的顺序排列的主要内容,如果未能解决你的问题,请参考以下文章

PHP For 循环 怎么能把 数组 从小到大排列呢

C语言中输入一串字符,怎样让它按照字母从小到大的顺序排列?

如何将数组中的数字按照从小到大的顺序排列???

Java学习之Arrays数组

java 数组顺序排列

编写一个函数swap,将指定数组按照从小到大的顺序排序,