您的位置:首页 > 编程语言 > Java开发

Java程序设计练习2——Java基础应用

2013-05-16 16:15 225 查看

第二章Java基础应用

2.1基本语法

实例019输出错误信息和调试信息

  利用两个System类成员变量输出,两个类成员变量是out和err,都是static,out主要用于输出调试信息,err用于输出错误信息,一般用红色显示(在eclipse控制台是这样)。out和err都是实例对象成员。注:实例变量也是变量,首字母小写

  

packagechapter2;

publicclassDemo019{
publicstaticvoidmain(String[]args){
System.out.println("输出错误信息");
System.err.println("输出错误信息");

}
}


输出结果:   

    输出错误信息
    输出错误信息

备注:err可以输出错误信息,但也不仅仅只是输出错误信息,输出信息是一个基本功能,只是颜色弄成红色以示提醒,本质是输出信息,加上红色表示提醒,这些信息可以是错误的,也可以是特别需要提醒用户的。

实例020从控制台输入字符

  类似输出,输入使用in这个实例变量,也是System类的。它是一个输入流类变量,可以接收用户输入的信息,是标准的输入流实例对象。输入流就像一个管子一样,将从一个输入口接收到的东西"搭"到另一个目的地方,将信息流输入进去。System类的in就是这样的一个管子。可以从用户那里接收信息。

  另外使用Scanner来扫描用户输入的信息。

代码如下:

  

packagechapter2;

importjava.util.Scanner;

publicclassDemo020{
publicstaticvoidmain(String[]args){
//搭建一个输入流扫描器
Scannerscanner=newScanner(System.in);
//提示请输入你的名字
System.out.println("请输入你的名字:");
//将扫描的内容输入到一个字符串中
Stringline=scanner.nextLine();
//输出名字
System.out.println("你的名字是:"+line);
}
}
输出结果:
请输入你的名字:
王家玮
你的名字是:王家玮


实例021暂时不懂

实例022自动类型和强制类型转换

  注意:+两边的操作数类型不同,操作值结果也是不同的。同属于基本类型的,运算后,结果是自动转换后,如果一个是字符串一个是数值,操作结果是字符串。

packagechapter2;

publicclassDemo022{
publicstaticvoidmain(String[]args){
//创建各种基本类型的变量
byteb=127;
charc='a';
shorts=97;
inti=212;
longl=23242L;
floatf=3.4F;
doubled=23.4;
//自动转换输出
System.out.println("byte+ char="+(b+c));//b和c先转换成int再计算的
System.out.println("byte+char+short="+(b+c+s));//同上
System.out.println("byte+char+short+int="+(b+c+s+i));
System.out.println("byte+char+short+int+long="+(b+c+s+i+l));
System.out.println("byte+char+short+int+long+float="
+(b+c+s+i+l+f));
System.out.println("byte+char+short+int+long+float+double="
+(b+c+s+i+l+f+d));
//强制转换
System.out.println("double转换成int="+(int)d);
System.out.println("long转换成int="+(int)l);
System.out.println("short转换成char="+(char)s);
System.out.println("char转换成int="+(int)c);
}
}


实例023利用位运算进行加密
  可以利用异或运算符^对字符串的每一个字符进行异或运算,这样就可以得到一个新的字符串,这个被处理过的字符串其实就是经过加密的。

packagechapter2;

importjava.util.*;

publicclassDemo023{
publicstaticvoidmain(String[]args){
//创建扫描器,扫描输入的密码
Scannerscanner=newScanner(System.in);
System.out.println("请输入你的密码:");
Stringstr=scanner.nextLine();
//将输入的字符串转换成数组进行处理
char[]array=str.toCharArray();
for(inti=0;i<array.length;i++){
array[i]=(char)((array[i])^100000);
}
//输出转换后的结果
System.out.println("加密后的结果是:");
for(chari:array){
System.out.print(i);
}
//另一种输出方式
System.out.println("\n"+newString(array));
}
}


输出结果:    

请输入你的密码:
123456
加密后的结果是:
蚑蚒蚓蚔蚕蚖
蚑蚒蚓蚔蚕蚖

总结:

   灵活运用位运算可以实现很多高级、高效的算法。例如,一个数字的位移运算,每左移n位就等于这个数乘以2的n次方,每右移n位就等于这个数除以2的n次方,而且这个算法非常快。

实例024用三元运算符判断技术和偶数

  三元运算符是if...else条件语句的简写格式,可以完成简单的条件判断。本实例利用三元运算符实现奇偶数的判断,程序要求用户输入一个整数,然后判断是奇数还是偶数并输出判断结果。代码如下:

packagechapter2;
/**本实例利用三元运算符实现奇偶数的判断,程序要求用户输入一个整数,
*然后判断是奇数还是偶数并输出判断结果。
*/
importjava.util.*;

publicclassDemo024{
publicstaticvoidmain(String[]args){
Scannerscanner=newScanner(System.in);
System.out.println("请你输入一个整数呢:");
longnumber=scanner.nextLong();
Stringresult=((number%2)==0)?"这个数是偶数!":"这个数是奇数!";
System.out.println(result);

}
}


总结:

  三元运算符的使用语法是(表达式判断逻辑值)?(结果1):(结果2)具体的含义是:如果表达式判断的逻辑值是真,就输出结果1,如果是假就输出结果2

025更精确的使用浮点数

  使用BigDecimal进行大数运算

  BigDecimal可以进行高精度的数值运算,有四个常用的四则运算方法,add,subtract,multiply,divide

packagechapter2;

importjava.math.BigDecimal;

publicclassDemo025{
publicstaticvoidmain(String[]args){
//非精确计算
doubleprice=3.3;
doublemoney=5;
doubleresult=money-price;
//输出剩余的钱
System.out.println("double精度剩余的钱:"+result);
BigDecimalprice1=newBigDecimal(3.3);
BigDecimalmoney1=newBigDecimal(5);
BigDecimalresult1=money1.subtract(price1);
//输出精确计算下的钱
System.out.println("BigDecimal精度剩余的钱:"+result1);

}
}
输出结果
double精度剩余的钱:1.7000000000000002
BigDecimal精度剩余的钱:1.70000000000000017763568394002504646778106689453125


实例026利用移位运算符进行乘法运算
  程序开发中乘法运算通常是*或BigDecimal类的multiply()方法,本例用的是移位运算符实现特殊的乘法运算,这种运算方式速度效率非常之高,在大数运算的时候特别有用。
原理:一个整数A执行向左移位运算n位,效果等同于这个整数A乘以2的n次方,注意不是这个整数的n次方。

  

packagechapter2;

importjava.util.*;

//利用移位运算符实现整数乘法运算
publicclassDemo026{
publicstaticvoidmain(String[]args){
System.out.println("请输入一个整数:");
Scannerscanner=newScanner(System.in);
longlg=scanner.nextLong();
System.out.println("您输入的数是:"+lg);
//移位运算不能单独作为一个语句
//2<<2;
System.out.println("该数字乘以2的结果是:"+(lg<<1));
System.out.println("该数字乘以4的结果是:"+(lg<<2));
System.out.println("该数字乘以8的结果是:"+(lg<<3));
System.out.println("该数字乘以16的结果是:"+(lg<<4));
System.out.println("该数字乘以32的结果是:"+(lg<<5));
System.out.println("该数字乘以64的结果是:"+(lg<<6));

}
}
输出结果:
请输入一个整数:
99
您输入的数是:99
该数字乘以2的结果是:198
该数字乘以4的结果是:396
该数字乘以8的结果是:792
该数字乘以16的结果是:1584
该数字乘以32的结果是:3168
该数字乘以64的结果是:6336


实例27不借用第三个变量实现两个数字的交换
  实现原理:利用按位运算的异或运算符^实现两个变量的互换。按位异或运算符进行位运算规则是:两个位,相同的结果取0,不同的结果取1.另外需要注意的是按位运算符运算结果必须赋值给一个结果,单纯的运算作为一个语句如A^B是非法的,会报错

  

packagechapter2;

importjava.util.Scanner;

publicclassDemo027{
publicstaticvoidmain(String[]args){
System.out.println("请输入第一个整数:");
Scannerscannera=newScanner(System.in);
longa=scannera.nextLong();
System.out.println("您输入的数是:"+a);
System.out.println("请输入第二个整数:");
Scannerscannerb=newScanner(System.in);
longb=scannerb.nextLong();
System.out.println("您输入的数是:"+b);
System.out.println("交换前的a和b:"+"a="+a+"b="+b);
a=a^b;
b=b^a;
a=a^b;
System.out.println("交换后的a和b:"+"a="+a+"b="+b);
}
}

输出结果是:
请输入第一个整数:
2
您输入的数是:2
请输入第二个整数:
9
您输入的数是:9
交换前的a和b:a=2b=9
交换后的a和b:a=9b=2



2.3条件语句

实例028判断某一年是否为闰年

原理:判断是否是闰年的关键是公式。满足两种条件的整数:1.能够被400整除的整数。2.能够被4整除但不能被100整除的整数

packagechapter2;

importjava.util.Scanner;

publicclassDemo028{
publicstaticvoidmain(String[]args){
System.out.println("请输入一个年份:");
Scannerscanner=newScanner(System.in);
longlg=scanner.nextLong();

if(((lg%4==0)&&((lg%100)!=0))||(lg%400==0)){
System.out.println("您输入的年份"+lg+"是闰年");
}else{
System.out.println("您输入的年份"+lg+"不是闰年");
}
}
}
输出结果:
请输入一个年份:
2100
您输入的年份2100不是闰年


注意:三元运算符(?:)是if...else...语句的简洁写法,可以根据需要来决定使用哪一种,前者常用于赋值判断,后者常用于业务流程

实例029验证登陆信息的合法性

packagechapter2;

importjava.util.Scanner;

publicclassDemo029{
publicstaticvoidmain(String[]args){
System.out.println("请输入您的姓名:");
ScannerscannerName=newScanner(System.in);
Stringname=scannerName.nextLine();
System.out.println("请输入您的密码:");
ScannerscannerPasswd=newScanner(System.in);
Stringpassword=scannerPasswd.nextLine();
loginCheck(name,password);
}
publicstaticvoidloginCheck(Stringname,Stringpassword){
if(name.equals("ren")&&password.equals("123456")){
System.out.println("登录成功!");
}else{
System.out.println("登录失败!");
}
}
}


相关说明:字符串属于基本对象而非基本数据类型,不能使用==来判断两个字符串是否相等,所以它需要通过equals()方法来判断两个字符串内容是否相同,如果使用==判断的将是两个字符串对象的地址,而非字符串内容。

实例030为新员工分配部门

原理:这里使用switch语句,并利用hashCode来区分不同情况

importjava.util.Scanner;
publicclassExample{
publicstaticvoidmain(String[]args){
Scannerscan=newScanner(System.in);
System.out.println("请输入新员工的姓名:");
Stringname=scan.nextLine();//接收员工名称
System.out.println("请输入新员工应聘的编程语言:");
Stringlanguage=scan.nextLine();//接收员工应聘的编程语言
//根据编程语言确定员工分配的部门
switch(language.hashCode()){
case3254818://java的哈希码
case2301506://Java的哈希码
case2269730://JAVA的哈希码
System.out.println("员工"+name+"被分配到Java程序开发部门。");
break;
case3104://c#的哈希码
case2112://C#的哈希码
System.out.println("员工"+name+"被分配到C#项目维护组。");
break;
case-709190099://asp.net的哈希码
case955463181://Asp.net的哈希码
case9745901://ASP.NET的哈希码
System.out.println("员工"+name+"被分配到Asp.net程序测试部门。");
break;
default:
System.out.println("本公司不需要"+language+"语言的程序开发人员。");
}
}
}
输出结果:

请输入新员工的姓名:
Jack
请输入新员工应聘的编程语言:
java
员工Jack被分配到Java程序开发部门。



实例031::用Switch语句根据消费金额计算折扣

packagechapter2;

publicclassDemo0111{
publicstaticvoidmain(String[]args){
//创建包含几种语言的数组
String[]language=newString[]{"Chinese","English",
"Deutsch","Castellano"};
intindex=0;
while(index<language.length){
System.out.println(language[index++]);
}
}
}
输出结果:
Chinese
English
Deutsch
Castellano


ViewCode
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: