JAVA进阶版:equals、枚举、随机数、日期、数字、栈、键盘输入

1. equals方法

注意:比较字符串是否相等,用equals()方法,不能用等号“==”;
equals()方法比较字符串的内容,而等号比较值或内存地址。

package javase.jingjie.equals;
/**
 * 关于java语言中如何比较两个字符串是否一致。
 * ---通过调用SUN公司String类的equals方法,不能用等号“==”
 * */
public class BiJiao {
	public static void main(String[] args) {
		String s1=new String("ABC");
		String s2=new String("ABC");
		System.out.println(s1==s2);//false 比较的是内存地址,两个新创建的对象不相等
		
		//String已经重写了Object中的equals方法,比较的是内容
		System.out.println(s1.equals(s2));//true
	}
}

2.枚举:enum

(1)引入枚举案例

package javase.jingjie.MeiJu;
/**
 * 需求:定义一个方法,该方法的作用是计算两个int 类型数据的商
 * 如果计算成功则该方法返回1,若果执行失败则该方法返回0
 * */
public class MeiJu01 {

	public static void main(String[] args) {
		int a=10;
		int b=0;
		int retValue=divide(a,b);
		if(retValue==1) {
			System.out.println("成功");
		}else if(retValue==0) {
			System.out.println("失败");
		}
	}

	//实现需求
	public static int divide(int a,int b) {
		//try{}语句块中放着异常语句块,catch{}语句块放着处理异常的语句块
		try {
			//如果以下语句块无异常执行正确,则返回1,不用执行catch{}语句块;否则,执行catch语句块
			int c=a/b;
			return 1;//成功
		}catch(Exception e){
			return 0;//失败
		}
	}
}

(2) 枚举类型:enum
要求:枚举类型定义的变量都是大写,且变量数量有限。

package javase.jingjie.MeiJu;
public class MeiJu02 {
	public static void main(String[] args) {
		int a=10;
		int b=0;
		Result retValue=divide(a,b);
		if(retValue==Result.SUCCESS) {
			System.out.println("成功");
		}else if(retValue==Result.FALL) {
			System.out.println("失败");
		}
	}
	//实现需求
	public static Result divide(int a,int b) {
		//try{}语句块中放着异常语句块,catch{}语句块放着处理异常的语句块
		try {
			//如果以下语句块无异常执行正确,则返回1,不用执行catch{}语句块;否则,执行catch语句块
			int c=a/b;
			return Result.SUCCESS;//成功
		}catch(Exception e){
			return Result.FALL;//失败
		}
	}
}
//定义一个枚举类型
enum Result{
	//成功和失败。 规范要求:大写
	SUCCESS,FALL//有限的数据
}

//四季
enum Season{
	SPRING,SUMMER,AUTUMN,WINTER
}
//颜色
enum Color{
	GREEN,BLUE,RED
}

3. 随机数:Random

(1) Random

package javase.jingjie.Random;
import java.util.Random;
/*
 * 生成 随机数
 * */
public class RandomTest {
	public static void main(String[] args) {
		// 创建一个新的随机数生成器
		Random r=new Random();
		//生成int类型的随机数
		//int i=r.nextInt(101);
		//System.out.println(i);
		
		//循环生成5个随机数
		for(int i=0;i<5;i++) {
			System.out.println(r.nextInt(5));
		}
	}
}

(2)案例:生成5个不重复的随机数【1-5】

package javase.jingjie.Random;
/**
 * 生成5个不重复的随机数【1-5】
 * 结果:每次运行都会产生5个不同数字的随机数:15423,45123..........
 * */
import java.util.Random;
public class RandomTest02 {
	public static void main(String[] args) {
		Random r =new Random();
		int[] a=new int[5];
		int index=0;
		while(index<5) {
			int temp=r.nextInt(6);
			//伪代码
			if(temp!=0 && !contain(a,temp)) {//!contain(a,temp)是保证不出现相等的随机数
				a[index++]=temp;
			}
			
			//遍历
			for(int i=0;i<a.length;i++) {
				System.out.println(a[i]);
			}
		}
	}
	
	//该方法完成判断temp元素在a数组中是否包含,包含返回true
	public static boolean contain(int [] a,int temp) {
		for(int i=0;i<=a.length-1;i++) {
			if(a[i]==temp) {
				return true;
			}
		}
		return false;
	}
}

4.日期

(1) 获取日历

package javase.jingjie.RiQi;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class RiLi {
	public static void main(String[] args) throws Exception{
		// 获取系统当前日历
		Calendar c =Calendar.getInstance();
		
		//查看当前日历的“星期几”
		int i=c.get(Calendar.DAY_OF_WEEK);
		//int i=c.get(7);
		System.out.println(i);//7  周六是第7天
		System.out.println(c.get(Calendar.DAY_OF_MONTH));//28 今天是28号
		
		//获取2008 8 8是星期几?
		//获取2008 8 8的日历 
		String strTime="2008,08,08";
		Date d=new SimpleDateFormat("yyyy,MM,dd").parse(strTime);
		
		//该日历就是2008 8 8的日历
		c.setTime(d);//获取指定日期赋值给当前
		//获取星期几
		System.out.println(c.get(Calendar.DAY_OF_WEEK));//6,  2008 08 08 是星期六
	}
}

(2) 获取系统当前时间

package javase.jingjie.RiQi;
/**
 * 获取系统当前时间
 * */
import java.util.Date;
import java.text.SimpleDateFormat;
public class RiQi01 {

	public static void main(String[] args) {
		// 获取系统当前时间
		Date nowTime=new Date();
		System.out.println(nowTime);//Thu Sep 26 16:50:10 CST 2019
		
		//以上程序说明java.util.Date已经重写了Object中的toString方法
		//只不过重写的结果对于中国人讲不太容易理解,所以引入“格式化”日期
		/*java.util.Date-->String
		 * 日期格式:y 年
		 *         M 月
		 *         d 日
		 *         H 小时
		 *         m 分
		 *         s 秒
		 *         S 毫秒
		 * */
		//1.创建日期格式化对象
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日  HH:mm:ss:SSS");
		//2.开始格式化(Date-->String)
		String strTime=sdf.format(nowTime);//format方法是在SimpleDateFormat类中
		System.out.println(strTime);//2019年09月26日  16:50:10:776
		
		//获取自1970年1月1日 00时00分00秒 000毫秒 到当前的毫秒数
		long now =System.currentTimeMillis();
		System.out.println(now);//1569488057979
	}
}

(3) 获取特定日期

/**
 * 获取特定日期
 * */
import java.util.Date;
import java.text.SimpleDateFormat;
public class RiQi02 {
	public static void main(String[] args) throws Exception{
		String strTime="2008年08月08日 08:08:08 888";
		//将String日期转化成日期类型Date, String-->Date
		
		//1.创建日期格式化对象
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss:SSS");//格式不能随便,应该和上面的字符串格式相同
		//2.将字符串转换成日期类型用parse方法,
		//将日期转换成字符串用format方法
		Date t=sdf.parse(strTime);
		System.out.println(t);//2008年08月08日 08:08:08 888
	}
}

(4) 获取系统当前时间

package javase.jingjie.RiQi;
/**
 * Date d=new Date();获取系统当前时间.
 * Date d=new Date(long millis);
 * */
import java.util.Date;
import java.text.SimpleDateFormat;
public class RiQi03 {
	public static void main(String[] args) {
		// 1000是自1970-1-1 00:00:00 000的毫秒数
		Date t1=new Date(1000);
		
		//Date-->String
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy,MM,dd HH:mm:ss:sss");
		
		//北京东八区
		System.out.println(sdf.format(t1));//1970,01,01 08:00:01:001
		
		//获取当前系统的前10分钟的时间
		Date t2=new Date(System.currentTimeMillis()-1000*60*10);
		System.out.println(sdf.format(t2));//2019,09,28 16:49:25:025,  系统的前10分钟时间,上下对比差10分钟
		System.out.println(sdf.format(new Date()));//2019,09,28 16:59:25:025, 系统的当前时间
	}
}

5. 数字

(1)数字格式化

package javase.jingjie.ShuZi;
/**
 * 关于数字格式化:java.text.DecimalFormat;
 * 
 * 数字格式元素:
 * # 任意数字
 * , 千分位
 * . 小数点
 * 0 不够补0
 * */
import java.text.DecimalFormat;
public class ShuZi01 {
	public static void main(String[] args) {
		// 1.创建数字格式化对象
		//需求:加入千分位
		DecimalFormat df= new DecimalFormat("###,###");		
		//开始格式化,  Number-->String
		System.out.println(df.format(1234567));//1,234,567		
		//需求:加入千分位,保留2位小数
		DecimalFormat df1=new DecimalFormat("###,###.##");		System.out.println(df1.format(1234567.1234));//1,234,567.12		
		//需求:加入千分位,保留4位小数,不够补0
		DecimalFormat df2=new DecimalFormat("###,###.0000");		System.out.println(df2.format(1234567.1234));//1,234,567.1234	
	}
}

(2) 大数据:BigDecimal

package javase.jingjie.ShuZi;
import java.math.BigDecimal;
/**
 * java.math.BigDecimal;
 * 该类型的数据精确度极高
 * */
public class ShuZi02 {
	public static void main(String[] args) {
		// 创建大数据
		BigDecimal v1=new BigDecimal(12);
		BigDecimal v2=new BigDecimal(34.5);

		//做加法运算, v1+v2,记住两个引用类型不能做加法运算
		BigDecimal v3=v1.add(v2);
		System.out.println(v3);//46.5
	}
}

6. 栈

package javase.jingjie.;
/**
 * 结果:User[name=刘德华,age=23]
User[name=胡歌,age=22]
User[name=成龙,age=21]
User[name=JACK,age=20]

 * */
public class Test {
	public static void main(String[] args) {
		Stack s=new Stack();
		
		User u1=new User("JACK",20);
		User u2=new User("成龙",21);
		User u3=new User("胡歌",22);
		User u4=new User("刘德华",23);
		User u5=new User("古天乐",24);
		
		try {//压栈
			s.push(u1);
			s.push(u2);
			s.push(u3);
			s.push(u4);
			//s.push(u5);
		}catch(StackOperationException e) {
			e.printStackTrace();
		}
		
		try {
			//弹
			System.out.println(s.pop());
			System.out.println(s.pop());
			System.out.println(s.pop());
			System.out.println(s.pop());
			//System.out.println(s.pop());
		}catch(StackOperationException e) {
			e.printStackTrace();
		}
	}
}

class User{
	String name;
	int age;
	User(String name,int age){
		this.name=name;
		this.age=age;
	}
	public String toString() {
		return "User[name="+name+",age="+age+"]";
	}
}
package javase.jingjie.;
//先进后出
public class Stack {
	//使用数组存储数据,栈可以存储多个引用类型的元素
	Object[] elements;
	//指向栈顶元素上方的一个帧
	int index;
	//栈默认的初始化容量是5
	//Constructor
	Stack(){
		this(5);
	}
	Stack(int max){
		elements=new Object[max];
	}
	//栈应该对外提供一个压栈的方法
	public void push (Object element)throws StackOperationException{
		/*elements[index]=element;
		index++;*/
		if(index==elements.length) {
			//异常
			throw new StackOperationException("栈已满");
		}
		elements[index++]=element;
	}
	//栈应该对外提供一个弹栈的方法
	public Object pop() throws StackOperationException{
		/*index--;
		return elements[index];*/
		if(index==0) {
			throw new StackOperationException("栈已空"); 
		}
		return elements[--index];
	}
}
package javase.jingjie.;
public class StackOperationException extends Exception{
	public StackOperationException() {}
	public StackOperationException(String msg) {
		super(msg);
	}
}

7. 键盘输入

package javase.jingjie.键盘键入;
//如何接收用户的键盘输入
import java.util.Scanner;
public class shuru {
	public static void main(String[] args) {
		Scanner s=new Scanner(System.in);
		//程序执行到此处,停下来,等待用户输入
		String userInput =s.next();
		System.out.println("您输入了:"+userInput);
	}
}
发布了71 篇原创文章 · 获赞 10 · 访问量 3415

猜你喜欢

转载自blog.csdn.net/JH39456194/article/details/104077773