Java实验五——常用实体类

知枝0711 2022-05-14 18:57:21

目的:掌握怎样使用 Scanner 类的对象从字符串中解析程序所需要的数据。

掌握 Date 类以及 Calendar 类的常用方法。

掌握 BigInteger 类的常用方法。

1、菜单的内容如下:

"北京烤鸭:189 元 西芹炒肉:12.9 元 酸菜鱼:69 元 铁板牛柳:32 "

编写一个 Java 应用程序,输出菜单中的价格数据,并计算出菜

单的总价格。

import java.util.InputMismatchException;
import java.util.Scanner;

public class Example8_13{
    public static void main(String[] args){
        String menu="北京烤鸭189元,西芹炒肉12.9元,酸菜鱼69元,铁板牛柳32元";
        Scanner scanner=new Scanner(menu);
        scanner.useDelimiter("[^0123456789.]+");
        double sum=0;
        while(scanner.hasNext()){
            try{
                double price=scanner.nextDouble();
                sum=sum+price;
                System.out.print(price+"\n");
            }
            catch(InputMismatchException exp){
                String t=scanner.next();
            }
        }
        System.out.print("菜单总价格:"+sum+"元");
    }

}

 

 

 

useDelimiter():

scanner.useDelimiter("[^0123456789.]+");

Scanner原本的分隔符是空格Tab或者是Enter,但现在是括号里面的东西。

括号里的是正则表达式,表示除了0123456789以及“.”的东西,一个或多个

hasNext():

while(hasNext())里hasNext()返回的是一个boolean值,

用法:

Scanner scanner=new Scanner(System.in);

//此句表示从控制台获取数据。

scan.hasNext();  //表示是否有输入数据。

若有,则为返回true。

try:

try是Java中的关键字,主要用于异常处理机制

try{

}用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出。

它一般与catch..finally组合使用块,用来引导第一部分的关键字,用于声明需要捕获指定语句块的异常。

catch可以出现0次、1次或多次,finally可以出现0次或1次,但是catch和finally不能同时不出现 

(这是我从博主耿健桓那看到的,截取了几段话,想要详细了解的可以点击下方链接)
原文链接:https://blog.csdn.net/weixin_32424555/article/details/114620951

inputMismatchException exp:

当您使用Scanner类从用户那里获取输入时。如果传递的输入与方法不匹配,则引发InputMisMatchException。例如,如果使用该nextInt()方法和在String中传递的值读取整数数据,则会发生异常。

所以 catch(InputMismatchException exp){
                String t=scanner.next();
            }

是在判断输入是否异常,捕获异常。

 2、编写一个 Java 应用程序,用户输入两个日期,程序将判断两个日期的大小关系,以及两

个日期之间的间隔天数。

package 实验五;
import java.util.*;
import java.time.*;
import java.time.temporal.ChronoUnit;
public class DATE {

	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		System.out.println("输入第一个年,月,日数据");
		System.out.print("输入年份:");
		int years1=scanner.nextInt();
		System.out.print("输入月份:");
		int months1=scanner.nextInt();
		System.out.print("输入日期:");
		int days1=scanner.nextInt();
		System.out.println("输入第二个年,月,日数据");
		System.out.print("输入年份:");
		int years2=scanner.nextInt();
		System.out.print("输入月份:");
		int months2=scanner.nextInt();
		System.out.print("输入日期:");
		int days2=scanner.nextInt();
		scanner.close();
		LocalDateTime dateStart=LocalDateTime.of(years1, months1,days1,0,0,0);
		LocalDateTime dateEnd=LocalDateTime.of(years2, months2,days2,0,0,0);
		Calendar calendar=new GregorianCalendar();
		calendar.set(years1,months1,days1);
		Calendar calendar2=new GregorianCalendar();
		calendar2.set(years2,months2,days2);
		if(calendar.after(calendar2)) {
			System.out.println("您输入的第二个日期小于第一个日期");
			long days=dateEnd.until(dateStart, ChronoUnit.DAYS);
			System.out.println(years1+"年"+months1+"月"+days1+"日和"+years2+"年"+months2+
					"月"+days2+"日相隔"+days+"天");
		}
		else {
			System.out.println("您输入的第一个日期小于第二个日期");
			long days=dateStart.until(dateEnd, ChronoUnit.DAYS);
			System.out.println(years1+"年"+months1+"月"+days1+"日和"+years2+"年"+months2+
					"月"+days2+"日相隔"+days+"天");
		}
			
		//System.out.println(calendar.before(calendar2));输出的是true或false
  }

}

 

这里主要用到的是日期比较的方法:Calendar类

System.out.println(calendar.before(calendar2));//输出的是true或false

计算两个日期相隔时间的方法:long days=dateEnd.until(dateStart, ChronoUnit.DAYS);

调用了ChronoUnit类,

如果想算这两个日期相差多少年,可以写:

long years=dateEnd.until(dateStart,ChronoUnit.YEARS);

//我这里之所以把dateEnd放在dateStart前面,是因为我要让它输出来的数字为正(此处dateEnd小于dateStart)

3.编写一个 Java 应用程序,计算了两个大整数的和、差、积和商,并计算出了一个大整数

的因子个数(因子中不包括 1 和大整数本身)。

我一开始是这样写的

package 实验五;
import java.math.*;
public class BigInteger_console {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		BigInteger result=new BigInteger("0"),
				one=new BigInteger("9876543210"),
				two=new BigInteger("17637");
		result=one.add(two);
		System.out.println("和:"+result);
		result=one.subtract(two);
		System.out.println("差:"+result);
		result=one.multiply(two);
		System.out.println("积:"+result);
		result=one.divide(two);
		System.out.println("商:"+result);
		System.out.println(two+"的因子有:");
		for(BigInteger i=new BigInteger("2");i.compareTo(two)<0;i=new BigInteger("i++")) {
			for(BigInteger j=new BigInteger("2");j.compareTo(two)<0;j=new BigInteger("j++")) {
				if(i.multiply(j).equals(two)) {
					System.out.println(i+"   "+j+"   ");
				}	
			}
		}
	}

}

结果是这样的

现在改成这样:

package 实验五;
import java.math.*;
public class BigInteger_console {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		BigInteger result=new BigInteger("0"),
				one=new BigInteger("9876543210"),
				two=new BigInteger("17637");
		result=one.add(two);
		System.out.println("和:"+result);
		result=one.subtract(two);
		System.out.println("差:"+result);
		result=one.multiply(two);
		System.out.println("积:"+result);
		result=one.divide(two);
		System.out.println("商:"+result);
		System.out.println(two.toString()+"的因子有:");
		BigInteger ONE=new BigInteger("1"),
				TWO=new BigInteger("2"),
				COUNT=new BigInteger("0");
		for(BigInteger i=TWO;i.compareTo(two)<0;i=i.add(ONE)) {
			for(BigInteger j=TWO;j.compareTo(two)<0;j=j.add(ONE)) {
				if(i.multiply(j).equals(two)) {
					System.out.print(i+"   ");
					COUNT=COUNT.add(ONE);
				}	
			}
		}
		System.out.println(" ");
		System.out.println(two.toString()+"一共有"+COUNT.toString()+"个因子");
	}

}

 这里我想了想,应该是,大数应该和大数放一起,例如,我要表达大数i在循环里不断加1,那么我除了要设置i是大数外,我还要将1以大数的形式设置,BigInteger ONE =new BigInteger("1"),  

i=new BigInteger("2");

i.add(ONE);//要用BigInteger类的方法来加

 

...全文
670 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

30,336

社区成员

发帖
与我相关
我的任务
社区描述
打造最热爱学习的高校社区,帮助大家提升计算机领域知识,带大家打比赛拿奖,提高自我,希望大家共同创造良好的社区氛围。
社区管理员
  • 川川菜鸟
  • 亡心灵
  • 星辰菜鸟
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

监督大家学习,每日学习打卡,以投稿形式打卡。扫码关注公众号,可加入粉丝群和领取大量资源。

试试用AI创作助手写篇文章吧