第七讲 数组动手动脑和课后作业
【动手动脑1】
数据作为方法参数示例代码
int[] arr= new int[ 24 ];
……
modifyArray( arr );
阅读并运行示例PassArray.java,观察并分析程序输出的结果,小结,然后与下页幻灯片所讲的内容进行对照。
// PassArray.java
// Passing arrays and individual array elements to methods
public class PassArray {
public static void main(String[] args) {
int a[] = { 1, 2, 3, 4, 5 };
String output = "The values of the original array are:\n";
for (int i = 0; i < a.length; i++)
output += " " + a[i];
output += "\n\nEffects of passing array " + "element call-by-value:\n"
+ "a[3] before modifyElement: " + a[3];
modifyElement(a[3]);
output += "\na[3] after modifyElement: " + a[3];
output += "\n Effects of passing entire array by reference";
modifyArray(a); // array a passed call-by-reference
output += "\n\nThe values of the modified array are:\n";
for (int i = 0; i < a.length; i++)
output += " " + a[i];
System.out.println(output);
}
public static void modifyArray(int b[]) {
for (int j = 0; j < b.length; j++)
b[j] *= 2;
}
public static void modifyElement(int e) {
e *= 2;
}
}
实验结果:
按引用传递与按值传送数组类型方法参数的最大关键在于:
使用前者时,如果方法中有代码更改了数组元素的值,实际上是直接修改了原始的数组元素。
使用后者则没有这个问题,方法体中修改的仅是原始数组元素的一个拷贝。
【动手动脑2】
阅读QiPan.java示例程序了解如何利用二维数组和循环语句绘制五子棋盘。
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的格式:");
}
}
}
实验结果:
【动手动脑3】
请编写一个程序将一个整数转换为汉字读法字符串。比如“1123”转换为“一千一百二十三”。
程序:NumberChange1.java
//数字转换(设计型)。
//ZhaoXuan Li,November 5th,2016.
import javax.swing.JOptionPane;
public class NumberChange1
{
public static void main(String[] args)
{
String number=JOptionPane.showInputDialog("Enter change number:");
if(number.equals("0")) JOptionPane.showMessageDialog(null,number+"汉字化为零","Changed",JOptionPane.PLAIN_MESSAGE);
else change(number);
}
public static void change(String number)
{
boolean flag=true,flag1;
String[] shi=new String[]{"","十","百","千","万","十","百","千","亿","十","百","千"};
String output="";
int i,j,number1;
for(i=0;i<number.length();i++)
{
number1=Integer.parseInt(String.valueOf(number.charAt(i)));
flag1=true;
for(j=i;j<number.length();j++)
{
if(number.charAt(j)!='0')
{
flag1=false;
break;
}
}
if(flag1) flag=false;
if(flag||number1!=0) output+=changenumber(number1);
if(number1==0) flag=false;
if(number1!=0||i==(number.length()-1))
{
output+=shi[number.length()-i-1];
flag=true;
}
else if(i==number.length()-5||i==number.length()-9)
{
output+=shi[number.length()-i-1];
}
}
JOptionPane.showMessageDialog(null,number+"汉字化为"+xiugai(output),"Changed",JOptionPane.PLAIN_MESSAGE);
}
public static String changenumber(int i)
{
String[] shu=new String[]{"零","一","二","三","四","五","六","七","八","九"};
return shu[i];
}
public static String xiugai(String output)
{
output=output.replaceAll("零亿","亿零");
output=output.replaceAll("零万","万零");
output=output.replaceAll("亿万","亿");
return output;
}
}
实验结果:
【动手动脑4】
更进一步,能否将数字表示的金额改为“汉字表达? 比如将“¥123.52”转换为“壹佰贰拾叁元伍角贰分”。
程序:NumberChange.java
//数字转换(设计型)。
//ZhaoXuan Li,November 5th,2016.
import javax.swing.JOptionPane;
public class NumberChange
{
public static void main(String[] args)
{
String money=JOptionPane.showInputDialog("Enter change money:");
if(money.equals("0")) JOptionPane.showMessageDialog(null,money+"汉字化为零元","Changed",JOptionPane.PLAIN_MESSAGE);
else change(money);
}
public static void change(String money)
{
boolean flag=true,flag1;
String[] shi=new String[]{"元","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟"};
String[] xiao=new String[]{"角","分","厘"};
String output="";
int k,i,j,number;
k=money.indexOf(".");
if(k==-1)
{
for(i=0;i<money.length();i++)
{
number=Integer.parseInt(String.valueOf(money.charAt(i)));
flag1=true;
for(j=i;j<money.length();j++)
{
if(money.charAt(j)!='0')
{
flag1=false;
break;
}
}
if(flag1) flag=false;
if(flag||number!=0) output+=changenumber(number);
if(number==0) flag=false;
if(number!=0||i==(money.length()-1))
{
output+=shi[money.length()-i-1];
flag=true;
}
else if(i==money.length()-5||i==money.length()-9)
{
output+=shi[money.length()-i-1];
}
}
}
else
{
for(i=0;i<k;i++)
{
number=Integer.parseInt(String.valueOf(money.charAt(i)));
flag1=true;
for(j=i;j<k;j++)
{
if(money.charAt(j)!='0')
{
flag1=false;
break;
}
}
if(flag1) flag=false;
if(flag||number!=0) output+=changenumber(number);
if(number==0) flag=false;
if(number!=0||i==(k-1))
{
output+=shi[k-i-1];
flag=true;
}
else if(i==k-5||i==k-9)
{
output+=shi[k-i-1];
}
}
for(i=k+1;i<money.length();i++)
{
number=Integer.parseInt(String.valueOf(money.charAt(i)));
flag1=true;
for(j=i;j<money.length();j++)
{
if(money.charAt(j)!='0')
{
flag1=false;
break;
}
}
if(flag1) flag=false;
if(flag||number!=0) output+=changenumber(number);
if(number==0) flag=false;
if(number!=0)
{
output+=xiao[i-k-1];
flag=true;
}
}
}
JOptionPane.showMessageDialog(null,money+"汉字化为"+xiugai(output),"Changed",JOptionPane.PLAIN_MESSAGE);
}
public static String changenumber(int i)
{
String[] shu=new String[]{"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
return shu[i];
}
public static String xiugai(String output)
{
output=output.replaceAll("零亿","亿零");
output=output.replaceAll("零万","万零");
output=output.replaceAll("亿万","亿");
return output;
}
}
实验结果:
【动手动脑5】
前面几讲介绍过JDK所提供的BigInteger能完成大数计算,如果不用它,直接使用数组表达大数,你能实现相同的功能吗?
要求:
(1)用你的大数类实现加和减两个功能
(2)阅读BigInteger类源码,弄清楚它是使用什么算法实现加减乘除四种运算的?
(3)通过互联网查找大数运算的相关资料,给你的大数类添加乘、除、求阶乘等其它功能。
程序:BigNumber.java
//大数计算。
//ZhaoXuan Li,November 5th,2016.
import java.util.Scanner;
public class BigNumber
{
private char[] a=new char[100];
private int b;
BigNumber()
{
int i;
b=0;
for(i=0;i<99;i++)
{
a[i]='0';
}
}
public static BigNumber Add(BigNumber x,BigNumber y)
{
BigNumber z=new BigNumber();
int i,l3;
l3=x.b<y.b?x.b:y.b;
for(i=0;i<l3;i++)
{
z.a[i]=(char)(x.a[i]+y.a[i]+z.a[i]-96);
while(z.a[i]>=58)
{
z.a[i]-=10;
z.a[i+1]+=1;
}
}
if(x.b<y.b)
{
for(i=l3;i<y.b;i++)
{
z.a[i]+=(y.a[i]-48);
while(z.a[i]>=58)
{
z.a[i]-=10;
z.a[i+1]+=1;
}
}
while(z.a[y.b]>=58)
{
z.a[y.b]-=10;
z.a[y.b+1]+=1;
}
}
else
{
for(i=l3;i<x.b;i++)
{
z.a[i]+=(y.a[i]-48);
while(z.a[i]>=58)
{
z.a[i]-=10;
z.a[i+1]+=1;
}
}
while(z.a[x.b]>=58)
{
z.a[x.b]-=10;
z.a[x.b+1]+=1;
}
}
return z;
}
public static BigNumber Sub(BigNumber x,BigNumber y)
{
BigNumber z=new BigNumber();
int i;
for(i=0;i<y.b;i++)
{
z.a[i]=(char)(x.a[i]-y.a[i]-z.a[i]+96);
while(z.a[i]<48)
{
z.a[i]+=10;
z.a[i+1]-=1;
}
}
for(i=y.b;i<x.b;i++)
{
z.a[i]+=(x.a[i]-48);
while(z.a[i]<48)
{
z.a[i]+=10;
z.a[i+1]-=1;
}
}
return z;
}
public String output()
{
String output="";
int i,l1=0,flag=0;
for(i=98;i>=0;i--)
{
if(a[i]!='0')
{
l1=i;
flag=1;
break;
}
}
if(flag==0) output+="0";
else
{
for(i=l1;i>=0;i--)
{
output+=a[i];
}
}
return output;
}
public void input()
{
int i;
String d;
System.out.print("请输入一个大数:");
Scanner scanner=new Scanner(System.in);
d=scanner.nextLine();
b=d.length();
for(i=0;i<b;i++)
{
a[i]=d.charAt(b-1-i);
}
}
public static void main(String[] args)
{
BigNumber x=new BigNumber();
BigNumber y=new BigNumber();
BigNumber q=new BigNumber();
BigNumber w=new BigNumber();
System.out.println("加法:");
x.input();
y.input();
System.out.println(x.output()+"+"+y.output()+"="+Add(x,y).output());
System.out.println("减法(前一项大于后一项):");
q.input();
w.input();
System.out.println(q.output()+"-"+w.output()+"="+Sub(q,w).output());
}
}
实验结果:
【课后作业】
随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中。
要求将设计思路、程序流程图、源程序代码、结果截图、编程总结等发表到博客园,并备份到课堂派。
1、设计思路:这个程序共分为部分:1、建立一个长度为10的int数组。2、利用for循环和(int)(Math.random()*100+1)函数进行填充10个随机数,同时进行求和和赋值给output输出。3、借助for循环给output添加加法格式,如1+2+3=6。4、利用对话框格式输出output的最终内容。
2、程序流程图:
3、源程序代码:Random.java
//随机数产生、输出和求和。
//ZhaoXuan Li,November 5th,2016.
import javax.swing.JOptionPane;
public class Random
{
public static void main(String[] args)
{
int s=0,i;
String output="数组各项为:";
int a[]=new int[10];
for(i=0;i<10;i++)
{
a[i]=(int)(Math.random()*100+1);
s+=a[i];
output=output+a[i]+" ";
}
output+="\n";
for(i=0;i<9;i++)
{
output=output+a[i]+"+";
}
output=output+a[9]+"="+s;
JOptionPane.showMessageDialog(null,output,"Results",JOptionPane.PLAIN_MESSAGE );
}
}
4、结果截图:
5、编程总结:1、int[] a=new int[10];创建一个长度为10的int数组方法。2、随机数的产生int a=(int)(Math.random()*n+1)产生一个1-n的随机数。3、利用String类型的字符串和对话框输出可以进行简单的排版,具体的排版还需要利用区域和区域内容。
转载于:https://www.cnblogs.com/lizhaoxuan/p/6036877.html
第七讲 数组动手动脑和课后作业相关推荐
- JAVA语法基础 动手动脑及课后作业
动手动脑1: 仔细阅读示例: EnumTest.java,运行它,分析运行结果? public class EnumTest { public static void main(String[] ar ...
- 动手动脑及课后实践3
1. 动手动脑1: (一)运行结果: 分析原因:在Java中,内容相同的字串常量("Hello")只保存一份以节约内存,所以s0,s1,s2实际上引用的是同一个对象. 编译器 ...
- JAVA语法基础作业——动手动脑以及课后实验性问题(一)
一.枚举类型 public class EnumTest { public static void main(String[] args) { Size s=Size.SMALL; Si ...
- 第七章 数组成绩汇总
第七章 数组成绩汇总 学号 姓名 作业标题 作业地址 提交日期 分数 113120180135 周萌 第七章 数组实验 https://www.cnblogs.com/AwakenZed/p/1094 ...
- JAVA课上动手动脑问题以及课后测试1,2总结
课堂测试1 像二柱子那样,花二十分钟写一个能自动生成30道小学四则运算题目的 "软件" 2 (1)题目避免重复 (2)可定制(数量/打印方式) 设计思路 1)产生两 ...
- 04_类与对象_课程动手动脑问题以及课后实验性问题及解答集锦
Answer: 动手动脑: 1--以下代码为何无法通过编译?哪儿出错了? Answer: 因为类Foo的构造函数是有一个参数的,所以我们在new一个Foo类的对象时必须赋予一个符合条件的实参. 2-- ...
- 03-方法ppt动手动脑问题及课后实验性问题总结
一.如何不使用static来进行调用函数? 1.自己定义的不需要都是static,但是要在主函数中调用就需要static了,因为main是静态 的,在类加载时就加载了.如果想用又不加可以吧自己写的方法 ...
- 高翔Slambook第七讲代码解读(特征点提取)
前言:小白创建了一个微信公众号,主要面向学习视觉的小伙伴,分享一些学习过程中的感受和一些技术文章.公众号里文章也会更新在CSDN中,不过由于工作量较大,会出现一段时间的延时,感兴趣的小伙伴可以关注公众 ...
- 第七章数组答案C语言,C语言复习题及答案-第七章-数组
. WORD版本第七章数组 (8学时) 学习目的与要求: 1 .重点掌握一维数组的定义和引用: 2 .基本掌握二维数组的定义和引用: 3 .重点掌握字符型数组的定义与引用: 4 .能正确使用字符串处理 ...
- matlab第七讲,matlab第七讲教案
matlab第七讲教案 西南科技大学本科生课程备课教案 计算机技术在安全工程中的应用--Matlab 入门及应用 授课教师:徐中慧 班 级: 专 业:安全技术及工程第七章 逻辑函数与控制结构 课型:新 ...
最新文章
- HDOJ2795 Billboard【线段树】
- java实验报告 05 类与_java程序设计类与方法-java实验报告
- 【学习笔记】利用Excel实现简易版大屏
- 关于shader.createGPUProgram耗时较高的问题
- [PHP] 现代化PHP之路:composer的镜像站设置
- 链表题目----5 相交链表 和 环形链表 和 返回链表开始入环的第一个节点
- NOIP2008 普及组T4 立体图 解题报告-S.B.S.(施工未完成)
- 简单英文题 16 Maximum Sum Not Exceeding K(python)
- 华米科技2019全年出货量达4230万台 营收增幅超五成
- Django之modelform
- 塔设备设计手册_石油化工设备设计选用手册 塔器
- 推荐系统数据稀疏性问题
- 严重BS骗样本的骗子
- python贪吃蛇源代码_python实现贪吃蛇游戏源码
- 学习笔记:使用requests+Beautiful4爬取优美图库
- ubuntu16.04调整屏幕分辨率
- EAS Web:新增按钮弹出新页签
- 【Axure交互教程】购物车结算效果
- unity粒子系统属性介绍
- 厉害了!推荐一个 Web 端自动化神器 - Automa
热门文章
- double几位小数_算法竞赛入门之每日一题:分数化化小数(decimal) C语言
- js基础知识汇总10
- js基础知识汇总04
- python @staticmethod方法
- type(img).__module__ == np.__name__
- YOLO-V4解读:速度与精度的完美结合
- 优质书籍资源仓库推荐【欢迎推送书籍】
- 解决导入Beautifulsoup 报错 AttributeError: 'module' object has no attribute '_base'的问题
- java实现动态规划求解给定矩阵的和最大的子数组(矩阵中数字正负均存在)
- java parseint(12.0)_java的parseint