疯狂JAVA讲义——第二章练习题

时间:2023-02-24 00:13:08

第一题 输出九九乘法表

简单

package chapter4;
public class MultiplicationTable {
//该方法会输出一个九九乘法表
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i = 1; i < 10 ;i++){
for(int j = 1 ;j < i+1 ; j++)
{
System.out.print( i + "X" + j + "=" + i*j + " ");
}
System.out.println();
}
}
}

疯狂JAVA讲义——第二章练习题

第二题 循环输出等腰三角形

注意找到规律就可以了

package chapter4;

import java.util.Scanner;


public class EquicruralTriangle {
//使用 “ * ” 输出一个等腰三角形
public static void main(String[] args) {
// TODO Auto-generated method stub
int n = 8;

System.out.println(n);
int temp = n;
for(int i = 1; i < n+1 ;i++)
{
temp -= 1;
for(int j = temp ; j > 0 ; j--)
{
System.out.print(" ");
}
for(int u = 0; u < 2*i-1; u++)
{
System.out.print("*");
}
System.out.println();
}
}

}

疯狂JAVA讲义——第二章练习题

第四题 实现按照字节截取字符串但是汉字按照两个字节截取

开始的时候纠结于如何在原来的String上进行截取输出
尝试了如下思路:
从要求开始的地方输出,每当输出是一个汉字的时候就把要输出多少个字节减少两个(非汉字就一个);
但是会遇到当要求的位置不能输出一个整个汉字的情况,没想到怎么解决;
最后采用:
遍历初始String遇到汉字就在该汉字后面添加一个符号以此来建立新的String,且当要求输出的位置在该特殊符号的一些情况下进行分类就可以判别出是否可以输出整个该汉字。

package chapter4;

public class substring2 {
public static boolean isalpha(char ch){
if(ch>= 65 && ch<=122)
{
return true;
}
else
{
return false;
}
}
//该方法所输出的范围是[from,end)而不是[from,end];
public static void substring(String str, int from ,int end){
//求出一个汉字算两个字节的情况下的所有字节数length;
int length = 0;
for(int i = 0 ; i < str.length(); i++ ){
if(isalpha(str.charAt(i))){
length += 1;
}
else{
length += 2;
}
}
//按照求出的length重新创立数组以0作为一个字节放在汉字后面
int cnt = 0;
char[] str1 = new char[length] ;
for(int j = 0 ; j < length ; j++)
{
str1[j] = str.charAt(cnt);
if(!isalpha(str.charAt(cnt))){
//如果不是字母那么他的下一个存为null
j += 1;
str1[j] = '0';
}
cnt += 1;
}
//按照要求输出
for(int u = from; u < end ; u++){
if(str1[u] != '0' && u != end-1)
{
System.out.print(str1[u]);
}
else if(u == end-1 && !isalpha(str1[u])){

}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "a中国bcd中e国";
substring(str,3,11);
}
}

疯狂JAVA讲义——第二章练习题

第五题 编写程序将浮点数换成人民币读法(仅实现四位整数两位小数)

在书本的源代码的基础上仿照整数部分编写小数部分的代码;
修改方法的形参和返回值;
在main函数中修改调用以获得结果;

package chapter4;

import java.util.Arrays;

public class Num2Rmb
{
private String[] hanArr = {"零" , "壹" , "贰" , "叁" , "肆" ,"伍" , "陆" , "柒" , "捌" , "玖"};
private String[] unitArr = {"十" , "百" , "千" };
private String[] unitArr1 = { "分" ,"角"};
// 分解出来的整数部分和小数部分。第一个数组元素是整数部分,第二个数组元素是小数部分。
private String[] divide(double num)
{
// 将一个浮点数强制类型转换为long,即得到它的整数部分
long zheng = (long)num;
// 浮点数减去整数部分,得到小数部分,小数部分乘以100后再取整得到2位小数
//round()取整数部分
long xiao = Math.round((num - zheng) * 100);
// 下面用了2种方法把整数转换为字符串
return new String[]{zheng + "", String.valueOf(xiao)};
}
private void toHanStr(double num){
String[] Str = this.divide(num);
this.toHanStr1(Str[0]);
this.toHanStr2(Str[1]);
}
//把一个两位数字变成小数部分汉字字符串
private void toHanStr2(String numStr)
{
String result = "";
int numLen = numStr.length();
// 依次遍历数字字符串的每一位数字
for (int i = 0 ; i < numLen ; i++ )
{
// 把char型数字转换成的int型数字,因为它们的ASCII码值恰好相差48
// 因此把char型数字减去48得到int型数字,例如'4'被转换成4。
int num = numStr.charAt(i) - 48;
// 如果不是最后一位数字,而且数字不是零,则需要添加单位(千、百、十)
if ( i != numLen - 1 && num != 0 )
{
result += hanArr[num] + unitArr1[numLen - 1 - i];
}
// 否则不要添加单位
else
{
result += hanArr[num];
}
}
result += "分";
System.out.print(result);
}
//把一个四位的数字字符串变成汉字字符串
private void toHanStr1(String numStr)
{
String result = "";
int numLen = numStr.length();
// 依次遍历数字字符串的每一位数字
for (int i = 0 ; i < numLen ; i++ )
{
// 把char型数字转换成的int型数字,因为它们的ASCII码值恰好相差48
// 因此把char型数字减去48得到int型数字,例如'4'被转换成4。
int num = numStr.charAt(i) - 48;
// 如果不是最后一位数字,而且数字不是零,则需要添加单位(千、百、十)
if ( i != numLen - 1 && num != 0 )
{
result += hanArr[num] + unitArr[numLen - 2 - i];
}
// 否则不要添加单位
else
{
result += hanArr[num];
}
}
result += "元";
System.out.print(result);
}

public static void main(String[] args)
{
Num2Rmb nr = new Num2Rmb();
double num = 5284.25;
System.out.println(num);
nr.toHanStr(num);

}
}

疯狂JAVA讲义——第二章练习题