• java06-数组动手动脑


    1.阅读QiPan.java示例程序了解如何利用二维数组和循环语句绘制五子棋盘。

          定义了一个私有的二维数组作为棋盘。并定义了长度。之后打印符号使之连接起来作为棋盘在控制台显示。建立缓冲区用来读取输入的坐标。还用了一些方法将输入的坐标分割开以及对数组元素的重新赋值。

     1 import java.io.*;
     2 
     3 public class QiPan
     4 {
     5     //定义一个二维数组来充当棋盘
     6     private String[][] board;
     7     //定义棋盘的大小
     8     private static int BOARD_SIZE = 15;
     9     public void initBoard()
    10     {
    11         //初始化棋盘数组
    12         board = new String[BOARD_SIZE][BOARD_SIZE];
    13         //把每个元素赋为"╋",用于在控制台画出棋盘
    14         for (int i = 0 ; i < BOARD_SIZE ; i++)
    15         {
    16             for ( int j = 0 ; j < BOARD_SIZE ; j++)
    17             {
    18                 board[i][j] = "╋";
    19             }
    20         }
    21     }
    22     //在控制台输出棋盘的方法
    23     public void printBoard()
    24     {
    25         //打印每个数组元素
    26         for (int i = 0 ; i < BOARD_SIZE ; i++)
    27         {
    28             for ( int j = 0 ; j < BOARD_SIZE ; j++)
    29             {
    30                 //打印数组元素后不换行
    31                 System.out.print(board[i][j]);
    32             }
    33             //每打印完一行数组元素后输出一个换行符
    34             System.out.print("
    ");
    35         }
    36     }
    37     public static void main(String[] args)throws Exception
    38     {
    39         QiPan gb = new QiPan();
    40         gb.initBoard();
    41         gb.printBoard();
    42         //这是用于获取键盘输入的方法
    43         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    44         String inputStr = null;
    45                 System.out.println("请输入您下棋的座标,应以x,y的格式:");
    46         //br.readLine():每当在键盘上输入一行内容按回车,刚输入的内容将被br读取到。
    47         while ((inputStr = br.readLine()) != null)
    48         {
    49             //将用户输入的字符串以逗号(,)作为分隔符,分隔成2个字符串
    50             String[] posStrArr = inputStr.split(",");
    51             //将2个字符串转换成用户下棋的座标
    52             int xPos = Integer.parseInt(posStrArr[0]);
    53             int yPos = Integer.parseInt(posStrArr[1]);
    54             //把对应的数组元素赋为"●"。
    55             gb.board[xPos - 1][yPos - 1] = "●";                
    56             /*
    57              电脑随机生成2个整数,作为电脑下棋的座标,赋给board数组。
    58              还涉及
    59                 1.座标的有效性,只能是数字,不能超出棋盘范围
    60                 2.如果下的棋的点,不能重复下棋。
    61                 3.每次下棋后,需要扫描谁赢了
    62              */
    63             gb.printBoard();
    64             System.out.println("请输入您下棋的座标,应以x,y的格式:");
    65         }
    66     }
    67 }

    2.请编写一个程序将一个整数转换为汉字读法字符串。比如“1123”转换为“一千一百二十三”。更进一步,能否将数字表示的金额改为“汉字表达? 比如将“¥123.52”转换为“壹佰贰拾叁元伍角贰分”。

     1 public class Change{
     2     
     3     private String[] hanArr = {"零" , "一" , "二" , "三" , "四" , "五" , "六" , "七" , "八" , "九"};
     4     private String[] unitArr = {"十" , "百" , "千","万"};
     5     private String toHanStr(String numStr)
     6     {
     7         String result = "";
     8         int numLen = numStr.length();
     9         
    10         for (int i = 0 ; i < numLen ; i++ )    //进行类型转换,将字符转化为整形数字
    11         {
    12             int num = numStr.charAt(i) - 48;
    13 
    14             if ( i != numLen - 1 && num != 0)
    15             {
    16                 result += hanArr[num] + unitArr[numLen - 2 - i];    //在末位数字前加单位
    17             }
    18 
    19             else    //末位数字后不加单位
    20             {
    21 
    22                 if(result.length()>0 && hanArr[num].equals("零") && result.charAt(result.length()-1)=='零')
    23                 continue;
    24                 result += hanArr[num];
    25             }
    26          }
    27 
    28          if(result.length()==1)
    29              
    30              return result;
    31 
    32          int index=result.length()-1;
    33          while(result.charAt(index)=='零'){
    34              index--;
    35          }
    36          if(index!=result.length()-1)
    37               return result.substring(0,index+1);
    38          else {
    39              return result;
    40          }
    41      }
    42 
    43      public static void main(String[] args) { 
    44          Change m = new Change();
    45          System.out.println(m.toHanStr("142"));
    46 
    47      }
    48 }

    3.前面几讲介绍过JDK所提供的BigInteger能完成大数计算,如果不用它,直接使用数组表达大数,你能实现相同的功能吗?

    import java.util.Scanner;
    
    public class Big{
    
        public static void main(String[] args) {
          
            int A[]=new int[100];
            int B[]=new int[100];
            
            System.out.print("请输入大数a:");
            Scanner big=new Scanner(System.in);
            String a=big.next();
            System.out.print("请输入大数b:");
            String b=big.next();
        
         
            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.println("a+b="+sum);
          System.out.println("a-b="+sub);
        }
    
    }

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

    将包含BigInteger的二进制补码表示形式的byte数组转换为BigInteger。输入数组设定为 big-endian字节顺序:最高有效字节在第零个元素中。

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

    思路:利用随机方法自动生成随机数,定义一个长度为10的数组。利用for循环将生成的随机数存进数组,并把随机数设置成了两位数(空参数时出现了问题)。定义变量用于储存要输出在对话框中的内容,即产生的10个随机数。不断累加和并输出。

     1     public static void main(String args[]){
     2     
     3         int a[]=new int [10];
     4         int sum=0;
     5         Random rand=new Random();
     6         String output=" ";
     7     
     8         for(int i=0;i<10;i++){
     9 
    10            a[i]=rand.nextInt(100);
    11            sum+=a[i];
    12            output+=String.valueOf(a[i])+" ";
    13          
    14         }
    15 
    16         JOptionPane.showMessageDialog(null,output,"random number is"+" " , JOptionPane.PLAIN_MESSAGE);
    17         JOptionPane.showMessageDialog(null,sum,"The sum is"+" ", JOptionPane.PLAIN_MESSAGE);
    18         System.exit(0);  
    19 
    20        }
    21 
    22 }

    总结:总是报没有将变量初始化的错,以及随机数的生成还“不够随机”

  • 相关阅读:
    系统CLOCK 频率 C代码查看范例
    LINUX C 文件读写范例
    linux 打印机 打印机支持工作组 openprinting
    问题记录
    初步了解profile文件
    内核中的HZ 及延迟等
    LINUX_System_Call_Quick_Reference
    Linux基础篇 六 (bash shell基础 (vi /etc/shells))
    Android调用平台功能具体技巧分享
    男人35岁前要做好的几件事
  • 原文地址:https://www.cnblogs.com/lzxw/p/6033734.html
Copyright © 2020-2023  润新知