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 }
总结:总是报没有将变量初始化的错,以及随机数的生成还“不够随机”