zoukankan      html  css  js  c++  java
  • 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;

                }

    }

  • 相关阅读:
    Chrome开发者工具中Elements(元素)断点的用途
    最简单的SAP云平台开发教程
    Java实现 LeetCode 495 提莫攻击
    Java实现 LeetCode 494 目标和
    Java实现 LeetCode 494 目标和
    Java实现 LeetCode 494 目标和
    Java实现 LeetCode 493 翻转对
    Java实现 LeetCode 493 翻转对
    Java实现 LeetCode 493 翻转对
    Java实现 LeetCode 492 构造矩形
  • 原文地址:https://www.cnblogs.com/wf1647790534/p/6034887.html
Copyright © 2011-2022 走看看