UVA300 JAVA版 Maya Calendar

自我标记:静态函数的编辑和使用
辣鸡小玲的题解

UVA300 JAVA版

Maya Calendar

不算太水的水题,因为要处理很多细节

这题,小玲第一次写了函数,一写就写了俩
还是算法没处理好的问题,导致第一次WA了,看了室友的代码才改过来。

import java.util.*;

public class Main {
	// 第一个函数,取得Haab年历的日期是世界上第几天
	public static int GetDaycounterOfHaab(int day, String month, int year) {
		int counter = 0;
		counter = year * 365 + day;
		// 处理月份问题噢
		String MonName[] = { "pop", "no", "zip", "zotz", "tzec", "xul", "yoxkin", 
		"mol", "chen", "yax", "zac", "ceh","mac", "kankin", "muan", "pax", "koyab",
		 "cumhu", "uayet" };
		int i = 0;
		for (i = 0; i < 19; i++)// 确定是第几个月
		{
			if (MonName[i].equals(month))
				break;
		}
		counter += i * 20;// 标号为0-18刚好代表过去了0-18个月,第19个月过不去
		return counter;
	}
	// 第二个函数,把世界上的第n天,转换成Tzolkin年历的表示方式,用String返回
	public static String GetCalendarOfTzolkin(int n) {
		int day = 0;
		String dayWord = null;
		int year = 0;
		year = n / 260;
		n = n % 260;
		day = n % 13+1;//Haab的天数是从0开始算的,但是Tzolkin是从1开始算的
		String DayName[] = { "imix", "ik", "akbal", "kan", "chicchan", "cimi", "manik",
		 "lamat", "muluk", "ok", "chuen","eb", "ben", "ix", "mem", "cib", "caban",
		  "eznab", "canac", "ahau" };
		n = n % 20;//n只会出现0-19的数字,正好对应了DayName的下标
		dayWord = DayName[n];
		String s_day = String.valueOf(day);
		String s_year = String.valueOf(year);
		String str;// 储存返回值噢
		str = s_day + ' ' + dayWord + ' ' + s_year;
		return str;
	}
	public static void main(String args[]) {
		// 小玲要写他的第一个JAVA函数了
		//函数写好了,现在是调用阶段
		//拆分读入
		int t;//t组测试数据
		int day;
		String s_day;
		String month;
		int year;
		String point;
		Scanner reader = new Scanner(System.in);
		t=reader.nextInt();
		System.out.println(t);
		while(t>0) {//MARKⅠ
			s_day=reader.next();//带.的day后续要进行分离
			int i=0;
			day=0;
			for(i=0;i<s_day.length()-1;i++) {
				day=day*10+s_day.charAt(i)-'0';
			}
			month=reader.next();
			year=reader.nextInt();
			int n;
			n=GetDaycounterOfHaab(day,month,year);
			String s;
			s=GetCalendarOfTzolkin(n);
			System.out.println(s);
			t--;
		}
	}
}

MARKⅠ

JAVA是不能while(n- -)的
因为while()的括号里要返回一个布尔类型的数,所以要改成while(n>0),然后把n–放在循环里。

MARKⅠ ending
MARK Ⅱ 对于题目的摘录

再附一个,我读题的时候的小摘吧,对题目进行了提炼翻译,因为这题有点繁琐。

Haab历法, 有19个月,365天
前18个月有20天,月份名字:
pop, no, zip, zotz, tzec, xul, yoxkin, mol, chen, yax, zac, ceh, mac, kankin, muan, pax,
koyab, cumhu
天数是从0到19
最后一个月:
名叫 uayet 有5天,从0数到4

Tzolkin历法,13个时期,每个时期20天长,也就是260天
这20天的名字由13个数字和20个单词组成:
1-13
imix, ik, akbal, kan, chicchan,
cimi, manik, lamat, muluk, ok, chuen, eb, ben, ix, mem, cib, caban, eznab, canac, ahau
例如:
1 imix, 2 ik, 3 akbal, 4 kan, 5 chicchan, 6 cimi, 7 manik, 8 lamat, 9 muluk, 10 ok, 11 chuen,
12 eb,13 ben, 1 ix, 2 mem, 3 cib, 4 caban, 5 eznab, 6 canac, 7 ahau,
and again in the next period 8 imix, 9 ik, 10 akbal…

世界的第一天:
Haab: 0. pop 0
Tzolkin: 1 imix 0

代码目标:转换Haab年历到Tzolkin年历

输入:Haab年历的 NumberOfTheDay. Month Year
输出:Tzolkin年历的 Number NameOfTheDay Year

MARKⅡ ending
MARKⅢ 关于静态函数和非静态函数的区别

静态方法和实例方法的区别主要体现在两个方面:
在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。
静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。

这题两个函数在最初的时候,我是把他们放在大Main的前面的,另建立了一个Function对象,但是在调用的时候,返回值出了点问题,具体是啥我也不太懂,查了查百度,Java的函数长这样,我就这样搞了,至于静态不静态当时也没想太多,现在看了这段话也只是懂一点点,嗐,慢慢成长吧。

MARK Ⅲ ending
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值