java 動手動腦

來源:互聯網
上載者:User

標籤:put   原始碼   size   unsigned   數值   char   param   null   val   

一.隨機產生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。

java 動手動腦

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.