java基礎(五):for迴圈和一維陣列
阿新 • • 發佈:2019-02-02
import java.util.Random;
import java.util.Scanner;
class DouDiZhu
{
public static void main(String[] args)
{
//1. 生成54張牌 -- 不需要引數,返回值String[]
String[] pic = create();
//2. 洗牌 - 需要返回String[]陣列(洗好的牌),還需要引數-String[](剛剛生成的牌)
String[] pic1 = shuffle(pic);
//3. 發牌 - 不返回資料,但是需要String[]引數(洗好的牌),如果不返回的話,那麼叫地址就只能寫在發牌中
fapai(pic1);
}
//負責建立54張牌並且返回
public static String[] create()
{
/*
54張牌分為幾種花色:
4
每一種花色多少張:
13
這13張牌的點數固定嗎?
固定
["紅桃","黑桃","方塊","梅花"]
["2","3","4","5","6","7","8","9","10","J","Q","K","A"]
紅桃2 紅桃3 紅桃4 紅桃5.......
黑桃2 黑桃3 黑桃4 黑桃5......
*/
String[] colors = {"紅桃","黑桃","方塊","梅花"};
String[] numbers = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
String[] pic = new String[54]; //用來儲存生成的54張牌
int index = 0;
for(int i=0; i < colors.length; i++) //遍歷的是顏色
{
for(int j =0; j < numbers.length; j++)
{
pic[index++] = colors[i] + numbers[j];
}
}
pic[index++] = "大王";
pic[index++] = "小王";
//測試一下54張牌是否真的成功建立了,如果建立成功了則接著寫下一步,如果沒有成功則除錯(system.out.println)成功以後再寫下一步
/* 正常情況下測試程式碼是需要刪掉的
for(int i =0; i < pic.length; i++)
{
System.out.println(pic[i]);
}
*/
return pic;
}
//洗牌
public static String[] shuffle(String[] pic)
{
/*
洗牌的思路
隨機2個下標出來,然後交換一下他們的值 - 亂序一組牌
比如隨機:
0,11
2,53
6,14
難點:
如何去隨機一個數字,讓這個數字的範圍是0-53之間不能超過這個範圍
Random
第一步生成一個Random型別的變數,並完成初始化操作
Random r = new Random();
第二步生成一個指定範圍的隨機數
int x = r.nextInt(54); // 0- 53 // 留一個作業:如果不跟引數隨機得到的結果是什麼
*/
Random r = new Random();
int count = 200;
String temp = null; //定義一個臨時變數來中轉一下
int x = -1;
int y = -1;
while(count > 0)
{
x = r.nextInt(54);
y = r.nextInt(54);
temp = pic[x];
pic[x] = pic[y];
pic[y] = temp;
count--;
}
return pic;
}
//發牌
public static void fapai(String[] pic)
{
// 1. 首先定義三個String的陣列來分別存放三個玩家的牌,長度是20
//2. 用傳遞過來的洗好的牌來發給三個玩家
//3. 用Scanner來接受一個int型別的數,如果只是1代表搶地主,如果只是其他則表示不槍
//4. 根據使用者輸入的所有的整數來決定將最後的三張牌發給哪個玩家
Scanner sc = new Scanner(System.in);
int index =0;
int i=0;
String [] w1 = new String[20];
String [] w2 = new String[20];
String [] w3 = new String[20];
for(i=0;i<17;i++)
{
w1[i]=pic[index++];
w2[i]=pic[index++];
w3[i]=pic[index++];
}
int m =sc.nextInt();
int n =sc.nextInt();
int k =sc.nextInt();
if (m==1)
{
w1[17]=pic[pic.length-3];
w1[18]=pic[pic.length-2];
w1[19]=pic[pic.length-1];
}
else if (n==1)
{
w2[17]=pic[pic.length-3];
w2[18]=pic[pic.length-2];
w2[19]=pic[pic.length-1];
}
else if (k==1)
{
w3[17]=pic[pic.length-3];
w3[18]=pic[pic.length-2];
w3[19]=pic[pic.length-1];
}
for(i=0;i<w1.length;i++)
{
System.out.print(w1[i]+" ");
}
System.out.println();
/*for(i=0;i<w1.length;i++)
{
System.out.print(w2[i]+" ");
}
System.out.println();
for(i=0;i<w1.length;i++)
{
System.out.print(w3[i]+" ");
}
System.out.println();*/
}
}
import java.util.Scanner;
class DouDiZhu
{
public static void main(String[] args)
{
//1. 生成54張牌 -- 不需要引數,返回值String[]
String[] pic = create();
//2. 洗牌 - 需要返回String[]陣列(洗好的牌),還需要引數-String[](剛剛生成的牌)
String[] pic1 = shuffle(pic);
//3. 發牌 - 不返回資料,但是需要String[]引數(洗好的牌),如果不返回的話,那麼叫地址就只能寫在發牌中
fapai(pic1);
}
//負責建立54張牌並且返回
public static String[] create()
{
/*
54張牌分為幾種花色:
4
每一種花色多少張:
13
這13張牌的點數固定嗎?
固定
["紅桃","黑桃","方塊","梅花"]
["2","3","4","5","6","7","8","9","10","J","Q","K","A"]
紅桃2 紅桃3 紅桃4 紅桃5.......
黑桃2 黑桃3 黑桃4 黑桃5......
*/
String[] colors = {"紅桃","黑桃","方塊","梅花"};
String[] numbers = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
String[] pic = new String[54]; //用來儲存生成的54張牌
int index = 0;
for(int i=0; i < colors.length; i++) //遍歷的是顏色
{
for(int j =0; j < numbers.length; j++)
{
pic[index++] = colors[i] + numbers[j];
}
}
pic[index++] = "大王";
pic[index++] = "小王";
//測試一下54張牌是否真的成功建立了,如果建立成功了則接著寫下一步,如果沒有成功則除錯(system.out.println)成功以後再寫下一步
/* 正常情況下測試程式碼是需要刪掉的
for(int i =0; i < pic.length; i++)
{
System.out.println(pic[i]);
}
*/
return pic;
}
//洗牌
public static String[] shuffle(String[] pic)
{
/*
洗牌的思路
隨機2個下標出來,然後交換一下他們的值 - 亂序一組牌
比如隨機:
0,11
2,53
6,14
難點:
如何去隨機一個數字,讓這個數字的範圍是0-53之間不能超過這個範圍
Random
第一步生成一個Random型別的變數,並完成初始化操作
Random r = new Random();
第二步生成一個指定範圍的隨機數
int x = r.nextInt(54); // 0- 53 // 留一個作業:如果不跟引數隨機得到的結果是什麼
*/
Random r = new Random();
int count = 200;
String temp = null; //定義一個臨時變數來中轉一下
int x = -1;
int y = -1;
while(count > 0)
{
x = r.nextInt(54);
y = r.nextInt(54);
temp = pic[x];
pic[x] = pic[y];
pic[y] = temp;
count--;
}
return pic;
}
//發牌
public static void fapai(String[] pic)
{
// 1. 首先定義三個String的陣列來分別存放三個玩家的牌,長度是20
//2. 用傳遞過來的洗好的牌來發給三個玩家
//3. 用Scanner來接受一個int型別的數,如果只是1代表搶地主,如果只是其他則表示不槍
//4. 根據使用者輸入的所有的整數來決定將最後的三張牌發給哪個玩家
Scanner sc = new Scanner(System.in);
int index =0;
int i=0;
String [] w1 = new String[20];
String [] w2 = new String[20];
String [] w3 = new String[20];
for(i=0;i<17;i++)
{
w1[i]=pic[index++];
w2[i]=pic[index++];
w3[i]=pic[index++];
}
int m =sc.nextInt();
int n =sc.nextInt();
int k =sc.nextInt();
if (m==1)
{
w1[17]=pic[pic.length-3];
w1[18]=pic[pic.length-2];
w1[19]=pic[pic.length-1];
}
else if (n==1)
{
w2[17]=pic[pic.length-3];
w2[18]=pic[pic.length-2];
w2[19]=pic[pic.length-1];
}
else if (k==1)
{
w3[17]=pic[pic.length-3];
w3[18]=pic[pic.length-2];
w3[19]=pic[pic.length-1];
}
for(i=0;i<w1.length;i++)
{
System.out.print(w1[i]+" ");
}
System.out.println();
/*for(i=0;i<w1.length;i++)
{
System.out.print(w2[i]+" ");
}
System.out.println();
for(i=0;i<w1.length;i++)
{
System.out.print(w3[i]+" ");
}
System.out.println();*/
}
}