java 动手动脑

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

1.程序设计思想:

2.程序流程图:

3.程序源代码:

import java.util.Random;

import javax.swing.JOptionPane;

public class suijishu {

public static void main(String[] args) {

String output= "10个100以内的随机数为:\n";

int sum=0;

int s[] = new int[10];

Random n = new Random();

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

{

s[i]=n.nextInt(101);

output += " "+s[i];

sum += s[i];

}

output +="\n\n十个数的和是:"+sum;

JOptionPane.showMessageDialog(null,output,"结果",

JOptionPane.PLAIN_MESSAGE);

}

}

4.程序截图:

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

1.源程序:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class zhuanhuan {

public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub

char b[]={‘零‘,‘一‘,‘二‘,‘三‘,‘四‘,‘五‘,‘六‘,‘七‘,‘八‘,‘九‘};
char c[]={‘十‘,‘百‘,‘千‘,‘万‘,‘亿‘};

System.out.println("请输入一个数:");
BufferedReader number=new BufferedReader(new InputStreamReader(System.in));
String num=number.readLine();
//int Point=num.indexOf(".");
char[] a=num.toCharArray();

String output="";

int n=a.length,j=0;

//System.out.println(n);
for(int i=0;i<n;i++){
j=n-i;
int d=a[i]-‘0‘;
if(j==1)
output+=b[d];
else{

output+=b[d];
output+=c[j-2];
}

}

System.out.print(output);

}

}

2.程序截图:

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

1.源代码

import java.util.*;
public class renminbi {

/**
* 此功能将一个浮点数转换成人民币读法字符串
* 1 0000 0000
* 亿 万 元
* @param args
* @author 风云 185843144
*/
//定义一个字符串数组
private String[] hanArr={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
private String[] unitArr={"拾","佰","仟"};
private String[] unitArr1={"元","万","亿"};
private String[] divide(double num){
long zheng = (long)num;//整数部分

long xiao = (int)((num-zheng)*100);//小数部分
if((int)((num-zheng)*100)>=0&&(int)((num-zheng)*100)<10){
return new String[]{zheng + "","0"+String.valueOf(xiao)};//把整数转换为字符串
}else{
return new String[]{zheng + "",String.valueOf(xiao)};//把整数转换为字符串
}

}

private String toHanStr(String numStr){
String result="";//结果
int numLen = numStr.length();//数字字符串的长度

//四位数开始
if(numLen<=4){
for (int i = 0;i<numLen;i++){
int num = numStr.charAt(i)-48;//将char型数字减去48 得到int型数字
if(num!=0){
if(i!=numLen-1){
result+=hanArr[num]+unitArr[numLen-2-i];//如果不是最后一位数则加上单位"拾","佰","仟"
}else{
result+=hanArr[num];
}
}else{
if(i<numLen-1&&(numStr.charAt(i+1)-48!=0)){
result+=hanArr[0];
}
}
}
if(result!=""){
result+=unitArr1[0];
}
}else{//四位数结束
// 8位数开始
if(numLen<=8){
String qianW="";//定义一个千万以获取前四位的结果的字符串
String endF="";//定义一个千位的字符串以获取后四位的结果
for (int i = 0;i<numLen-4;i++){//取前四位
int num = numStr.charAt(i)-48;//将char型数字减去48 得到int型数字
if(num!=0){
if(i!=numLen-5){
qianW+=hanArr[num]+unitArr[numLen-6-i];//如果不是最后一位数则加上单位"拾","佰","仟"
}else{
qianW+=hanArr[num];
}
}else{
if(i<numLen-1&&(numStr.charAt(i+1)-48!=0)){
qianW+=hanArr[0];
}
}
}
if(qianW!=""){
qianW+=unitArr1[1];
}
result+=qianW;

//取后四位数
for(int j=numLen-4;j<numLen;j++){
int num = numStr.charAt(j)-48;//将char型数字减去48 得到int型数字
if(num!=0){
if(j!=numLen-1){
endF+=hanArr[num]+unitArr[numLen-2-j];//如果不是最后一位数则加上单位"拾","佰","仟"
}else{
endF+=hanArr[num];
}
}else{
if(j<numLen-1&&(numStr.charAt(j+1)-48!=0)){
endF+=hanArr[0];
}
}
}
if(endF!=""){
endF+=unitArr1[0];
}
result+=endF;
}else{
//8位结束

//12位数开始
if(numLen<=12){
String yiW="";//定义一个以获取亿位前四位的结果的字符串
String qianW="";//定义一个千万以获取前四位的结果的字符串
String endF="";//定义一个千位的字符串以获取后四位的结果
for (int k = 0;k<numLen-8;k++){//取前四位
int num = numStr.charAt(k)-48;//将char型数字减去48 得到int型数字
if(num!=0){
if(k!=numLen-9){
yiW+=hanArr[num]+unitArr[numLen-10-k];//如果不是最后一位数则加上单位"拾","佰","仟"
}else{
yiW+=hanArr[num];
}
}else{
if(k<numLen-9&&(numStr.charAt(k+1)-48!=0)){
yiW+=hanArr[0];
}
}
}//前四位结束
if(yiW!=""){
yiW+=unitArr1[2];
}
result+=yiW;
for (int i = numLen-8;i<numLen-4;i++){//取中间四位
int num = numStr.charAt(i)-48;//将char型数字减去48 得到int型数字
if(num!=0){
if(i!=numLen-5){
qianW+=hanArr[num]+unitArr[numLen-6-i];//如果不是最后一位数则加上单位"拾","佰","仟"
}else{
qianW+=hanArr[num];
}
}else{
if(i<numLen-5&&(numStr.charAt(i+1)-48!=0)){
qianW+=hanArr[0];
}
}
}//中间四位结束
if(qianW!=""){
qianW+=unitArr1[1];
}
result+=qianW;

//取后四位数
for(int j=numLen-4;j<numLen;j++){
int num = numStr.charAt(j)-48;//将char型数字减去48 得到int型数字
if(num!=0){
if(j!=numLen-1){
endF+=hanArr[num]+unitArr[numLen-2-j];//如果不是最后一位数则加上单位"拾","佰","仟"
}else{
endF+=hanArr[num];
}
}else{
if(j<numLen-1&&(numStr.charAt(j+1)-48!=0)){
endF+=hanArr[0];
}
}
}
if(endF!=""){
endF+=unitArr1[0];
}
result+=endF;
}else{//12位结束
System.out.println("本程序只能转换仟亿位(含)以下的数");

}
}
}

//返回结果
return result;

}
//小数部分
private String toHanStrXiao(String numStr){
String resultXiao="";
if(numStr.charAt(0)-48==0){
if(numStr.charAt(1)-48==0){
resultXiao="";
}else{
resultXiao=hanArr[(numStr.charAt(1)-48)]+"分";
}

}else{
if(numStr.charAt(1)-48!=0){
resultXiao=hanArr[(numStr.charAt(0)-48)]+"角"+hanArr[(numStr.charAt(1)-48)]+"分";
}else{
resultXiao=hanArr[(numStr.charAt(0)-48)]+"角";
}

}
return resultXiao;
}
public static void main(String[] args) {
System.out.print("请输入金额:");
Scanner input = new Scanner(System.in);
double numDouble=input.nextDouble();
renminbi nr = new renminbi();
String[] num = nr.divide(numDouble);
String result=nr.toHanStr(num[0])+nr.toHanStrXiao(num[1]);
System.out.println(result);

}

}

2.运行结果:

五.

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

要求:

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

(2)阅读BigInteger类源码,弄清楚它是使用什么算法实现加减乘除四种运算的?

(3)通过互联网查找大数运算的相关资料,给你的大数类添加乘、除、求阶乘等其它功能。

下面看看BigInteger有哪些重点的属性,主要的有下面三个:
(1)final int signum
signum属性是为了区分:正负数和0的标志位,JDK注释里面已经说的很明白了:
The signum of this BigInteger: -1 for negative, 0 for zero, or 1 for positive. Note that the BigInteger zero must have a signum of 0. This is necessary to ensures that there is exactly one representation for each BigInteger value.
(2)final int[] mag
mag是magnitude的缩写形式,mag数组是存储BigInteger数值大小的,采用big-endian的顺序,也就是高位字节存入低地址,低位字节存入高地址,依次排列的方式。JDK原文注释如下:
The magnitude of this BigInteger, in big-endian order: the zeroth element of this array is the most-significant int of the magnitude. The magnitude must be "minimal" in that the most-significant int (mag[0]) must be non-zero. This is necessary to ensure that there is exactly one representation for each BigInteger value. Note that this implies that the BigInteger zero has a zero-length mag array.
(3)final static long LONG_MASK = 0xffffffffL;
This mask is used to obtain the value of an int as if it were unsigned。

时间: 2024-10-04 10:54:16

java 动手动脑的相关文章

java动手动脑08

一.动手动脑 1)源代码: public class ParentChildTest { public static void main(String[] args) { Parent parent=new Parent(); parent.printValue(); Child child=new Child(); child.printValue(); parent=child; parent.printValue(); parent.myValue++; parent.printValue

java 动手动脑7

---恢复内容开始--- 一.动手动脑:多层的异常捕获-1 阅读以下代码(CatchWho.java),写出程序运行结果: ArrayIndexOutOfBoundsException/内层try-catch 发生ArithmeticException 1.源码: public class CatchWho { public static void main(String[] args) { try { try { throw new ArrayIndexOutOfBoundsException

java动手动脑异常处理

实验任务一:多层的异常捕获-1 1.实验内容:阅读(CatchWho.java),写出程序运行结果: public class CatchWho{ public static void main(String[] args) { try { try { throw new ArrayIndexOutOfBoundsException(); } catch(ArrayIndexOutOfBoundsException e) { System.out.println(  "ArrayIndexOut

Java动手动脑07

(1)现在有三个类: class Mammal{} class Dog extends Mammal {} class Cat extends Mammal{} 针对每个类定义三个变量并进行初始化 Mammal m=null ; Dog d=new Dog(); Cat c=new Cat(); 下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么? m=d; d=m; d=(Dog)m; d=c; c=(Cat)m; 编译错误 d=m;d=c; 不正确 子类对象可以直接赋给基类

java动手动脑和课后实验型问题String类型

1.请运行以下示例代码StringPool.java,查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? true true false 总结: 使用new关键字创建字符串对象时, 每次申请新开辟一个地址空间,存储的地址空间不一样(对象不同),string类型下hello是同一个对象,其内容和地址都相容. 2. public class StringEquals { /** * @param args the command line arguments */ public stati

java动手动脑——异常处理

Java07异常处理动手动脑 异常处理的基本知识 Java异常处理通过5个关键字try.catch.throw.throws.finally进行管理.基本过程是用try语句块包住要监视的语句,如果在try语句块内出现异常,则异常会被抛出,你的代码在catch语句块中可以捕获到这个异常并做处理:还有以部分系统生成的异常在Java运行时自动抛出.你也可以通过throws关键字在方法上声明该方法要抛出异常,然后在方法内部通过throw抛出异常对象.finally语句块会在方法执行return之前执行,

Java动手动脑第四讲课堂作业

动手动脑1 完全"手写代码实现"随机数生成 纯随机数发生器 Modulus=231-1=int.MaxValue Multiplier=75=16807 C=0 当显示过231-2个数之后,才可能重复. 编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数. public class suiji { private static final int N = 200; private static final int LEFT = 40; private static fi

java动手动脑和课后实验型问题第四讲

1.完全"手写代码实现"随机数生成 动手动脑: 编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数. Modulus=231-1=int.MaxValue Multiplier=75=16807 C=0 当显示过231-2个数之后,才可能重复. 编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数. public class suiji { private static final int N = 200; private static final int

java动手动脑

public class EnumTest { public static void main(String[] args) { Size s=Size.SMALL; Size t=Size.LARGE; //s和t引用同一个对象? System.out.println(s==t); // //是原始数据类型吗? System.out.println(s.getClass().isPrimitive()); //从字符串中转换 Size u=Size.valueOf("SMALL");

java动手动脑多态

实验任务一:阅读并运行一下代码 public class ParentChildTest { public static void main(String[] args) { Parent parent=new Parent(); parent.printValue(); Child child=new Child(); child.printValue(); parent=child; parent.printValue(); parent.myValue++; parent.printVal