• java数组课后作业


    一.随机数组

    1.设计思路

    ·定义一个方法,累加求和数组,用递归的方法;主方法中首先创建长度为10的数组,初始化输出变量output,遍历数组,随机生成1~100的数赋值,output进行记录,以对话框的形式输出output,即数组的内容,利用方法leijia,求出已有数组的和result,以对话框的形式输出result。

    2.程序流程图

     
       

     


       

    3.源代码

    //长度为10随机数组(1~100),并求和

    //wangfan 20161101

    import javax.swing.JOptionPane;

    public class Randomarray {

    public static void main(String args[]){

    int[] a=new int[10];//创建长度为10的数组

    String output="";//初始化输出output

    //长度为10随机数组(1~100)

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

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

    output+=a[i]+" ";

    }

    //对话框的形式输出数组

    JOptionPane.showMessageDialog(

             null, output, "1~100的长度为10的随机数组",

             JOptionPane.INFORMATION_MESSAGE );

    //求和

    int result = leijia(a, a.length);

    //对话框输出求和结果

    JOptionPane.showMessageDialog(

             null, result, "该随机数组的和",

             JOptionPane.INFORMATION_MESSAGE );

    }

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

    if (size == 1)

    return b[0];

    else

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

    }

    }

    4.  结果截图

     

     

    5.编程总结

    ·数组求累加和,可以利用递归,数组长度为限制条件,从数组最后的数开始遍历,累加,当数组长度为1,返回最后一个数,得到最后的结果就是累加和。

    二.动手动脑

    1.请看以下代码:
       

     

    上述代码可以顺利通过编译,并且输出一个“很奇怪”的结果:[Ljava.lang.Object;@2a139a55

    2.数组元素为引用类型,如何给某一个对象赋值?

    ·以Student为例

     public static void main(String args[])

     {

    Student[] stu=new Student[100];

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

       {

        stu[i]=new Student();

    }

     }

    class Student

    {

       String name;

       int age;

       boolean sex;

       double score;

    }

    3.阅读并运行示例PassArray.java,观察并分析程序输出的结果,小结,然后与下页幻灯片所讲的内容进行对照。

      

    ·使用引用传递,如果方法中有代码更改了数组元素的值,实际上是直接修改了原始的数组元素。

    ·使用安值传送,方法体中修改的仅是原始数组元素的一个拷贝。

    4.以下代码的输出结果是什么?为什么会有这个结果?

            int[]  a  =  {5,  7  ,  20};

            int[]  b  =  new  int[4];

            System.out.println("b数组的长度为:"  +  b.length);

            b  =  a;

            System.out.println("b数组的长度为:"  +  b.length);

    测试用代码:ArrayInRam.java

     
       

    ·开始数组b是开辟了长度为4的储存空间,所以b数组的初始长度为:4,后来将a赋值b,a和b其实指的是同一个储存空间,即数组a的储存空间,所以长度变为3。

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

    import java.util.Scanner;

    public class Hanzhuanhua {

    public static void main(String args[]){

    String handu[]={"","十","百","千","万","十万","百万","千万"};

    String hanbiao[]={"","拾","佰","仟","万","拾万","佰万","仟万"};

    String hanshu[]={"零","一","二","三","四","五","六","七","八","九"};

    String hanss[]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};

    String output="";

    String output1="";

    System.out.println("输入一个整数");

    Scanner scanner=new Scanner(System.in);

    String number=scanner.next();

    int length=number.length();

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

    {

    int num=number.charAt(i)-48;

    if(i!=length-1&&num!=0)

    output+=hanshu[num]+handu[length-1-i];

    else

    {

    if(output.length()>0 && hanshu[num].equals("零") && output.charAt(output.length()-1)=='零')

    continue;

    output += hanshu[num];

    }

    }

    if(output.length()==1)

    System.out.println(output);

    //去除末尾零

    int index=output.length()-1;

    while(output.charAt(index)=='零')

    index--;

    if(index!=output.length()-1)

    System.out.println(output.substring(0,index+1));

    else

    {

    System.out.println(output);

    }

    System.out.println("金钱数额");

    Scanner scan=new Scanner(System.in);

    String money=scan.next();

    int judge=panduan(money);

    int len=money.length();

    if(judge==0)

    {

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

    {

    int n=money.charAt(j)-48;

    if(j!=length-1&&n!=0)

    output1+=hanss[n]+hanbiao[length-j-1];

    else

    {

    if(output1.length()>0 && hanss[n].equals("零") && output1.charAt(output1.length()-1)=='零')

    continue;

    output1 += hanss[n];

    }

    }

    if(output1.length()==1)

    System.out.println(output1+"元");

    //去除末尾零

    int ind=output1.length()-1;

    while(output1.charAt(ind)=='零')

    ind--;

    if(ind!=output1.length()-1)

    System.out.println(output1.substring(0,ind+1)+"元");

    else

    {

    System.out.println(output1+"元");

    }

    }

    else

    {

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

    {

    int n=money.charAt(j)-48;

    if(j!=length-1&&n!=0)

    output1+=hanss[n]+hanbiao[length-j-1];

    else

    {

    if(output1.length()>0 && hanss[n].equals("零") && output1.charAt(output1.length()-1)=='零')

    continue;

    output1 += hanss[n];

    }

    }

    if(output1.length()==1)

    output1=output1+"元";

    //去除末尾零

    int ind=output1.length()-1;

    while(output1.charAt(ind)=='零')

    ind--;

    if(ind!=output1.length()-1)

    output1=output1.substring(0,ind+1)+"元";

    else

    {

    output1=output1+"元";

    }

    if(money.length()-judge-1==2)

    {

    int z=judge+1;

    int m=money.charAt(z)-48;

    if(m!=0)

    output1+=hanss[m]+"角";

    else

    output1=output1;

    int k=money.charAt(z+1)-48;

    output1+="零"+hanss[k]+"分";

    }

    else

    {

    int v=judge+1;

    int c=money.charAt(v)-48;

    output1+=hanss[c]+"角";

    }

    System.out.println(output1);

    }

    }

    public static int panduan(String str)

    {

    int len=str.length();

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

    if(str.charAt(j)=='.')

    return j;

    return 0;

    }

    }

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

    要求:

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

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

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

    import java.util.Scanner;

    public class Bignum{

        public static void main(String[]args){

            int a[]=new int[50];

            int b[]=new int[50];

            int m=0;

            int n=0;

            int s=0;

            int t=0;int w=0;

            Scanner in=new Scanner(System.in);

            System.out.println("请输入第一个大数:");

            String aa=in.next();

            System.out.println("请输入第二个大数:");

            String bb=in.next();

            m=a.length-aa.length();

            n=b.length-bb.length();

            if(aa.length()>bb.length())

            {

                w=1;

            }

            else if (aa.length()<bb.length())

            {

                w=-1;

            }

            else

                w = aa.compareTo(bb);

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

            {

                a[m++] = aa.charAt(i) - 48;

            }

            for (int j = 0; j < bb.length(); j++)

            {

                b[n++] = bb.charAt(j) - 48;

            }

            int[] c = Bignum.add(a, b);

            for (int k = 0; k < c.length; k++)

            {

               if (c[k] > 0)

               {

                    s = k;

                    break;

               }

            }

                System.out.print("大数相加的结果为:");

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

                 System.out.print(c[i]);

                System.out.println();

                int[] d = Bignum.sub(a, b, w);

                for (int k = 0; k < d.length; k++)

                {

                    if (d[k] > 0)

                    {

                     t = k;

                     break;

                    }

                }

                System.out.print("大数相减的结果为:");

                if (w < 0)

                System.out.println("-");

                for (int i = t; i < d.length; i++)

                 System.out.print(d[i]);

                }

            public static int[] add(int []a,int []b){

                int digit=0;

                int[]c=new int[a.length];

                for(int i=a.length-1;i>=0;i--)

                {

                    c[i]=a[i]+b[i]+digit;

                    if(c[i]<10)

                        digit=0;

                    else

                    {

                        c[i]=c[i]-10;

                        digit=1;

                    }

                }

                return c;

        }

            public static int[] sub(int []a,int[]b,int w)

            {

                int digit=0;

                int[]c=new int[a.length];

                for(int i=a.length-1;i>=0;i--)

                {

                    if(w<=0)

                    {

                        c[i]=b[i]-a[i]-digit;

                        if(c[i]>=0)

                         digit=0;

                        else

                        {

                            c[i]=c[i]+10;

                            digit=1;

                        }

                    }

                        else

                        {

                            c[i]=a[i]-b[i]-digit;

                            if(c[i]>=0)

                             digit=0;

                            else

                            {

                                c[i]=c[i]+10;

                                digit=1;

                            }

                        }

                 }

                    return c;

                }

    }

  • 相关阅读:
    [HNOI2016]序列
    [Cqoi2015] 编号 【逆向思维,暴力枚举】
    [NOI2015] 软件包管理器【树链剖分+线段树区间覆盖】
    [Hdu-6053] TrickGCD[容斥,前缀和]
    [Hdu-5155] Harry And Magic Box[思维题+容斥,计数Dp]
    牛客NOIP暑期七天营-提高组6
    [SHOI2007] 书柜的尺寸 思维题+Dp+空间优化
    [UVA12235] Help Bubu 思维题+状态定义+Dp
    牛客NOIP暑期七天营-TG3 赛后题解
    牛客NOIP暑期七天营-TG1 赛后题解
  • 原文地址:https://www.cnblogs.com/wf1647790534/p/6034887.html
Copyright © 2020-2023  润新知