【练习1】九九乘法表
public class Multiplication_table {
public static void main(String[]args){
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
System.out.print(i+"X"+j+"="+(i*j));
if(j!=i) System.out.print(",");
}
System.out.println();
}
}
}
【练习2】打印由"*"生成的等腰三角形
import java.util.Scanner;
public class test {
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
for(int i=1;i<=n;i++){
for(int j=1;j<=n-i;j++) System.out.print(" ");
for(int j=1;j<=2*i-1;j++) System.out.print("*");
System.out.println();
}
}
}
【练习3】用“*”打印一个圆
//本程序依据x^2+y^2=r^2这个圆公式进行画圆
import java.util.Scanner;
import java.lang.Math;
public class test{
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
double r=scan.nextDouble();
for(double x=-r;x<=r;x+=2){ //此处i+=2,可以控制好更像圆,如果i++像椭圆
double y=Math.sqrt(Math.pow(r, 2)-Math.pow(x, 2));
for(double i=-r;i<=r;i++){
//对于x坐标,遍历一边-r到r所有值,如果和y坐标之差的绝对值在0.5的误差范围内,我们就认为此处i=y,应该大衣呢出点
System.out.print((Math.abs(y-i)<=0.5 || Math.abs(-y-i)<=0.5)?'*':' ');
}
System.out.println();
}
}
}
输入输出样例:
【练习4】通过字节截取实现String的substring方法
方案一
看了网上的各类版本,都没有实现题目要求,下面代码可以实现题目要求,实现和String的substring完全一样的功能。
在eclipse下编译运行,输出结果是错误的,可以用命令行进行编译运行。主要是因为汉字编码问题。eclipse默认GBK编码,而汉字是Unicode编码。
public class test{
public static void main(String[] args){
System.out.println(substring("中国China",1,3));
}
//按照字节截取字符串实现和String的substring完全一样的功能
public static String substring(String str,int indexStart,int indexEnd){
byte[] bt=str.getBytes();
int[] cnt=new int[bt.length];
int num=0;
//标记每个字节对应原字符串中字符的下标
for(int i=0;i<bt.length;i++){
cnt[i]=num;
if(bt[i]<0){
cnt[i+1]=num;
i++;
}
num++;
}
int st=0,en=0;
//寻找原来以indexStart为下标的字符在bt字节数组中开始的字节下标
for(int i=0;i<bt.length;i++){
if(cnt[i]==indexStart){
st=i;
break;
}
}
//寻找原来以indexEnd为下标的字符在bt字节数组中结束的字节下标
for(int i=bt.length-1;i>=0;i--){
if(cnt[i]==indexEnd-1){
en=i;
break;
}
}
return new String(bt,st,en-st+1);//使用String的构造函数String(byte[] bytes, int offset, int length)
}
}
输出:
国C
方案二(主要代码)
String str = "中国abc";
byte[] by = str.getBytes();
byte[] dst = Arrays.copyOfRange(by,2,5);
System.out.println(new String(dst));
【练习5】输入一个浮点数,给出相应的人民币读法。
下面程序输入要求:整数部分8位及以内,小数部分2位及以内。
package assignment;
import java.util.Scanner;
/*
本程序实现整数部分8位及以内,小数部分2位及以内的浮点数用人民币读法表示
比如230432.25表示为贰拾叁万零肆佰叁拾贰元贰角伍分
算法思路:核心思想是解决四位数16种情况的每种人民币读法,这里说的四位数允许有前导0,
再按照前导0读与不读分为两种情况,故相当于共32种情况,解决好这32种情况,核心问题
已经解决!进一步,如果整数部分小于等于9999,则按照不读0的方法转换成人民币读法,如
果整数部分大于等于10000,则低四位按照读0,高四位按照不读0的方法转换成人民币高读法。
*/
public class test{
public final static String HAN="零壹贰叁肆伍陆柒捌玖拾";
public final static String UNIT="十百千";
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
System.out.println("请输入一个浮点数: ");
String s=scan.next();
System.out.println("这个浮点数转换成人民币读为: ");
solve(s);
}
//四位数读0的情况,不足四位补0补够四位,形参一定是长度为4的字符串,不足四位,用前导0先补齐再作为形参
public static String read_0(String s){
char a=s.charAt(0);
char b=s.charAt(1);
char c=s.charAt(2);
char d=s.charAt(3);
if(s.equals("0000")) return "";//0000
else if(a=='0' && b=='0' && c=='0' && d!='0') return HAN.charAt(0)+""+HAN.charAt(d-'0');//0001
else if(a=='0' && b=='0' && c!='0' && d=='0') return HAN.charAt(0)+""+HAN.charAt(c-'0')+UNIT.charAt(0);//0010
else if(a=='0' && b=='0' && c!='0' && d!='0') return HAN.charAt(0)+""+HAN.charAt(c-'0')+UNIT.charAt(0)+HAN.charAt(d-'0');//0011
else if(a=='0' && b!='0' && c=='0' && d=='0') return HAN.charAt(0)+""+HAN.charAt(b-'0')+UNIT.charAt(1);//0100
else if(a=='0' && b!='0' && c=='0' && d!='0') return HAN.charAt(0)+""+HAN.charAt(b-'0')+UNIT.charAt(1)+HAN.charAt(0)+HAN.charAt(d-'0');//0101
else if(a=='0' && b!='0' && c!='0' && d=='0') return HAN.charAt(0)+""+HAN.charAt(b-'0')+UNIT.charAt(1)+HAN.charAt(c-'0')+UNIT.charAt(0);//0110
else if(a=='0' && b!='0' && c!='0' && d!='0') return HAN.charAt(0)+""+HAN.charAt(b-'0')+UNIT.charAt(1)+HAN.charAt(c-'0')+UNIT.charAt(0)+HAN.charAt(d-'0');//0111
else if(a!='0' && b=='0' && c=='0' && d=='0') return ""+HAN.charAt(a-'0')+UNIT.charAt(2);//1000
else if(a!='0' && b=='0' && c=='0' && d!='0') return ""+HAN.charAt(a-'0')+UNIT.charAt(2)+HAN.charAt(0)+HAN.charAt(d-'0');//1001
else if(a!='0' && b=='0' && c!='0' && d=='0') return ""+HAN.charAt(a-'0')+UNIT.charAt(2)+HAN.charAt(0)+HAN.charAt(c-'0')+UNIT.charAt(0);//1010
else if(a!='0' && b=='0' && c!='0' && d!='0') return ""+HAN.charAt(a-'0')+UNIT.charAt(2)+HAN.charAt(0)+HAN.charAt(c-'0')+UNIT.charAt(0)+HAN.charAt(d-'0');//1011
else if(a!='0' && b!='0' && c=='0' && d=='0') return ""+HAN.charAt(a-'0')+UNIT.charAt(2)+HAN.charAt(b-'0')+UNIT.charAt(1);//1100
else if(a!='0' && b!='0' && c=='0' && d!='0') return ""+HAN.charAt(a-'0')+UNIT.charAt(2)+HAN.charAt(b-'0')+UNIT.charAt(1)+HAN.charAt(0)+HAN.charAt(d-'0');//1101
else if(a!='0' && b!='0' && c!='0' && d=='0') return ""+HAN.charAt(a-'0')+UNIT.charAt(2)+HAN.charAt(b-'0')+UNIT.charAt(1)+HAN.charAt(c-'0')+UNIT.charAt(0);//1110
else if(a!='0' && b!='0' && c!='0' && d!='0') return ""+HAN.charAt(a-'0')+UNIT.charAt(2)+HAN.charAt(b-'0')+UNIT.charAt(1)+HAN.charAt(c-'0')+UNIT.charAt(0)+HAN.charAt(d-'0');//1111
else return "Error!!!";//不是上述16种情况则返回错误信息
}
//四位数不读0的情况,不足四位补0补够四位,形参一定是长度为4的字符串,不足四位,用前导0先补齐再作为形参
public static String not_read_0(String s){
char a=s.charAt(0);
char b=s.charAt(1);
char c=s.charAt(2);
char d=s.charAt(3);
if(s.equals("0000")) return ""+HAN.charAt(0);//0000
else if(a=='0' && b=='0' && c=='0' && d!='0') return ""+HAN.charAt(d-'0');//0001
else if(a=='0' && b=='0' && c!='0' && d=='0') return ""+HAN.charAt(c-'0')+UNIT.charAt(0);//0010
else if(a=='0' && b=='0' && c!='0' && d!='0') return ""+HAN.charAt(c-'0')+UNIT.charAt(0)+HAN.charAt(d-'0');//0011
else if(a=='0' && b!='0' && c=='0' && d=='0') return ""+HAN.charAt(b-'0')+UNIT.charAt(1);//0100
else if(a=='0' && b!='0' && c=='0' && d!='0') return ""+HAN.charAt(b-'0')+UNIT.charAt(1)+HAN.charAt(0)+HAN.charAt(d-'0');//0101
else if(a=='0' && b!='0' && c!='0' && d=='0') return ""+HAN.charAt(b-'0')+UNIT.charAt(1)+HAN.charAt(c-'0')+UNIT.charAt(0);//0110
else if(a=='0' && b!='0' && c!='0' && d!='0') return ""+HAN.charAt(b-'0')+UNIT.charAt(1)+HAN.charAt(c-'0')+UNIT.charAt(0)+HAN.charAt(d-'0');//0111
else if(a!='0' && b=='0' && c=='0' && d=='0') return ""+HAN.charAt(a-'0')+UNIT.charAt(2);//1000
else if(a!='0' && b=='0' && c=='0' && d!='0') return ""+HAN.charAt(a-'0')+UNIT.charAt(2)+HAN.charAt(0)+HAN.charAt(d-'0');//1001
else if(a!='0' && b=='0' && c!='0' && d=='0') return ""+HAN.charAt(a-'0')+UNIT.charAt(2)+HAN.charAt(0)+HAN.charAt(c-'0')+UNIT.charAt(0);//1010
else if(a!='0' && b=='0' && c!='0' && d!='0') return ""+HAN.charAt(a-'0')+UNIT.charAt(2)+HAN.charAt(0)+HAN.charAt(c-'0')+UNIT.charAt(0)+HAN.charAt(d-'0');//1011
else if(a!='0' && b!='0' && c=='0' && d=='0') return ""+HAN.charAt(a-'0')+UNIT.charAt(2)+HAN.charAt(b-'0')+UNIT.charAt(1);//1100
else if(a!='0' && b!='0' && c=='0' && d!='0') return ""+HAN.charAt(a-'0')+UNIT.charAt(2)+HAN.charAt(b-'0')+UNIT.charAt(1)+HAN.charAt(0)+HAN.charAt(d-'0');//1101
else if(a!='0' && b!='0' && c!='0' && d=='0') return ""+HAN.charAt(a-'0')+UNIT.charAt(2)+HAN.charAt(b-'0')+UNIT.charAt(1)+HAN.charAt(c-'0')+UNIT.charAt(0);//1110
else if(a!='0' && b!='0' && c!='0' && d!='0') return ""+HAN.charAt(a-'0')+UNIT.charAt(2)+HAN.charAt(b-'0')+UNIT.charAt(1)+HAN.charAt(c-'0')+UNIT.charAt(0)+HAN.charAt(d-'0');//1111
else return "Error!!!";//不是上述16种情况则返回错误信息
}
//小数部分处理,小数最多两位,不足则补足两位,直接类似上面分情况傻瓜便捷式分类
public static String read_decimal(String s){
char a=s.charAt(0);
char b=s.charAt(1);
return HAN.charAt(a-'0')+"角"+HAN.charAt(b-'0')+"分";
}
//把浮点数劈出整数部分
public static String split_to_integer(String s){
int mark=s.length();//标记小数点位置
String integer="";
//寻找小数点位置
for(int i=0;i<s.length();i++){
if(s.charAt(i)=='.'){
mark=i;
break;
}
}
//分离出整数部分赋给integer
for(int i=0;i<mark;i++){
integer+=s.charAt(i);
}
return integer;
}
//把浮点数劈出小数部分
public static String split_to_decimal(String s){
int mark=s.length();//标记小数点位置
String decimal="";
//寻找小数点位置
for(int i=0;i<s.length();i++){
if(s.charAt(i)=='.'){
mark=i;
break;
}
}
//分离出小数部分给decimal
for(int i=mark+1;i<s.length();i++){
decimal+=s.charAt(i);
}
//小数部分规范化为2位
if(decimal.length()==0) decimal="00";
else if(decimal.length()==1) decimal+='0';
return decimal;
}
//获取整数高四位
public static String get_high_4(String s){
String high_4="";
if(s.length()<=4) return "";
else{
for(int i=0;i<s.length()-4;i++){
high_4+=s.charAt(i);
}
//高四位不足4位补足4位
int len=high_4.length();//一定要加上这一句,下面i的范围不能直接用high_4.length(),因为这是变的
for(int i=0;i<4-len;i++){
high_4='0'+high_4;
}
return high_4;
}
}
//获取整数低四位
public static String get_low_4(String s){
String low_4="";
if(s.length()>=4){
for(int i=s.length()-4;i<s.length();i++)
low_4+=s.charAt(i);
}
else{
for(int i=0;i<s.length();i++)
low_4+=s.charAt(i);
for(int i=0;i<4-s.length();i++)
low_4='0'+low_4;
}
return low_4;
}
//解决本问题,读出人民币汉语来
public static void solve(String s){
String integer="",high_4="",low_4="",decimal="",read_high_4="",read_low_4="",read_decim="";
integer=split_to_integer(s); //System.out.println(integer);
decimal=split_to_decimal(s);
read_decim=read_decimal(decimal);
low_4=get_low_4(integer); //System.out.println(low_4);
high_4=get_high_4(integer); //System.out.println(high_4);
if(high_4.equals("")){
read_low_4=not_read_0(low_4);
System.out.println(read_low_4+"元"+read_decim);
}
else{
read_low_4=read_0(low_4);
read_high_4=not_read_0(high_4);
System.out.println(read_high_4+"万"+read_low_4+"元"+read_decim);
}
}
}