Api运用题
例题1: 世纪末的星期(经典日期API问题)
题目:有邪教称1999年12月31日是世界末日,当然谣言已经不攻自破。还有人称今后的某个世纪末的12月31日,如果是星期一则会…有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!!!于是"谣言制造商"又修改为星期日…
1999年12月31日是星期五,请问:未来哪一个离我们最近的一个世纪末年(即XX99年)的12月31日正好是星期天(即星期日)?
回答年份即可
知识点:这道题运用到了一个java日历类,笔记在java知识点中了
package one;
import java.util.Calendar;
public class None_1 {
public static void main1(String[] args) {
// 获取一个日历类来实现这个功能calendar
// 因为这个日历类是一个抽象类所以不能直接new,但可以通过getInstance来
// 获取一个实例
Calendar calendar=Calendar.getInstance();
// 因为末日年都是以99结尾的所以可以将当前的时间加上100
for(int i=1999;i<10000;i+=100) {
// 通过set方法,为calendar的属性设置参数
calendar.set(Calendar.YEAR, i);
calendar.set(Calendar.MONTH, 11);
calendar.set(Calendar.DATE, 31);
// 获取当前calendar的星期数
if(calendar.get(Calendar.DAY_OF_WEEK)==1){
System.out.println(i);
break;
}
}
}
}
例题2 猜字母(字符处理问题)
题目:
把abcd…s共19个字母组成的序列重复拼接106次,得到长度为2014的串。
接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字符。
得到的新串再进行删除奇数位置字母的动作。如此下去,最后只剩下一个字母,请写出该字母。
知识点:使用了StringBuffer API,着道题挺有意思的,理解自动提升索引
package one;
//思路直接一个while循环加上for循环就完事了
public class None_4 {
public static void main(String[] args) {
// 创建一个StringBuffer,方便后面的删除
StringBuffer buf=new StringBuffer();
String str="abcdefghijklmmopqrs";
// 拼接字符串
for(int i=0;i<=105;i++) {
buf.append(str);
}
// 使用while循环和for循环会buf中的字符进行删除
// 我去有大坑,即使我们再删除buf中的数据的时候,数组中的下标在往前移动
// 所以我们不需要,也不能通过判断该位置的下标是不是奇数来删除该数
// 我们想象一下我们在删除的时候数组在往前移动就行,所以每次while循环只需要去掉一半即可
// 奇数的时候需要多删除一个
while(buf.length()>1) {
int len=buf.length();
int dellen;
if(len%2==0) {
dellen=len/2;
}else {
dellen=len/2+1;
}
for(int i=0;i<dellen