Java开发实战1200例

实例20:从控制台接收输入字符(输入身份证号然后输出位数)

import java.util.Scanner;

public class Test3 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入你的身份证号:");
		String line = sc.nextLine();
		System.out.println("原来你的身份证号是:" + line.length() + "位数字啊");
	}
}

关键是用System类的输入流也就是类变量in,它可以接收用户的输入信息,并且是标准的输入流实例对象。

实例21:重定向输出流实现程序日志

   设计过程:创建RedirectOutputStream类,编写该类的main()主方法,在该方法中保存System类的out成员变量为临时变量,然后创建一个新的文件输出流,并把这个类设置为System类新的输出流。在程序的关键位置输出调试信息,这些调试信息将通过新的输出流保存到日志文件中。最后恢复原有输出流并输出程序运行结束信息。

关键代码如下:

import java.io.FileNotFoundException;
import java.io.PrintStream;


public class RedirectOutputStream {
	public static void main(String[] args) {
		try {
			PrintStream out = System.out;// 保存原有输出流
			PrintStream ps = new PrintStream("./log.txt");// 创建文件输出流
			
			System.setOut(ps);// 设置使用新的输出流
			int age = 18;// 定义整型变量
			System.out.println("年龄变量定义成功,初始值为18");
			String sex = "女";
			System.out.println("性别变量定义成功,初始值为女");
			
			// 整合两个变量
			String info = "这是个" + sex + "孩子,应该有" + age + "岁了";
			System.out.println("整合两个变量为info字符串变量,其结果是:" + info);
			System.setOut(out);
			System.out.println("程序运行完毕,请查看日志文件");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
}
	public static void main(String[] args) {
		try {
			PrintStream out = System.out;// 保存原有输出流
			PrintStream ps = new PrintStream("./log.txt");// 创建文件输出流
			
			System.setOut(ps);// 设置使用新的输出流
			int age = 18;// 定义整型变量
			System.out.println("年龄变量定义成功,初始值为18");
			String sex = "女";
			System.out.println("性别变量定义成功,初始值为女");
			
			// 整合两个变量
			String info = "这是个" + sex + "孩子,应该有" + age + "岁了";
			System.out.println("整合两个变量为info字符串变量,其结果是:" + info);
			System.setOut(out);
			System.out.println("程序运行完毕,请查看日志文件");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
}

控制台运行结果

日志文件内

实例22:自动类型转换与强制类型转换

输出语句中分别输出所有变量累加值。注意每次累加值的数据类型,所有整数运算都被自动转换为int类型再进行运算,所有浮点数值都被自动转换为double类型运算。最后把高类型数据向低类型数据进行牵制类型转换,并注意运算结果是否丢失数据。

关键代码如下:

public class TypeConversion{
	public static void main(String[] args) {
		byte b = 127;
		char c = 'W';
		short s = 23561;
		int i = 3333;
		long l = 400000L;
		float f = 3.14159F;
		double d = 54.523;
		//低类型向高类型自动转换
		System.out.println("累加byte等于:"+b);
		System.out.println("累加char等于:" +(b+c));
		System.out.println("累加short等于:" +(b+c+s));
		System.out.println("累加int等于:"+(b+c+s+i));
		System.out.println("累加long等于:" +(b+c+s+i+l));
		System.out.println("累加float等于:"+(b+c+s+i+l+f));
		System.out.println("累加long等于:"+(b+c+s+i+l+f+d));
		//高类型向低类型的强制转换
		System.out.println("把long强制类型转换为int:"+(int)l);
		//高类型向低类型转换会丢失数据
		System.out.println("int--short:"+(short)l);
		//实数到整数转换将舍弃小数部分
		System.out.println("double--int:"+(int)d);
		//整数到字符类型转换将获取对应编码的字符
		System.out.println("short--char:"+(char)s);
		
	}
	
}

 

 

实例25:更精确地使用浮点数

典型实例:货币运算。在计算机中所以数字都是使用二进制进行存储的,而二进制无法精确地表示所有的小数。

import java.math.BigDecimal;

public class AccuratelyFloat{
	public static void main(String[] args) {
		double money = 2;
		double price = 1.1;
		double result = money - price;
		System.out.println("非精确计算");
		System.out.println("剩余金额:"+result);
		//精确浮点数的解决方法
		BigDecimal money1 = new BigDecimal("2");
		BigDecimal price1 = new BigDecimal("1.1");
		BigDecimal result1 = money1.subtract(price1);
		System.out.println("精确计算");
		System.out.println("剩余金额:"+result1);
		
	}
}

创建BigDecimal类的实例时,在构造方法中一定要使用数字字符串作为参数。如果直接使用浮点数或该类型的变量作为参数,那么构造方法接收的是经过二进制存储的浮点数。

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

设计过程:该方法首先假设一个用户消费总额的变量money,并初始化一个折扣变量rebate,然后经过运算来获得用户等级,对不同的等级给予不同的折扣优惠。

关键代码如下:

public class ProductPrice{
	public static void main(String[] args) {
		float money = 1206;//金额
		float rebate = 0f;//折扣
		if(money>200){
			int grade = (int)money/200;//等级
			switch(grade){//根据等级计算折扣比例
			case 1:
				rebate = 0.95f;
				break;
			case 2:
				rebate = 0.90f;
				break;
			case 3:
				rebate = 0.85f;
				break;
			case 4:
				rebate = 0.83f;
				break;
			default:
				rebate = 0.60f;	
			}
		}
		System.out.println("您的累计消费金额为:"+money);
		System.out.println("您将享受"+rebate+"折优惠!");
	}
	
}

实例37:for循环输出空心的菱形

public class Diamond{
	public static void main(String[] args){
		printHollowRhombus(10);
	}
	public static void printHollowRhombus(int size){
		if(size % 2 == 0){//计算菱形大小
			size++;
		}
		for(int i = 0; i < size/2 + 1;i++){
			for(int j = size/2 + 1; j > i+1; j--){//输出左上角位置的空白
				System.out.print(" ");
			}
			for(int j = 0; j < 2*i + 1; j++){
				if(j==0||j==2*i){
					System.out.print("*");//输出菱形上半部边缘
				}else{
					System.out.print(" ");//输出菱形上半部空心
				}	
			}
			System.out.println("");
		}
		for(int i = size/2 + 1; i < size; i++){
			for(int j = 0; j < i - size/2; j++){
				System.out.print(" ");输出菱形左下角空白
			}
			for(int j = 0; j < 2*size-1-2*i; j++){
				if(j == 0||j == 2*(size-1-i)){
					System.out.print("*");//输出菱形下半部边缘
					//System.out.println("\n");
				}else{
					System.out.print(" ");//输出菱形下半部空心
				}
			}System.out.println("");
		}
		
	}	
}
	
		

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值