java课堂动手动脑
Posted Joker明哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java课堂动手动脑相关的知识,希望对你有一定的参考价值。
实验任务一:阅读并运行示例PassArray.java.
1)源代码:
package demo;
//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示例程序了解如何利用二维数组和循环语句绘制五子棋盘。
源代码:
package demo;
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的格式:");
}
}
}
1)实验结果截图:
实验任务三:请编写一个程序将一个整数转换为汉字读法字符串。比如“1123”转换为“一千一百二十三”。 更进一步,能否将数字表示的金额改为“汉字表达? 比如将“¥123.52”转换为“壹佰贰拾叁元伍角贰分”。
1)程序设计思想:
2)源代码:
package demo;
import java.util.Scanner;
public class ZhuanHuan {
private String[] a={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
private String[] b={"十","百","千","万","十万 ","百万"};
private String[] c={"元","角","分"};
private String Change(String str)
{
String result="";
int numLen=str.length();
for(int i=0;i<numLen;i++)
{
int num=str.charAt(i)-48;
if(i!=numLen-1&&num!=0)
{
result+=a[num]+b[numLen-2-i];
}
else
{
if(result.length()>0&&a[num].equals("零")&&result.charAt(result.length()-1)==\'零\')
continue;
result+=a[num];
}
}
if(result.length()==1)
return result;
int index=result.length()-1;
while(result.charAt(index)==\'零\')
{
index--;
}
if(index!=result.length()-1)
return result.substring(0,index+1);
else {
return result;
}
}
public static void main(String args[])
{
ZhuanHuan nr=new ZhuanHuan();
Scanner in=new Scanner(System.in);
System.out.print("输入整数:");
String x=in.next();
System.out.print("转换后为:"+nr.Change(x));
}
}
进一步,金额的源代码:
package demo;
import java.util.Scanner;
public class ZhuanHuan {
private String[] a={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
private String[] b={"十","百","千","万"};
private String[] c={"元","角","分"};
private String Change(String str)
{
String result="";
int p=0;
int numLen=str.length();
for(int i=0;i<numLen;i++)
{
if(str.charAt(i)==\'.\')
{
p=i;
break;
}
}
for(int i=0;i<p;i++){
int num=str.charAt(i)-48;
if(i!=p-1&&num!=0)
{
result+=a[num]+b[p-2-i];
}
else
{
if(result.length()>0&&a[num].equals("零")&&result.charAt(result.length()-1)==\'零\')
continue;
result+=a[num];
}
}
result+=c[0];
for(int i=p+1;i<numLen;i++)
{
int num1=str.charAt(i)-48;
if(num1!=0)
{
result+=a[num1]+c[numLen-p-2];
}
else
result+=a[num1];
p--;
}
int index=result.length()-1;
while(result.charAt(index)==\'零\')
{
index--;
}
if(index!=result.length()-1)
return result.substring(0,index+1);
else {
return result;
}
}
public static void main(String args[])
{
ZhuanHuan nr=new ZhuanHuan();
Scanner in=new Scanner(System.in);
System.out.print("输入金额:");
String x=in.next();
System.out.print("转换后为:"+nr.Change(x));
}
}
4)实验结果截图:
实验任务四:大数
(1) 源代码:
package demo;
import java.util.Scanner;
public class BigNum{
public static int[]add(int []a,int []b){
int wei=0;
int[]c=new int[a.length];
for(int i=a.length-1;i>=0;i--)
{
c[i]=a[i]+b[i]+wei;
if(c[i]<10)
wei=0;
else
{
c[i]=c[i]-10;
wei=1;
}
}
return c;
}
public static int []sub(int []a,int[]b,int w)
{
int wei=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]-wei;
if(c[i]>=0)
{ wei=0;}
else
{
c[i]=c[i]+10;
wei=1;
}
}
else
{
c[i]=a[i]-b[i]-wei;
if(c[i]>=0)
{wei=0;}
else
{
c[i]=c[i]+10;
wei=1;
}
}
}
return c;
}
public static void main(String[]args){
int a[]=new int[100];
int b[]=new int[100];
int m=0;
int n=0;
int s=0;
int t=0;int u=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())
{
u=1;
}
else if (aa.length()<bb.length())
{
u=-1;
}
else
{u = 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, u);
for (int k = 0; k < d.length; k++)
{
if (d[k] > 0)
{
t = k;
break;
}
}
System.out.print("相减的结果为:");
if (u < 0)
System.out.print("-");
for (int i = t; i < d.length; i++)
{
System.out.print(d[i]);
}
System.out.println();
System.out.println();
System.out.println();
System.out.println();
}
}
(2) 程序截图
实验任务五:随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中。
(1) 程序设计思路:先定义一个数组,用random算法产生随机数,利用for循环将随机数导入数组中,遍历计算数组元素的和,然后输出即可。
(2) 源代码:
package demo;
import javax.swing.JOptionPane;
public class ArrayAdd {
public static void main(String args[]){
int []a=new int[10];
int sum=0;
String str="10个随机数为:"+"\\n";
for(int i=0;i<a.length;i++)
{
int m=(int)(Math.random()*100);
a[i]=m;
str+=a[i]+"\\n";
sum+=a[i];
}
str+="随机数的和为:"+sum;
JOptionPane.showMessageDialog(null,str,"结果",JOptionPane.INFORMATION_MESSAGE);
}
}
程序截图:
(5)编程总结:学会了利用循环将随机数赋给数组,然后计算数组元素的和,遍历并输出,把问题从大化小,由繁化简,逐步分析,完成项目。
以上是关于java课堂动手动脑的主要内容,如果未能解决你的问题,请参考以下文章