• 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(" ");

    }

    }

        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 Value ";

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

            {

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

                output += i + " " + a[ i ] + " ";

            }

            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的用法,学会了如何实现字符串的分列输出

  • 相关阅读:
    Spring学习总结(六)——Spring整合MyBatis完整示例
    Spring学习总结(五)——Spring整合MyBatis(Maven+MySQL)二
    Spring学习总结(五)——Spring整合MyBatis(Maven+MySQL)一
    Spring学习总结(四)——表达式语言 Spring Expression Language
    Spring学习总结(三)——Spring实现AOP的多种方式
    Spring学习总结(二)——静态代理、JDK与CGLIB动态代理、AOP+IoC
    Spring集成MyBatis完整示例
    数据库字符集的坑
    MYSQL中的UNION和UNION ALL
    MySQL的事务和锁
  • 原文地址:https://www.cnblogs.com/cyz123/p/6036359.html
Copyright © 2020-2023  润新知