基础案例-Arrays数组篇

一.Arrays工具类静态方法典型:

package com.hw.array;

import java.util.Arrays;

/**
 * 这是一个Arrays测试类
 *
 * @author pengjun
 * @version 1.0
 */
public class ArrayTest {

    public static void main(String[] args) {
        int[] a = new int[]{5, 4, 6, 7, 9, 2, 5, 4, 7, 5, 8};//静态初始化
        //排个序
        Arrays.sort(a);//排序有整体排序,也有部分排序方法
        //排序后打印
        System.out.println(Arrays.toString(a));
        //二分法索引key的位置(必须排序后)
        System.out.println(Arrays.binarySearch(a, 4));
        //复制
        int[] b = Arrays.copyOfRange(a, 2, 4);
        System.out.println(Arrays.toString(b));
        //填充
        Arrays.fill(b, 10);
        System.out.println(Arrays.toString(b));
        //判断是否相等
        System.out.println(Arrays.equals(a, b));
    }


}

结果:

[2, 4, 4, 5, 5, 5, 6, 7, 7, 8, 9]
2
[4, 5]
[10, 10]
false

实践1:

package com.hw.array;

import java.util.Arrays;
import java.util.Scanner;

/**
 * 这是一个浮点数转换成人名币读法的小实验
 *
 * @author pengjun
 * @version 1.0
 */
public class NumToChinese {
    private static final String[] chinaArr = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
    private static final String[] untilArr = {"十","佰","千","万"};

    /**
     * 该方法分离整数和小数
     *
     * @return String[]
     */
    private static String[] divide(String num){
        double numDouble = 0;
        try {
            numDouble = Double.parseDouble(num);
        }
        catch (NumberFormatException e) {
            System.out.println("输入有误!数值格式化异常...");
            System.exit(0);
        }

        long zheng = (long)numDouble;
        String xiao = num.split("\\.")[1].substring(0, 2);
        return new String[]{String.valueOf(zheng), xiao};
    }

    private static String readMoney(String num){
        StringBuilder result = new StringBuilder();
        int jishu = 0;
        String[] numStr = divide(num);
        System.out.println("分离结果:"+Arrays.toString(numStr));
        //下面为核心算法
        for (int i = 0; i < numStr[0].length(); i++){
            int n = numStr[0].charAt(i) - 48; //第i个字符ASCII码-48得到int型的值
            if (i == 0 && n == 0)
                result.append(chinaArr[n]);
            if (i == numStr[0].length() - 1 || n == 0){
                if (i == numStr[0].length() - 1){
                    if (n == 0)
                        continue;
                }

                if (n == 0){
                    jishu++;
                    if (jishu > 1){
                        continue;
                    }
                }
                else{
                    jishu = 0;
                }
                result.append(chinaArr[n]);
            }
            else if (n != 0 && i != numStr[0].length() - 1){
                result.append(chinaArr[n]).append(untilArr[numStr[0].length() - 2 - i]);
            }
        }

        if (Integer.valueOf(numStr[1]) != 0) {
            result.append("点");
            for (int j = 0; j < numStr[1].length(); j++){
                int nn = numStr[1].charAt(j) - 48;
                result.append(chinaArr[nn]);
            }
        }
        result.append("圆");

        return result.toString();
    }

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String numStr = scan.nextLine();
        System.out.println(readMoney(numStr));
    }
}

 结果:

10005.36
分离结果:[10005, 36]
壹万零伍点叁陆圆
12305.99
分离结果:[12305, 99]
壹万贰千叁佰零伍点玖玖圆

小结: 

知识点:
static方法调用
Scanner字符串输入
String与其它类型转换
StringBuilder的字符串追加使用
浮点型强转为整型不考虑四舍五入

主要的是核心代码:
转换算法磨了一会儿,需要if判定各种情况!
我的思路:首先for对整数遍历转换,if判断最后一位数和中间连续几个0的情况,其他可以正常输出;主要是第一个if判断中考虑得比较多,要再分情况判断:最后一位若为0则不读取,中间连续几个0则只读一个。小数部分for很简单。
注意:
上面小数部分数值变小,是因为强转成long时,数据溢出,产生误差!

实践2:

package com.hw.array;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Random;

/**
 * 用Arrays工具类写一个简单的五子棋
 *
 * @author pengjun
 * @version 1.0
 */
public class WuZiQi {

    private static int QIPAN_SIZE = 15;
    private static String[][] qiPan;

    /**
     * 初始化棋盘
     */
    private static void init(){
        qiPan = new String[QIPAN_SIZE][QIPAN_SIZE];
        for (int i = 0; i < qiPan[0].length; i++)
            for (int j = 0; j < qiPan[1].length; j++)
                qiPan[i][j] = "?";
        printQiPan();}

    /**
     * 打印或刷新棋盘
     */
    private static void printQiPan(){
        for (String[] i:qiPan){
            for (String j:i) {
                System.out.print(j);
            }
            System.out.println();
        }
        System.out.print("请输入您落子坐标(如:5,3):");
    }

    private static void computerPlay(){
        Random random = new Random();
        int x = random.nextInt(QIPAN_SIZE - 1);
        int y = random.nextInt(QIPAN_SIZE - 1);
        if (qiPan[x][y] == "?"){
            qiPan[x][y] = "❤";
            System.out.println(x+","+y);
        }
        else {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(2000);
                        computerPlay();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }
        printQiPan();
    }

    private static void play(){
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String inputStr = null;
        while(true){
            try {
                if (((inputStr = br.readLine()) != null)){
                    String[] posStrArr = inputStr.split(",");
                    int xPos = Integer.parseInt(posStrArr[0]);
                    int yPos = Integer.parseInt(posStrArr[1]);
                    qiPan[xPos][yPos] = "?";
                    printQiPan();

                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                Thread.sleep(2000);
                                computerPlay();
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }).start();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }

    public static void main(String[] args) {
        init();
        play();
    }
}

结果:

???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
请输入您落子坐标(如:5,3):5,5
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
请输入您落子坐标(如:5,3):13,0
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
请输入您落子坐标(如:5,3):4,4
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
请输入您落子坐标(如:5,3):12,4
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
请输入您落子坐标(如:5,3):3,3
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
请输入您落子坐标(如:5,3):12,5
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
请输入您落子坐标(如:5,3):2,2
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
请输入您落子坐标(如:5,3):8,12
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
???????????????
请输入您落子坐标(如:5,3):

小结:

知识点:
1.二维数组的foreach遍历
for (String[] i : qiPan){
   for (String j : i) {
      System.out.print(j);
 }
2.BufferedReader:
BufferedReader 由Reader类扩展而来,提供通用的缓冲方式文本读取,而且提供了很实用的readLine,
读取一个文本行,从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。
3.Random随机数
4.线程实现Runnable接口

我的思路:
1.初始化棋盘
2.打印棋盘
3.根据输入值对数组赋值(人机使用线程等待两秒,随机落子)
4.重新打印棋盘(刷新)

注意:这个例子纯属娱乐,不完善的地方,请多多包涵!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值