ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java实验1:基本的Java语法和面向对象入门:一道实现简单类,一道线性筛法,一道实现万年历的查日历和查星期几(西电实验)

2021-06-08 19:56:33  阅读:169  来源: 互联网

标签:dm Java int System 一道 实验 dy println out


第一题:实现圆形类和矩形类

我的解决方案:

import java.math.*;

class Rectangle{
private
		int w, h;
		static int AllCnt;
		static int AllArea;
public
	Rectangle(int w_, int h_) {
		w = w_;
		h = h_;
		AllCnt++;
		AllArea += w * h;
	}
	static void Show() {
		System.out.println("AllCnt = " + AllCnt + "  " + "  AllArea = " + AllArea);
	}
	int CirRec() {
		return 2 * (w + h);
	}
	int AreRec() {
		return w * h;
	}
}


class Circle{
final double pi = Math.acos(-1);
private
	double r;
protected
	Circle(double rr) {
		r = rr;
	}

	double GetCir() {
		return 2.0 * pi * r;
	}
	
	double GetAre() {
		return pi * r * r;
	}
	
public
	void Show() {
		System.out.println("Circle = " + GetCir() + "  Area = " + GetAre());
	}
}

public class Main6 {
	public static void main(String[] args) {
		System.out.println("下面测试矩形类:");
		Rectangle.AllArea = 0;
		Rectangle.AllCnt = 0;
		Rectangle r1 = new Rectangle(1, 2);
		Rectangle.Show();
		System.out.println("r1 : Cir = " + r1.CirRec() + "  Area = " + r1.AreRec());
		Rectangle r2 = new Rectangle(3, 4);
		Rectangle.Show();
		System.out.println("r2 : Cir = " + r2.CirRec() + "  Area = " + r2.AreRec());
		System.out.println("下面测试圆形类:");
		Circle c1 = new Circle(2.0);
		c1.Show();
		Circle c2 = new Circle(3.0);
		c2.Show();
	}
}
第二题:1 到 100的素数之和

我的解决方案:线性筛法

import java.util.Arrays;

public class Main1 {
	static int primeS() {
		int cnt = 0, ans = 0;
		boolean[] vis = new boolean[105];
		int[] isPrime = new int[105];
		Arrays.fill(isPrime, 0);
		Arrays.fill(vis, true);
		for(int i = 2;i <= 100;++i) {
			if(vis[i]) {
				isPrime[cnt++] = i;
				ans += i;
			}
			for(int j = 0;j < cnt && i * isPrime[j] <= 100;++j) {
				vis[i * isPrime[j]] = false;
				if(0 == i % isPrime[j])
					break;
			}
		}
		return ans;
	}
	public static void main(String[] args) {
		int ans = primeS();
		System.out.println(ans);
	}
}
第三题:

编写一个程序,程序提供两种功能:

  1. 根据用户输入的年份输出该年日历。
  2. 根据用户输入的日期,输出该天星期。
    程序应具有良好的人机交互性能,即:程序应向用户提示功能说明,并可根据用户的功能选择,执行对应的功能,并给出带详细描述信息的最终执行结果。

介绍一种已知日期求星期的方法:

Weekday = (dd + 2 * dm + 3 * (dm + 1) / 5 + dy + dy / 4 - dy / 100 + dy / 400) % 7 + 1

dy = 年份
dm = 月份
dd = 天

这里需要注意的是:
如果月份小于3!需要借一年,给月份加上12!(重点!)
(这套计算方法我没看懂月份的计算,天和年的好理解!希望有懂得的伙伴们能够评论或者私信指点我一下!小弟感激不尽!!!)
当然如果不用这个公式,依赖循环也可写出答案。

我的解决方案:(这题我写了四十多分钟……有点难)

import java.util.Scanner;
public class Main2 {
	static boolean checkLeap(int Ly) {
		if((0 == Ly % 4 && 0 != Ly % 100) || 0 == Ly % 400)
			return true;
		else
			return false;
	}
	
	public static int GetWeek(int dy, int dm, int dd) {
		return (dd + 2 * dm + 3 * (dm + 1) / 5 + dy + dy / 4 - dy / 100 + dy / 400) % 7 + 1;
	}
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请选择万年历的功能:1-> 查询日历?    2->查询某日期是星期几?");
		int cmd = sc.nextInt();
		if(1 == cmd) {
			System.out.println("请输入您要查询日历的年份:");
			int Year = sc.nextInt();
			int day = GetWeek(Year - 1, 13, 1);
			for(int i = 1;i <= 12;++i) {
				int TempDay = 0, cnt = 1;
				switch(i) {
				case 1:
				case 3:
				case 5:
				case 7:
				case 8:
				case 10:
				case 12:
					TempDay = 31;
					break;
				case 2:
					if(checkLeap(Year))
						TempDay = 29;
					else
						TempDay = 28;
					break;
				default:
					TempDay = 30;	
				}
				System.out.println("万年历:======第 " + i + " 月份:==========");
				System.out.println("日\t一\t二\t三\t四\t五\t六");
				boolean book = false;
				for(int j = 0;j < 6;++j) {
					for(int k = 0;k < 7;++k) {
						if(0 == j && k < day) {
							System.out.print("\t");
							continue;
						}
						if(cnt > TempDay) {
							book = true;
							break;
						}
						System.out.print(cnt + "\t");
						cnt++;
					}
					if(book)
						break;
					System.out.println();
				}
				day = (day + TempDay) % 7;
				System.out.println();
				System.out.println();
			}
		}
		else {
			System.out.println("请按照如下格式:YYYY-MM-DD输入,如果非法输入将不受理!");
			int dy = 0, dm = 0, dd = 0, i = 0, j = 0;
			@SuppressWarnings("unused")
				String getChar = sc.nextLine();
			String DataInfo = sc.nextLine();
			while(i < DataInfo.length()) {
				if(0 == dy) {
					j = i;
					while(j < DataInfo.length() && '-' != DataInfo.charAt(j)) {
						dy = dy * 10 + (DataInfo.charAt(j) - '0');
						j++;
					}
				}
				else if(0 == dm) {
					j = i;
					while(j < DataInfo.length() && '-' != DataInfo.charAt(j)) {
						dm = dm * 10 + (DataInfo.charAt(j) - '0');
						j++;
					}
				}
				else if(0 == dd) {
					j = i;
					while(j < DataInfo.length() && '-' != DataInfo.charAt(j)) {
						dd = dd * 10 + (DataInfo.charAt(j) - '0');
						j++;
					}
				}
				i = ++j;
			}
			if(dm < 3) {
				dm += 12;
				dy--;
			}
			int AnsDay = GetWeek(dy, dm, dd);
			System.out.println("您输入的日期对应的星期是:" + AnsDay);
		}
		sc.close();
	}
}

标签:dm,Java,int,System,一道,实验,dy,println,out
来源: https://blog.51cto.com/u_15262702/2883285

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有