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

1.设计思路:首先生成10个随机数,然后存放至长度至少是10的数组中,然后计算10个随机数的和,存放至数组的最后,最后输出,用对话框显示。

2.程序流程图:

3.源程序代码:

package Work;
 
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
 
public class Work {
 
public static void main(String[] args) {
// TODO Auto-generated method stub
           int num[]=new int[11];
           int sum=0;
           for(int i=0;i<10;i++){
           num[i]=(int)(Math.random()*100); //随机生成10个数,填充一个数组
           sum+=num[i];
           }
           num[10]=sum;
           String output=" ";
           output += "Subscript\tValue\n";
           for(int i=0;i<11;i++){
            if(i<10)
            {output += i + "\t" + num[ i ] + "\n";}
            if(i==10)
            {
            output+="sum\t"+num[10]+"\n";
            }
           }
           
           JTextArea out=new JTextArea(10,11);
           out.setText(output);
           
           JOptionPane.showMessageDialog(null, out,"随机产生10个数,并显示之和",JOptionPane.INFORMATION_MESSAGE);
           
           System.exit(0);
}
 
}

4.结果截图:

5.编程总结:

①随机数的产生: int num=(int)(Math.random()*100);

②用对话框显示:

import javax.swing.JOptionPane;

import javax.swing.JTextArea;

..........................

JTextArea out=new JTextArea(10,11);

out.setText(output);

JOptionPane.showMessageDialog(null, out,"随机产生10个数,并显示之和",JOptionPane.INFORMATION_MESSAGE);

System.exit(0);

③这个程序的难度不算太大,也学会对话框对应的程序。

二、动手动脑问题

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

①运行结果截图:

②小结:按引用传递与按值传送数组类型方法参数的最大关键在于:使用前者时,如果方法中有代码更改了数组元素的值,实际上是直接修改了原始的数组元素;使用后者则没有这个问题,方法体中修改的仅是原始数组元素的一个拷贝。更通俗一点的说,值传递:原来的值未发生改变;引用传递:原来的值会改变,这是因为引用对象时,传递的是地址。

2.阅读QiPan.java示例程序了解如何利用二维数组和循环语句绘制五子棋盘。

①源程序:

package LianXi;

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.1请编写一个程序将一个整数转换为汉字读法字符串。比如“1123”转换为“一千一百二十三”。

①源代码:

package Work;

import java.util.Scanner;

public class NumChangeStr2 {
private String[] charr={"零" , "一" , "二" , "三" , "四" ,
"五" , "六" , "七" , "八" , "九"};
private String[] danwei={"十","百","千","万","十万","百万"}; private String transStr(String str){
String result="";
int len=str.length();//数字的位数
for(int i=0;i<len;i++){
int num=str.charAt(i)-48;//每一位的数字
if(num!=0 && i!=len-1)//数字不为0 且不是最后一个数字
{ result+=charr[num]+danwei[len-i-2];}
else //不加单位
{
if(result.length()>0 && charr[num].equals("零") && result.charAt(result.length()-1)=='零')
continue;
result += charr[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) {
// TODO Auto-generated method stub
NumChangeStr2 han=new NumChangeStr2();
System.out.print("请输入整数: ");
Scanner scan=new Scanner(System.in);
String str=scan.nextLine();
System.out.print("转换成汉字:"+han.transStr(str)); } }

②运行结果截图:

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

①程序设计思想:首先以字符串形式输入一串数字,最高7位,然后依次遍历转换成一个一个数字,然后定义数字汉字化的数组,和单位数组,然后根据一一对应的关系输出,其中还要分是否是1位数,来考虑是否加单位。

②程序流程图:

③源代码:

package Work;

import java.util.Scanner;

public class NumChangeStr {
private String[] charr={"零" , "壹" , "贰" , "叁" , "肆" ,
"伍" , "陆" , "柒" , "捌" , "玖"};
private String[] danwei={"十","百","千","万","十万","百万"}; private String transStr(String str){
String result="";
int len=str.length();//数字的位数
for(int i=0;i<len;i++){
int num=str.charAt(i)-48;//每一位的数字
if(num!=0 && i!=len-1)//数字不为0 且不是最后一个数字
{ result+=charr[num]+danwei[len-i-2];}
else //不加单位
{
if(result.length()>0 && charr[num].equals("零") && result.charAt(result.length()-1)=='零')
continue;
result += charr[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) {
// TODO Auto-generated method stub
NumChangeStr han=new NumChangeStr();
System.out.print("请输入整数: ");
Scanner scan=new Scanner(System.in);
String str=scan.nextLine();
System.out.print("转换成汉字:"+han.transStr(str)); } }

④运行结果截图:

一位数

两位数

三位数

四位数

小数不满足

无论是几位整数,只要不超过7位数,程序及运行正确。

⑤编程总结:此程序,是在给出的例子上进一步加入用户在屏幕上输入字符串步骤,然后在屏幕上显示出答案。

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

要求:

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

①源代码:

//用数组实现大数的加法和减法

package Work;

import java.util.Scanner;

public class BigNum {

    public static void main(String[] args) {
// TODO Auto-generated method stub int aa,bb;
System.out.println("用数组实现大数的加法和减法");
System.out.print("请输入大数a:");
Scanner scan=new Scanner(System.in);
String a=scan.next();
System.out.print("请输入大数b:");
String b=scan.next();
int A[]=new int[100];
int B[]=new int[100]; for(int i=0;i<a.length();i++){
A[i]=(int) ((a.charAt(i)-48)*Math.pow(10,a.length()-i-1));
}
for(int i=0;i<b.length();i++){
B[i]=(int) ((b.charAt(i)-48)*Math.pow(10,b.length()-i-1));
}
int sum=0;
int sub=0;
for(int i=0;i<a.length();i++){
sum+=A[i]+B[i];
sub+=A[i]-B[i];
}
System.out.print("a+b="+sum);
System.out.println();
System.out.print("a-b="+sub);
} }

②运行结果截图:

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

BigInteger是不可变的任意精度的整数。所有操作中,都以二进制补码形式表示BigInteger(如Java的基本整数类型)。BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。另外,BigInteger 还提供以下运算:模算术、GCD 计算、质数测试、素数生成、位操作以及一些其他操作。

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

①源代码:

//用数组实现大数的加法和减法

package Work;

import java.util.Scanner;
import java.math.BigDecimal; public class BigNum { public static void main(String[] args) {
// TODO Auto-generated method stub int aa,bb;
System.out.println("用数组实现大数的加法和减法");
System.out.print("请输入大数a:");
Scanner scan=new Scanner(System.in);
String a=scan.next();
System.out.print("请输入大数b:");
String b=scan.next();
int A[]=new int[100];
int B[]=new int[100];
//用于复杂的乘法和除法
BigDecimal b1 = new BigDecimal(a) ;
BigDecimal b2 = new BigDecimal(b) ;
for(int i=0;i<a.length();i++){
A[i]=(int) ((a.charAt(i)-48)*Math.pow(10,a.length()-i-1));
}
for(int i=0;i<b.length();i++){
B[i]=(int) ((b.charAt(i)-48)*Math.pow(10,b.length()-i-1));
}
int sum=0;
int sub=0;
for(int i=0;i<a.length();i++){
sum+=A[i]+B[i];
sub+=A[i]-B[i];
}
System.out.print("a+b="+sum);
System.out.println();
System.out.print("a-b="+sub);
System.out.println();
System.out.print("a*b="+b1.multiply(b2));
System.out.println();
System.out.print("a/b="+b1.divideToIntegralValue(b2));
} }

②运行结果截图:

JAVA06数组之动手动脑问题解决的更多相关文章

  1. JAVA 数组作业——动手动脑以及课后实验性问题

    JAVA课后作业——动手动脑 一:阅读并运行示例PassArray.java,观察并分析程序输出的结果,小结,然后与下页幻灯片所讲的内容进行对照. 1.源代码 // PassArray.java // ...

  2. java课堂第一次随机测试和课件课后动手动脑问题解决(2019-9-16 )

    一.课堂测试 1.课堂测试:花二十分钟写一个能自动生成30道小学四则运算题目的 “软件” 要求 (1)减法结果不能为负数 (2)乘法结果不得超过一百,除法结果必须为整数 (3)题目避免重复: (4)可 ...

  3. JAV07接口与继承之动手动脑问题解决

    动手动脑:请自行编写代码测试以下特性:在子类中,若要调用父类中被覆盖的方法,可以使用super关键字. 1.源代码: package Work; class A{ public A(){ System ...

  4. JAVA方法03之动手动脑问题解决

    动手动脑1.当JAVA里定义的函数中去掉static后,怎么办?(如下程序,将square()函数的static去掉) public class SquareIntTest { public stat ...

  5. java异常处理动手动脑问题解决和课后总结

    动手动脑 一.问题:请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识. 1.源代码 import javax.swing.*; cl ...

  6. Java(数组)动手动脑

    1>数组作为方法参数 阅读并运行示例PassArray.java,观察并分析程序输出的结果,小结,然后与下页幻灯片所讲的内容进行对照. 源代码: // PassArray.java // Pas ...

  7. 动手动脑,第六次Tutorial——数组和随机数数组输出及求和

    作业课后作业1 阅读QiPan.java示例程序了解如何利用二维数组和循环语句绘制五子棋盘. 首先,定义string类型的二维数组,它和类的数组不一样,类的数组分配了空间后不能直接for循环赋值,st ...

  8. JAVA语法基础作业——动手动脑以及课后实验性问题 (八)

    一.动手动脑 运行AboutException.java示例,了解Java中实现异常处理的基础知识. 1)源代码 import javax.swing.*; class AboutException ...

  9. 05-String动手动脑问题及课后实验性问题总结

    一.请运行以下实例代码StringPool.java,查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? (1)在Java中,内容相同的字符常量("Hello")只保存一 ...

随机推荐

  1. 利用python检测色情图片简易实例

    import sys import os import _io from collections import namedtuple from PIL import Image class Nude( ...

  2. iOS 消息转发机制

    这篇博客的前置知识点是 OC 的消息传递机制,如果你对此还不了解,请先学习之,再来看这篇.这篇博客我尝试用口语的方式像讲述 PPT 一样给大家讲述这个知识点. 我们来思考一个问题,如果对象在收到无法解 ...

  3. 简单的HttpClient使用

    Httpclient用途很广泛,用来处理各种http请求,这里举个简单的例子 去查询QQ邮件登陆账号检测是的verifycode,一直想怎么能够代码登陆 QQ邮箱,但是QQ的登陆机制做的太TMD牛逼了 ...

  4. CentOS7 Nginx负载均衡

    五台服务器 192.168.155.129 nginx反向代理服务器 192.168.155.130 apache+PHP服务器,PHP要使用mysql函数库,配置的时候就要指定mysql安装路径,所 ...

  5. flag+文件操作

    flag标志位,标识位,在其他语言中可能叫开关,个人觉得当作开关更容易理解.下面我们来利用这个开关来控制文件操作的流程,从而优雅的修改配置文件. global log 127.0.0.1 local2 ...

  6. Hibernate的映射文件

    映射文件的结构和属性 一个映射文件(mapping file)由一个根节点<hibernate-mapping>和多个<class>节点组成, 首先看看根节点<hiber ...

  7. SuiteScript > RecordType internalID采集步骤与结果

    当你碰到一个有很多sub Fields的id需要map到js文件的时候,是不是想到一个个复制到js文件中?建立成Object,library起来,方便不同的module中共享. 一个复制,很烦,很浪费 ...

  8. Jquery页面初始化的4种方式

    <script src="Scripts/jquery-1.8.2.min.js"></script> <script type="text ...

  9. js遍历table中的每一个元素

    function GetInfoFromTable(tableid) { var tableInfo = ""; var tableObj = document.getElemen ...

  10. Ubuntu-server14.04搭建LAMP环境

    转自:http://www.cnblogs.com/myzhibie/p/4330327.html 对于很多PHP初学开发者来讲,搭建一个可用于生产的LAMP环境是一件费时费力的事情,本文以 ubun ...