首页 > 代码库 > Java数组六

Java数组六

1.了解如何利用二维数组和循环语句绘制五子棋盘

  答:  定义一个二维数组来充当棋盘,定义棋盘大小,初始化棋盘数组,利用for循环使每一个元素赋为“+”,然后输出每个数组元素,每打印完一行后在进行换行。

import java.io.*;

 

public class QiPan

{

//定义一个二维数组来充当棋盘

private String[][] board;

//定义棋盘的大小

private static int BOARD_SIZE = 15;

public void initBoard()

{

//初始化棋盘数组

board = new String[BOARD_SIZE][BOARD_SIZE];

//把每个元素赋为"",用于在控制台画出棋盘

for (int i = 0 ; i < BOARD_SIZE ; i++)

{

for ( int j = 0 ; j < BOARD_SIZE ; j++)

{

board[i][j] = "";

}

}

}

//在控制台输出棋盘的方法

public void printBoard()

{

//打印每个数组元素

for (int i = 0 ; i < BOARD_SIZE ; i++)

{

for ( int j = 0 ; j < BOARD_SIZE ; j++)

{

//打印数组元素后不换行

System.out.print(board[i][j]);

}

//每打印完一行数组元素后输出一个换行符

System.out.print("\n");

}

}

    public static void main(String[] args)throws Exception

    {

        QiPan gb = new QiPan();

gb.initBoard();

gb.printBoard();

//这是用于获取键盘输入的方法

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String inputStr = null;

                System.out.println("请输入您下棋的座标,应以x,y的格式:");

//br.readLine():每当在键盘上输入一行内容按回车,刚输入的内容将被br读取到。

while ((inputStr = br.readLine()) != null)

{

//将用户输入的字符串以逗号(,)作为分隔符,分隔成2个字符串

String[] posStrArr = inputStr.split(",");

//2个字符串转换成用户下棋的座标

int xPos = Integer.parseInt(posStrArr[0]);

int yPos = Integer.parseInt(posStrArr[1]);

//把对应的数组元素赋为""

gb.board[xPos - 1][yPos - 1] = "";

/*

 电脑随机生成2个整数,作为电脑下棋的座标,赋给board数组。

 还涉及

1.座标的有效性,只能是数字,不能超出棋盘范围

2.如果下的棋的点,不能重复下棋。

3.每次下棋后,需要扫描谁赢了

 */

gb.printBoard();

System.out.println("请输入您下棋的座标,应以x,y的格式:");

}

    }

}

 

2.请编写一个程序将一个整数转换为汉字读法字符串。比如1123”转换为“一千一百二十”。

    public class Test {

    public static void test(int d) {

 

        String[] str = { "", "", "", "", "", "", "", "", "", "" };

 

        String ss[] = new String[] { " ", "", "", "", "", "", "", "", "亿" };

        String s = String.valueOf(d);

        System.out.println(s);

        StringBuffer sb = new StringBuffer();

        for (int i = 0; i < s.length(); i++) {

            String index = String.valueOf(s.charAt(i));

            sb = sb.append(str[Integer.parseInt(index)]);

        }

        String sss = String.valueOf(sb);

        int i = 0;

        for (int j = sss.length(); j > 0; j--) {

            sb = sb.insert(j, ss[i++]);

        }

        System.out.println(sb);

    }

 

    public static void main(String[] args) {

        test(1123);

        test(912321321);

    }

}

3.更进一步,能否将数字表示的金额改为汉字表达?比如将“¥123.52”转换为“壹佰贰拾叁元伍角贰分”。

 public class MoneyConvert {

 private final String[] str1 = {"", "", "", "", "", "", "", "", "亿"};  

    private final String[] str2 = {"", "", "", "", "", "", "", "", "", ""};  

    private final String[] str3 = {"", ""};  

      

    public static void main(String[] args)  

    {  

        double n = 1234506.789;  

          

        MoneyConvert mc = new MoneyConvert();  

        String str = mc.convert(n);  

          

        System.out.println(str);  

    }  

      

    public String convert(double n)  

    {  

        String str = String.valueOf(n);  

        String temp1 = str.substring(0, str.indexOf("."));  

        String temp2 = str.substring(str.indexOf(".")+1);  

          

        int k = -1;  

        int len = -1;  

        StringBuffer sb = new StringBuffer();  

          

        len = temp1.length()-1;  

        for(int i=0; i<temp1.length(); i++)  

        {  

            k = Integer.parseInt(temp1.substring(i, i+1));  

            sb.append(str2[k]).append(str1[len-i]);  

        }  

          

        for(int i=0; i<2; i++)  

        {  

            k = Integer.parseInt(temp2.substring(i, i+1));  

            sb.append(str2[k]).append(str3[i]);  

        }  

4.不用BigInteger,直接使用数组表达大数,能实现相同的功能吗?

要求:

(1)用你的大数实现加和减两个功能

   package Work;

import java.util.Scanner;

public class BigNum {

 

   public static void main(String[] args) {

       // TODO Auto-generated method stub

     

     int aa,bb;

     System.out.println("用数组实现大数的加法和减法");

     System.out.print("请输入大数a:");

     Scanner scan=new Scanner(System.in);

     String a=scan.next();

     System.out.print("请输入大数b:");

    String b=scan.next();

    int A[]=new int[100];

    int B[]=new int[100];

    

    for(int i=0;i<a.length();i++){

        A[i]=(int) ((a.charAt(i)-48)*Math.pow(10,a.length()-i-1));

    }

    for(int i=0;i<b.length();i++){

        B[i]=(int) ((b.charAt(i)-48)*Math.pow(10,b.length()-i-1));

    }

    int sum=0;

    int sub=0;

    for(int i=0;i<a.length();i++){

        sum+=A[i]+B[i];

        sub+=A[i]-B[i];

    }

    System.out.print("a+b="+sum);

     System.out.println();

     System.out.print("a-b="+sub);

   }

 

}

2)阅读BigInteger类源码,弄清楚它是使用什么算法实现加减乘除四种运算的?

本整数类型)。BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。另外,BigInteger 还提供以下运算:模算术、GCD 计算、质数测试、素数生成、位操作以及一些其他操作。BigInteger是不可变的任意精度的整数。所有操作中,都以二进制补码形式表示BigInteger(如Java的基

3)通过互联网查找大数运算的相关资料,给你的大数类添加乘、除、求阶乘等其它功能。

package Work;

import java.util.Scanner;import java.math.BigDecimal;

public class BigNum {

 

    public static void main(String[] args) {

        // TODO Auto-generated method stub

      

      int aa,bb;

      System.out.println("用数组实现大数的加法和减法");

      System.out.print("请输入大数a:");

      Scanner scan=new Scanner(System.in);

      String a=scan.next();

      System.out.print("请输入大数b:");

     String b=scan.next();

     int A[]=new int[100];

     int B[]=new int[100];

     //用于复杂的乘法和除法

     BigDecimal b1 = new BigDecimal(a) ;

     BigDecimal b2 = new BigDecimal(b) ;

     for(int i=0;i<a.length();i++){

         A[i]=(int) ((a.charAt(i)-48)*Math.pow(10,a.length()-i-1));

     }

     for(int i=0;i<b.length();i++){

         B[i]=(int) ((b.charAt(i)-48)*Math.pow(10,b.length()-i-1));

     }

     int sum=0;

     int sub=0;

     for(int i=0;i<a.length();i++){

         sum+=A[i]+B[i];

         sub+=A[i]-B[i];

     }

     System.out.print("a+b="+sum);

      System.out.println();

      System.out.print("a-b="+sub);

      System.out.println();

      System.out.print("a*b="+b1.multiply(b2));

      System.out.println();

      System.out.print("a/b="+b1.divideToIntegralValue(b2));

  }

}

4.随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中

1)设计思想

    通过for循环对数组内每一个数通过随机函数赋值,然后利用output按格式连接输出,编写方法实现数组内数据加和,然后用消息弹框形式输出。

(2)程序流程图


  技术分享

   

3)代码

import javax.swing.JOptionPane;

import javax.swing.JTextArea;

public class RandomAdd {

 

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        int[] a = new int[10];

        String output = "";

        output += "Subscript\tValue\n";

        for(int i =0;i<10;i++)

        {

            a[i] = 1+(int)(Math.random()*100);

            output += i + "\t" + a[ i ] + "\n";

        }

        int result = 0;

        String output2 = "";

        result  = whatIsThis(a, a.length);

        output2 += "数组元素和为" + result;

        JTextArea outputArea = new JTextArea( 11, 10 );

          outputArea.setText( output );

 

          JOptionPane.showMessageDialog( null, outputArea,

             "Random Array",

             JOptionPane.INFORMATION_MESSAGE );

          JOptionPane.showMessageDialog( null, output2,

                  "Add",

                  JOptionPane.INFORMATION_MESSAGE );

          System.exit( 0 );

    }

    public static int whatIsThis(int b[], int size) {

        if (size == 1)

            return b[0];

        else

            return b[size - 1] + whatIsThis(b, size - 1);

    }

}

(4)运行结果

    技术分享    技术分享

5)编程总结

     了解了一些JTexArea的用法,学会了如何实现字符串的分列输出

 

Java数组六