java练习题解惑。
package com.zy.javapuzzler;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.util.regex.Pattern;
import org.apache.log4j.Logger;
public class Puzzler {
public static Logger logger=Logger.getLogger(Puzzler.class);
public static void main(String[] arg){
// longDivision();
// elementary();
// joyOfHex();
// LastLaugh();
// ABC();
// AnimalFarm();
// linePrinter();
// stringCheese();
// classifier();
getclassName();
}
/**
* java谜题1—表达式谜题
* 1.奇数性 判断是否为奇数
* @param i
* @return
*/
public static boolean isOdd(int i){
//return i%2==1;error
//return (i&1)!=0;
return i%2!=0;
}
/**
* 2.找零问题 在精确答案 货币计算 避免使用float和double
* 一般使用int、long、BigDecimal
*/
public static void changeError(){
System.out.println(2.00-1.10);//0.899…
System.out.println(2.00f-1.10f);//0.9
System.out.printf(“%.2f%n”,2.00-1.10);//0.90
System.out.println((200-110)+”cents”);
System.out.println(new BigDecimal(“2.00″).subtract(new BigDecimal(“1.10″)));//不要使用BigDecimal(double d)
new BigDecimal(“2.00″).add(new BigDecimal(“1.10″));
new BigDecimal(“2.00″).multiply(new BigDecimal(“1.10″));
new BigDecimal(“2.00″).divide(new BigDecimal(“1.10″));
String str=new BigDecimal(“2.00″).toPlainString();
}
/**
* 3.长整除问题 加L 大小写无所谓
*/
public static void longDivision(){
// final long Micros_per_Day=24*60*60*1000*1000;
// final long Millis_per_day=24*60*60*1000;
final long Micros_per_Day=24l*60*60*1000*1000;
final long Millis_per_day=24l*60*60*1000;
System.out.println(Micros_per_Day/Millis_per_day);
}
/**
* 4.初级问题 最好大写 不要小写
*/
public static void elementary(){
System.out.println(12345+5432l);
}
/**
* 5.十六进制的趣事
*/
public static void joyOfHex(){
// System.out.println(Long.toHexString(0X100000000L+0Xcafebabe));
System.out.println(Long.toHexString(0X100000000L+0XcafebabeL));
}
/**
* 6.多重转型
*/
public static void Multicast(){
System.out.println((int)(char)(byte)-1);//2 16次幂-1
}
/**
* 7.互换内容 编译器不同
*/
public static void CleverSwap(){
int x=1984;
int y=2001;
x^=y^=x^=y;
//java中x^=y^=x^=y的实际行为
//int tmp1=x;
//int tmp2=y;
//int tmp3=x^y;
//x=tmp3;
//y=tmp2^tmp3;
//x=tmp1^y;
//正确写法:y=(x^=(y^=x))^y;
System.out.println(“x=”+x+”;y=”+y);
}
/**
* 8.Dos Equis 条件表达式规则
*/
public static void DosEquis(){
char x=’X';
int i=0;
System.out.println(true?x:0);
System.out.println(false?i:x);//混合类型计算易发混乱
}
/**
* 9.半斤 复合赋值操作符 会悄悄转为为左侧数据类型
*
*/
public static void halfKg(){
short x=0;
int i= 123456;
x+=i;
}
/**
* 10.八两
*/
public static void eightKg(){
Object x=”Buy”;
String i= “Effective Java!”;
x=x+i;
// x+=i;非法
i+=x;
}
/**
* java谜题2—字符谜题
* 11.最后的笑声 字符串问题
*/
public static void LastLaugh(){
System.out.println(“H”+”a”);
System.out.println(‘H’+'a’);
StringBuffer sb=new StringBuffer();//字符串缓冲区
sb.append(‘H’);
sb.append(‘a’);
System.out.println(sb);
System.out.println(“”+’H'+’a');
System.out.println(“2+2=”+2+2);
System.out.printf(“%c%c”,’中’,'a’);
}
/**
* 12.ABC
*/
public static void ABC(){
String letters=”ABC”;
char[] numbers={’1′,’2′,’3′};
System.out.println(letters+”easy as”+numbers);
System.out.println(String.valueOf(numbers));
System.out.println(numbers.toString());
System.out.println(numbers);
}
/**
* 13.畜牧场
*/
public static void AnimalFarm(){
final String pig=”length: 10″;
final String dog=”length: “+pig.length();
String pig2=”length: 10″;
String dog2=”length: “+pig2.length();
String dog3=”length: 10″;
System.out.println(“Animals are equal:”+pig==dog);
System.out.println(“Animals are equal:”+(pig==dog));
System.out.println(“Animals are equal:”+pig.equals(dog));
System.out.println(pig2==dog2);
System.out.println(pig2==dog3);
}
/**
* 14.转义字符的溃败
*/
public static void EscapeRout(){
System.out.println(“a\u0022.length()+\u0022b”.length());
//转义字符 \’ \n \t \\
// 转义字符序列 Unicode转义字符
}
/**
* 15.令人昏头的转向的Hello
*
* Generated by the IBM idl-to-java compiler,version 1.0
* from F:\TestRoot\apps\a1\u1000
*/
public static void Hello(){
System.out.print(“Hell”);
System.out.println(“o world”);
//总之,要确保字符斜杠u不出现在一个合法的Unicode转义字符上下文之外,(u后面必须有四位数字)即使在注释中也是如此
}
/**
* 16.行打印程序
*/
public static void linePrinter(){
//Note:\u000A
//is Unicode representation of linefeed(LF)
char c=0x000A;
// System.out.println(c);
System.out.printf(“%n%n”);
}
/**
* 17.嗯?
*/
//unicode转义字符只有在向程序中插入其他任何方式都无法表示的字符时才是必须的,Unicode转义字符降低了程序的清晰度
//并且增加产生bug的可能性
/**
* 18.字符串奶酪
*/
public static void stringCheese() {
byte bytes[] =new byte[256];
for(int i=0;i<256;i++)
bytes[i]=(byte)i;
// String str=new String(bytes);缺省字符集 结果不可预知
String str=”";
try {
str = new String(bytes,”ISO-8859-1″);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int i=0,n=str.length();i<n;i++)
System.out.println((int)str.charAt(i)+” “);
}
/**
* 19.漂亮的火花
*/
public static void classifier(){
char[] chars= new char[]{‘n’,'+’,’2′};
for(int i=0;i<chars.length;i++){
if(“0123456789″.indexOf(chars[i])>=0){
System.out.println(“Numeral”);
}else if(“abcdefghijklmnoprstuvwxyz”.indexOf(chars[i])>=0){
System.out.println(“Letter”);
}
// else if(“+-*/&|!=”>=0){
//System.out.println(“Operator”);
//}
else{
System.out.println(“Unknow”);
}
}
System.out.println(“125632″.indexOf(“2″));//1
System.out.println(“125632″.indexOf(“256″));
}
/**
* 20.我的类是什么
*/
public static void getclassName(){
//replaceAll 正则表达式”.”可以匹配任何单个的字符,可以进行转义
System.out.println(Puzzler.class.getName().replaceAll(“.”, “/”)+”.class”);
System.out.println(Puzzler.class.getName().replace(“.”, “/”)+”.class”);
System.out.println(Puzzler.class.getName().replaceAll(“\\.”, “/”)+”.class”);
System.out.println(Puzzler.class.getName().replaceAll(Pattern.quote(“.”), “/”)+”.class”);
}
}