一.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.重新打印棋盘(刷新)
注意:这个例子纯属娱乐,不完善的地方,请多多包涵!