• java 动手动脑


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

    1.程序设计思想:

    2.程序流程图:

     

    3.程序源代码:

    import java.util.Random;

    import javax.swing.JOptionPane;

    public class suijishu {

    public static void main(String[] args) {

       String output= "10100以内的随机数为: ";

       int sum=0;

           int s[] = new int[10];

           Random n = new Random();

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

           {

               s[i]=n.nextInt(101);

               output += " "+s[i];

               sum += s[i];

           }

           output +=" 十个数的和是:"+sum;

           JOptionPane.showMessageDialog(null,output,"结果",

              JOptionPane.PLAIN_MESSAGE);

    }

    }

    4.程序截图:

     

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

    1.代码:


    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”转换为“一千一百二十三”

    1.源程序:

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;

    public class zhuanhuan {


    public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub

    char b[]={'零','一','二','三','四','五','六','七','八','九'};
    char c[]={'十','百','千','万','亿'};

    System.out.println("请输入一个数:");
    BufferedReader number=new BufferedReader(new InputStreamReader(System.in));
    String num=number.readLine();
    //int Point=num.indexOf(".");
    char[] a=num.toCharArray();

    String output="";

    int n=a.length,j=0;

    //System.out.println(n);
    for(int i=0;i<n;i++){
    j=n-i;
    int d=a[i]-'0';
    if(j==1)
    output+=b[d];
    else{

    output+=b[d];
    output+=c[j-2];
    }

    }

    System.out.print(output);

    }

    }

    2.程序截图:

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

    1.源代码

    import java.util.*;
    public class renminbi {

    /**
    * 此功能将一个浮点数转换成人民币读法字符串
    * 1 0000 0000
    * 亿 万 元
    * @param args
    * @author 风云 185843144
    */
    //定义一个字符串数组
    private String[] hanArr={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
    private String[] unitArr={"拾","佰","仟"};
    private String[] unitArr1={"元","万","亿"};
    private String[] divide(double num){
    long zheng = (long)num;//整数部分

    long xiao = (int)((num-zheng)*100);//小数部分
    if((int)((num-zheng)*100)>=0&&(int)((num-zheng)*100)<10){
    return new String[]{zheng + "","0"+String.valueOf(xiao)};//把整数转换为字符串
    }else{
    return new String[]{zheng + "",String.valueOf(xiao)};//把整数转换为字符串
    }

    }

    private String toHanStr(String numStr){
    String result="";//结果
    int numLen = numStr.length();//数字字符串的长度

    //四位数开始
    if(numLen<=4){
    for (int i = 0;i<numLen;i++){
    int num = numStr.charAt(i)-48;//将char型数字减去48 得到int型数字
    if(num!=0){
    if(i!=numLen-1){
    result+=hanArr[num]+unitArr[numLen-2-i];//如果不是最后一位数则加上单位"拾","佰","仟"
    }else{
    result+=hanArr[num];
    }
    }else{
    if(i<numLen-1&&(numStr.charAt(i+1)-48!=0)){
    result+=hanArr[0];
    }
    }
    }
    if(result!=""){
    result+=unitArr1[0];
    }
    }else{//四位数结束
    // 8位数开始
    if(numLen<=8){
    String qianW="";//定义一个千万以获取前四位的结果的字符串
    String endF="";//定义一个千位的字符串以获取后四位的结果
    for (int i = 0;i<numLen-4;i++){//取前四位
    int num = numStr.charAt(i)-48;//将char型数字减去48 得到int型数字
    if(num!=0){
    if(i!=numLen-5){
    qianW+=hanArr[num]+unitArr[numLen-6-i];//如果不是最后一位数则加上单位"拾","佰","仟"
    }else{
    qianW+=hanArr[num];
    }
    }else{
    if(i<numLen-1&&(numStr.charAt(i+1)-48!=0)){
    qianW+=hanArr[0];
    }
    }
    }
    if(qianW!=""){
    qianW+=unitArr1[1];
    }
    result+=qianW;

    //取后四位数
    for(int j=numLen-4;j<numLen;j++){
    int num = numStr.charAt(j)-48;//将char型数字减去48 得到int型数字
    if(num!=0){
    if(j!=numLen-1){
    endF+=hanArr[num]+unitArr[numLen-2-j];//如果不是最后一位数则加上单位"拾","佰","仟"
    }else{
    endF+=hanArr[num];
    }
    }else{
    if(j<numLen-1&&(numStr.charAt(j+1)-48!=0)){
    endF+=hanArr[0];
    }
    }
    }
    if(endF!=""){
    endF+=unitArr1[0];
    }
    result+=endF;
    }else{
    //8位结束

    //12位数开始
    if(numLen<=12){
    String yiW="";//定义一个以获取亿位前四位的结果的字符串
    String qianW="";//定义一个千万以获取前四位的结果的字符串
    String endF="";//定义一个千位的字符串以获取后四位的结果
    for (int k = 0;k<numLen-8;k++){//取前四位
    int num = numStr.charAt(k)-48;//将char型数字减去48 得到int型数字
    if(num!=0){
    if(k!=numLen-9){
    yiW+=hanArr[num]+unitArr[numLen-10-k];//如果不是最后一位数则加上单位"拾","佰","仟"
    }else{
    yiW+=hanArr[num];
    }
    }else{
    if(k<numLen-9&&(numStr.charAt(k+1)-48!=0)){
    yiW+=hanArr[0];
    }
    }
    }//前四位结束
    if(yiW!=""){
    yiW+=unitArr1[2];
    }
    result+=yiW;
    for (int i = numLen-8;i<numLen-4;i++){//取中间四位
    int num = numStr.charAt(i)-48;//将char型数字减去48 得到int型数字
    if(num!=0){
    if(i!=numLen-5){
    qianW+=hanArr[num]+unitArr[numLen-6-i];//如果不是最后一位数则加上单位"拾","佰","仟"
    }else{
    qianW+=hanArr[num];
    }
    }else{
    if(i<numLen-5&&(numStr.charAt(i+1)-48!=0)){
    qianW+=hanArr[0];
    }
    }
    }//中间四位结束
    if(qianW!=""){
    qianW+=unitArr1[1];
    }
    result+=qianW;

    //取后四位数
    for(int j=numLen-4;j<numLen;j++){
    int num = numStr.charAt(j)-48;//将char型数字减去48 得到int型数字
    if(num!=0){
    if(j!=numLen-1){
    endF+=hanArr[num]+unitArr[numLen-2-j];//如果不是最后一位数则加上单位"拾","佰","仟"
    }else{
    endF+=hanArr[num];
    }
    }else{
    if(j<numLen-1&&(numStr.charAt(j+1)-48!=0)){
    endF+=hanArr[0];
    }
    }
    }
    if(endF!=""){
    endF+=unitArr1[0];
    }
    result+=endF;
    }else{//12位结束
    System.out.println("本程序只能转换仟亿位(含)以下的数");

    }
    }
    }


    //返回结果
    return result;

    }
    //小数部分
    private String toHanStrXiao(String numStr){
    String resultXiao="";
    if(numStr.charAt(0)-48==0){
    if(numStr.charAt(1)-48==0){
    resultXiao="";
    }else{
    resultXiao=hanArr[(numStr.charAt(1)-48)]+"分";
    }

    }else{
    if(numStr.charAt(1)-48!=0){
    resultXiao=hanArr[(numStr.charAt(0)-48)]+"角"+hanArr[(numStr.charAt(1)-48)]+"分";
    }else{
    resultXiao=hanArr[(numStr.charAt(0)-48)]+"角";
    }

    }
    return resultXiao;
    }
    public static void main(String[] args) {
    System.out.print("请输入金额:");
    Scanner input = new Scanner(System.in);
    double numDouble=input.nextDouble();
    renminbi nr = new renminbi();
    String[] num = nr.divide(numDouble);
    String result=nr.toHanStr(num[0])+nr.toHanStrXiao(num[1]);
    System.out.println(result);

    }

    }

    2.运行结果:

     五.

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

    要求:

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

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

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

     

    下面看看BigInteger有哪些重点的属性,主要的有下面三个:
    (1)final int signum
    signum属性是为了区分:正负数和0的标志位,JDK注释里面已经说的很明白了:
    The signum of this BigInteger: -1 for negative, 0 for zero, or 1 for positive. Note that the BigInteger zero must have a signum of 0. This is necessary to ensures that there is exactly one representation for each BigInteger value.
    (2)final int[] mag
    mag是magnitude的缩写形式,mag数组是存储BigInteger数值大小的,采用big-endian的顺序,也就是高位字节存入低地址,低位字节存入高地址,依次排列的方式。JDK原文注释如下:
    The magnitude of this BigInteger, in big-endian order: the zeroth element of this array is the most-significant int of the magnitude. The magnitude must be "minimal" in that the most-significant int (mag[0]) must be non-zero. This is necessary to ensure that there is exactly one representation for each BigInteger value. Note that this implies that the BigInteger zero has a zero-length mag array.
    (3)final static long LONG_MASK = 0xffffffffL;
    This mask is used to obtain the value of an int as if it were unsigned。

  • 相关阅读:
    优化!优化!
    JavaScript 错误
    js 学习总结
    JavaScript join() 方法
    JavaScript shift() 方法
    JavaScript split() 方法
    arTemplate解析语法
    getTime 方法
    PHP 5 数据类型
    thinkphp 实现微信公众号开发(二)--实现自定义菜单
  • 原文地址:https://www.cnblogs.com/gong123/p/6036033.html
Copyright © 2020-2023  润新知