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

1.结果截图:

                   

2.小结:按引用传递与按值传送数组类型方法参数的最大关键在于:

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

使用后者则没有这个问题,方法体中修改的仅是原始数组元素的一个拷贝。

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

 

 

 

 

 

 

1.结果:                  

2..原因:数组b与数组a指向同一个目标。所以数组b的长度改变了。

三、

1.阅读程序WhatDoesThisDo.java, 解释程序所完成的功能。

<1>源代码;

 

public class WhatDoesThisDo {

static int result;

static String output;

 

public static void main(String[] args) {

int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

result = whatIsThis(a, a.length);

output = "Result is: " + result;

System.out.println(output);

}

 

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

if (size == 1)

return b[0];

else

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

}

}

 

<2>功能:55(结果)

实现数组内数据的求和。

2.阅读程序WhatDoesThisDo2.java, 解释程序所完成的功能。

<1>源代码:

public class WhatDoesThisDo2 {

public static void main(String[] args) {

int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

StringBuilder sbBuilder=new StringBuilder();

someFunction(a, 0, sbBuilder);

System.out.println(sbBuilder);

}

public static void someFunction(int b[], int x, StringBuilder out) {

if (x < b.length) {

someFunction(b, x + 1, out);

out.append(b[x] + "  ");

}

}

}

 

<2>功能:10  9  8  7  6  5  4  3  2  1  (结果)

实现从大下标到小下标的数据的输出。

四、阅读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("\n");

}

}

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

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

<1>源代码;package dijia;

import java.util.Scanner;

public class Hanzi {

void Daxie1(int b)

{

 

char a1[]={'','','','','','','','',''};

int a3[]={1,2,3,4,5,6,7,8,9};

int i,j,k,l,n;

 

 

n=b/10000;

i=(b/1000)%10;

j=(b/100)%10;

k=(b/10)%10;

l=b%10;

int x=0;

int y=0;

int z=0;

int t=0;

int r=0;

int m,q,p,o,u;

 

for(m=0;m<a3.length;m++)

{

if(n==a3[m])

{

x++;break;

}

}

for(q=0;q<a3.length;q++)

{

if(i==a3[q])

    {

y++;break;

}

}

for(u=0;u<a3.length;u++)

{

if(j==a3[u])

{

z++;break;

}

}

for(o=0;o<a3.length;o++)

{

if(k==a3[o])

{

t++;break;

}

}

for(p=0;p<a3.length;p++)

{

if(l==a3[p])

{

r++;break;

}

}

if(x!=0)

{

if(y==0&&z==0&&t==0&&r!=0){System.out.print(a1[m]+""+""+a1[p]);}

if(y==0&&z==0&&t==0&&r==0){System.out.print(a1[m]+"");}

if(y!=0&&z==0&&t==0&&r==0){ System.out.print(a1[m]+""+a1[q]+"");}

if(y==0&&z!=0&&t==0&&r==0){ System.out.print(a1[m]+""+""+a1[u]+"");}

if(y==0&&z==0&&t!=0&&r==0){ System.out.print(a1[m]+""+""+a1[o]+"");}

if(y!=0&&z!=0&&t==0&&r==0){ System.out.print(a1[m]+""+a1[q]+""+a1[u]+"");}

if(y!=0&&z==0&&t!=0&&r==0){ System.out.print(a1[m]+""+a1[q]+""+""+a1[o]+"");}

if(y!=0&&z==0&&t!=0&&r!=0){System.out.print(a1[m]+""+a1[q]+""+""+a1[p]);}

if(y==0&&z!=0&&t!=0&&r==0){System.out.print(a1[m]+""+""+a1[u]+""+a1[o]+"");}

if(y==0&&z!=0&&t==0&&r!=0){System.out.print(a1[m]+""+""+a1[u]+""+""+a1[p]);}

if(y==0&&z==0&&t!=0&&r!=0){System.out.print(a1[m]+""+""+a1[o]+""+a1[p]);}

if(y!=0&&z!=0&&t!=0&&r==0){System.out.print(a1[m]+""+a1[q]+""+a1[u]+""+a1[o]+"");}

if(y!=0&&z!=0&&t==0&&r!=0){ System.out.print(a1[m]+""+a1[q]+""+a1[u]+""+""+a1[p]);}

if(y!=0&&z==0&&t!=0&&r!=0){System.out.print(a1[m]+""+a1[q]+""+""+a1[o]+""+a1[p]);}

if(y==0&&z!=0&&t!=0&&r!=0){System.out.print(a1[m]+""+""+a1[u]+""+a1[o]+""+a1[p]);}

if(y!=0&&z!=0&&t!=0&&r!=0){System.out.print(a1[m]+""+a1[q]+""+a1[u]+""+a1[o]+""+a1[p]);}

}

if(x==0)

{

if(y==0&&z==0&&t==0&&r!=0){System.out.print(a1[p]);}

if(y==0&&z==0&&t==0&&r==0){System.out.print("");}

if(y!=0&&z==0&&t==0&&r==0){ System.out.print(a1[q]+"");}

if(y==0&&z!=0&&t==0&&r==0){ System.out.print(a1[u]+"");}

if(y==0&&z==0&&t!=0&&r==0){ System.out.print(a1[o]+"");}

if(y!=0&&z!=0&&t==0&&r==0){ System.out.print(a1[q]+""+a1[u]+"");}

if(y!=0&&z==0&&t!=0&&r==0){ System.out.print(a1[q]+""+""+a1[o]+"");}

if(y!=0&&z==0&&t!=0&&r!=0){System.out.print(a1[q]+""+""+a1[p]);}

if(y==0&&z!=0&&t!=0&&r==0){System.out.print(a1[u]+""+a1[o]+"");}

if(y==0&&z!=0&&t==0&&r!=0){System.out.print(a1[u]+""+""+a1[p]);}

if(y==0&&z==0&&t!=0&&r!=0){System.out.print(a1[o]+""+a1[p]);}

if(y!=0&&z!=0&&t!=0&&r==0){System.out.print(a1[q]+""+a1[u]+""+a1[o]+"");}

if(y!=0&&z!=0&&t==0&&r!=0){ System.out.print(a1[q]+""+a1[u]+""+""+a1[p]);}

if(y!=0&&z==0&&t!=0&&r!=0){System.out.print(a1[q]+""+""+a1[o]+""+a1[p]);}

if(y==0&&z!=0&&t!=0&&r!=0){System.out.print(a1[u]+""+a1[o]+""+a1[p]);}

if(y!=0&&z!=0&&t!=0&&r!=0){System.out.print(a1[q]+""+a1[u]+""+a1[o]+""+a1[p]);}

}

}

void Daxie(int b)

{

char a1[]={'','','','','','','','',''};

int a3[]={1,2,3,4,5,6,7,8,9};

int i,j,k,l,n;

 

 

n=b/10000;

i=(b/1000)%10;

j=(b/100)%10;

k=(b/10)%10;

l=b%10;

int x=0;

int y=0;

int z=0;

int t=0;

int r=0;

int m,q,p,o,u;

 

for(m=0;m<a3.length;m++)

{

if(n==a3[m])

{

x++;break;

}

}

for(q=0;q<a3.length;q++)

{

if(i==a3[q])

    {

y++;break;

}

}

for(u=0;u<a3.length;u++)

{

if(j==a3[u])

{

z++;break;

}

}

for(o=0;o<a3.length;o++)

{

if(k==a3[o])

{

t++;break;

}

}

for(p=0;p<a3.length;p++)

{

if(l==a3[p])

{

r++;break;

}

}

if(x!=0)

{

if(y==0&&z==0&&t==0&&r!=0){System.out.print(a1[m]+""+""+a1[p]);}

if(y==0&&z==0&&t==0&&r==0){System.out.print(a1[m]+"");}

if(y!=0&&z==0&&t==0&&r==0){ System.out.print(a1[m]+""+a1[q]+"");}

if(y==0&&z!=0&&t==0&&r==0){ System.out.print(a1[m]+""+""+a1[u]+"");}

if(y==0&&z==0&&t!=0&&r==0){ System.out.print(a1[m]+""+""+a1[o]+"");}

if(y!=0&&z!=0&&t==0&&r==0){ System.out.print(a1[m]+""+a1[q]+""+a1[u]+"");}

if(y!=0&&z==0&&t!=0&&r==0){ System.out.print(a1[m]+""+a1[q]+""+""+a1[o]+"");}

if(y!=0&&z==0&&t!=0&&r!=0){System.out.print(a1[m]+""+a1[q]+""+""+a1[p]);}

if(y==0&&z!=0&&t!=0&&r==0){System.out.print(a1[m]+""+""+a1[u]+""+a1[o]+"");}

if(y==0&&z!=0&&t==0&&r!=0){System.out.print(a1[m]+""+""+a1[u]+""+""+a1[p]);}

if(y==0&&z==0&&t!=0&&r!=0){System.out.print(a1[m]+""+""+a1[o]+""+a1[p]);}

if(y!=0&&z!=0&&t!=0&&r==0){System.out.print(a1[m]+""+a1[q]+""+a1[u]+""+a1[o]+"");}

if(y!=0&&z!=0&&t==0&&r!=0){ System.out.print(a1[m]+""+a1[q]+""+a1[u]+""+""+a1[p]);}

if(y!=0&&z==0&&t!=0&&r!=0){System.out.print(a1[m]+""+a1[q]+""+""+a1[o]+""+a1[p]);}

if(y==0&&z!=0&&t!=0&&r!=0){System.out.print(a1[m]+""+""+a1[u]+""+a1[o]+""+a1[p]);}

if(y!=0&&z!=0&&t!=0&&r!=0){System.out.print(a1[m]+""+a1[q]+""+a1[u]+""+a1[o]+""+a1[p]);}

}

if(x==0)

{

if(y==0&&z==0&&t==0&&r!=0){System.out.print(a1[p]);}

if(y==0&&z==0&&t==0&&r==0){System.out.print("");}

if(y!=0&&z==0&&t==0&&r==0){ System.out.print(a1[q]+"");}

if(y==0&&z!=0&&t==0&&r==0){ System.out.print(a1[u]+"");}

if(y==0&&z==0&&t!=0&&r==0){ System.out.print(a1[o]+"");}

if(y!=0&&z!=0&&t==0&&r==0){ System.out.print(a1[q]+""+a1[u]+"");}

if(y!=0&&z==0&&t!=0&&r==0){ System.out.print(a1[q]+""+""+a1[o]+"");}

if(y!=0&&z==0&&t!=0&&r!=0){System.out.print(a1[q]+""+""+a1[p]);}

if(y==0&&z!=0&&t!=0&&r==0){System.out.print(a1[u]+""+a1[o]+"");}

if(y==0&&z!=0&&t==0&&r!=0){System.out.print(a1[u]+""+""+a1[p]);}

if(y==0&&z==0&&t!=0&&r!=0){System.out.print(a1[o]+""+a1[p]);}

if(y!=0&&z!=0&&t!=0&&r==0){System.out.print(a1[q]+""+a1[u]+""+a1[o]+"");}

if(y!=0&&z!=0&&t==0&&r!=0){ System.out.print(a1[q]+""+a1[u]+""+""+a1[p]);}

if(y!=0&&z==0&&t!=0&&r!=0){System.out.print(a1[q]+""+""+a1[o]+""+a1[p]);}

if(y==0&&z!=0&&t!=0&&r!=0){System.out.print(a1[u]+""+a1[o]+""+a1[p]);}

if(y!=0&&z!=0&&t!=0&&r!=0){System.out.print(a1[q]+""+a1[u]+""+a1[o]+""+a1[p]);}

}}

void Qian(double b)

{char a1[]={'','','','','','','','',''};

int e[]={1,2,3,4,5,6,7,8,9};

int c=(int)b;

Daxie(c);System.out.print("");

double a=b*100;

int d=(int)a;

int n=d-c*100;

int i,j;

i=n/10;

j=n%10;

if(i!=0)

{

for(int m=0;m<e.length;m++)

{

if(i==e[m])

{System.out.print(a1[m]+"");break;}

}

}

 

if(j!=0)

{

for(int m=0;m<e.length;m++)

{

if(j==e[m])

{System.out.print(a1[m]+"");break;}

}

}

 

}

public static void main(String[] args) {

Hanzi a=new Hanzi();

Scanner scanner = new Scanner(System.in);

System.out.println("请输入一个数(最多两位小数)");

double b=scanner.nextDouble();

a.Qian(b);

System.out.println("\n请输入一个整数(位数小于等于5)");

int c=scanner.nextInt();

a.Daxie1(c);

 

 

 

 

 

}

 

}

 

<2>截图:              

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

要求:

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

<1>源代码:

package dijia;

import java.util.Scanner;

public class Dashu {

void he(int a[],int b[])

{

 

int c[]=new int[5];

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

{

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

}

int num=10000*c[0]+1000*c[1]+100*c[2]+10*c[3]+c[4];

System.out.print("两数的和是:"+num);

 

}

 

void cha(int a[],int b[])

{

 

 

int c[]=new int[5];

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

{

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

}

 

int chaa=10000*c[0]+1000*c[1]+100*c[2]+10*c[3]+c[4];

System.out.print("两数的差是:"+chaa);

}

 

public static void main(String[] args) {

Scanner scanner=new Scanner(System.in);

int a[]=new int[5];int t[]={1,2,3,4,5};

System.out.println("第一个数(从最高位开始(万位))");

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

{

System.out.println("请输入第"+t[i]+"个位置上的数字");

a[i]=scanner.nextInt();

 

}

System.out.println("第二个数(从最高位开始(万位)");

int b[]=new int[5];

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

{

System.out.println("请输入第"+t[i]+"个位置上的数字");

b[i]=scanner.nextInt();

 

}

Dashu D=new Dashu();

D.he(a,b);

D.cha(a,b);

 

}

 

}

<2>截图                     ;

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

要求将设计思路、程序流程图、源程序代码、结果截图、编程总结等发表到博客园,并备份到课堂派

<1>设计思路:利用数组来储存不同为上的数,在乘以10相应的倍数,来记录大数。

<2>程序流程图:

 

 

 

 

 

 

 

 

 

 

 

<3>源代码;package dijia;

import javax.swing.JOptionPane;

import java.util.Scanner;

public class Suijiqiuhe {

 

public static void main(String[] args) {

int a[]=new int[10]; String output1 = "";String output2 = "";String output3 = "";

output1 = "数组的十个数是:";

 for ( int i = 1; i <= 10; i++ )

 {

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

     output2 += a[i-1] + "  ";

 }

 int num = 0;

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

 {

 num+=a[j];

 

 }

 output3 = "数组里十个数的和是:"+num;

 

   JOptionPane.showMessageDialog( null, output1,

      "20 Random Numbers from 1 to 6",

      JOptionPane.INFORMATION_MESSAGE );

   JOptionPane.showMessageDialog( null, output2,

      "20 Random Numbers from 1 to 6",

      JOptionPane.INFORMATION_MESSAGE );

   JOptionPane.showMessageDialog( null, output3,

      "20 Random Numbers from 1 to 6",

      JOptionPane.INFORMATION_MESSAGE );

 

   System.exit( 0 );

 

}

 

}

 

<4>j截图:               

                                     

                         

<5>总结:大数可以用数组来储存,进行四则运算。不过倒的时候还要还原,有点麻烦。

posted on 2016-11-06 19:28  暗黑迪迦  阅读(226)  评论(0编辑  收藏  举报