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;

            }

}

原文地址:https://www.cnblogs.com/wf1647790534/p/6034887.html