PTA前三次作业总结
PTA前三次作业总结
一.1.2题: 电话键盘字母数字转换
用到的知识有:String类的方法
String s = input.nextLine();//声明一个String的对象s,达到字符串的输入
char ch = s.charAt(i);//获取指定位置(i)处的字符
其他的String类的获取功能
① public int length(): 获取字符串的长度。
public char charAt(int index): 获取指定索引位置的字符
public int indexOf(int ch): 返回指定字符在此字符串中第一次出现处的索引。
public int indexOf(String str): 返回指定字符串在此字符串中第一次出现处的索引。
public int indexOf(int ch,int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引。
public int indexOf(String str,int fromIndex): 返回指定字符串在此字符串中从指定位置后第一次出现处的索引。
public String substring(int start): 从指定位置开始截取字符串,默认到末尾。
public String substring(int start,int end): 从指定位置开始到指定位置结束截取字符串
②常见String类的判断功能
public boolean equals(Object obj): 比较字符串的内容是否相同,区分大小写
public boolean equalsIgnoreCase(String str): 比较字符串的内容是否相同,忽略大小写
public boolean contains(String str): 判断字符串中是否包含传递进来的字符串
public boolean startsWith(String str): 判断字符串是否以传递进来的字符串开头
public boolean endsWith(String str): 判断字符串是否以传递进来的字符串结尾
public boolean isEmpty(): 判断字符串的内容是否为空串""。
③常见String类的转换功能
public byte[] getBytes(): 把字符串转换为字节数组。
public char[] toCharArray(): 把字符串转换为字符数组。
public static String valueOf(char[] chs): 把字符数组转成字符串。
public static String valueOf(int i): 把int类型的数据转成字符串。(String类的valueOf方法可以把任意类型的数据转成字符串。)
public String toLowerCase(): 把字符串转成小写。
public String toUpperCase(): 把字符串转成大写。
public String concat(String str): 把字符串拼接。
2.1题:
原理:
1.二转十的算法:
for(int j = 0;j<8;j++)
{
b[i]+=Math.pow(2, j)*(c[i]%10);// 二转十,c[i]%10取个位数,c/10把c往前缩小,达成转换原理
c[i] /= 10;
}
2.用if(a.charAt(i)!=0&&a.charAt(i)!=1)结构判断字符串中是否有除了0或1以外的数字;
3.用c[i] = Integer.parseInt(a.substring((i+1)*8-8, (i+1)*8))将字符串转变成数字
2.3题 判断闰年及星期几
- public static boolean isLeapYear(int year) {
boolean isLeapYear = (year % 4 == 0 && year % 100 !=0 )||year % 400 == 0;
return isLeapYear;
}
返回的是boolean变量,boolean只有两个结果true或者false,如果(year % 4 == 0 && year % 100 !=0 )||year % 400 == 0成立则返回true否则返回false;
- 先判断闰年然后确定天数
- 再判断天数是该月的多少天
- 利用除余的方法确定是星期几
if((year % 4 == 0 && year % 100 !=0 )||year % 400 == 0)
aa[2]=29;
for(i = 1;i<month;i++){
days+=aa[i];}
days+=day;
return days;
}
public static String getWhatDay(int days) {
if(days%7==0) {
return "Sunday";
}
else if(days%7==1) {
return "Monday";
}
else if(days%7==2) {
return "Tuesday";
}
else if(days%7==3) {
return "Wednesday";
}else if(days%7==4) {
return "Thursday";
}
else if(days%7==5) {
return "Friday";
}
else
return "Saturday";
}
2.5求前N天
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i=0,a=0,b=0,c=0,n=0,f=0,g=0;
Scanner input = new Scanner(System.in);
a=input.nextInt();
if(!(a>=1820&&a<=2020))
{
System.out.println("Wrong Format");
}
else
{
b=input.nextInt();
if(!(b>=1&&b<=12))
{
System.out.println("Wrong Format");
}
else
{
c=input.nextInt();
switch(b)
{
case 12:
case 10:
case 8:
case 7:
case 5:
case 3:
case 1:
if(!(c>=1&&c<=31))
g=1;
break;
case 11:
case 9:
case 6:
case 4:
if(!(c>=1&&c<=30))
g=1;
break;
case 2:
if((a%4==0&&a%100!=0)||a%400==0)
{
if(!(c>=1&&c<=29))
g=1;
}
else
{
if(!(c>=1&&c<=28))
g=1;
}
break;
}
if(g==1)
{
System.out.println("Wrong Format");
}
else
{
n=input.nextInt();
if(!(n>=-10&&n<=10))
{
System.out.println("Wrong Format");
}
else
{
if(n>0)
{
if(n<c)
{
System.out.println(n+" days ago is:"+a+"-"+b+"-"+(c-n));
}
else if(n==c)
{
if((a%4==0&&a%100!=0)||a%400==0)
f=1;
switch(b)
{
case 1:
System.out.println(n+" days ago is:"+(a-1)+"-"+12+"-"+31);
break;
case 11:
case 9:
case 8:
case 6:
case 4:
case 2:
System.out.println(n+" days ago is:"+a+"-"+(b-1)+"-"+31);
break;
case 3:
if(f==1)
System.out.println(n+" days ago is:"+a+"-"+(b-1)+"-"+29);
else
System.out.println(n+" days ago is:"+a+"-"+(b-1)+"-"+28);
break;
case 12:
case 10:
case 7:
case 5:
System.out.println(n+" days ago is:"+a+"-"+(b-1)+"-"+30);
break;
}
}
else
{
if((a%4==0&&a%100!=0)||a%400==0)
f=1;
switch(b)
{
case 1:
System.out.println(n+" days ago is:"+(a-1)+"-"+12+"-"+(31-n+c));
break;
case 11:
case 9:
case 8:
case 6:
case 4:
case 2:
System.out.println(n+" days ago is:"+a+"-"+(b-1)+"-"+(31-n+c));
break;
case 3:
if(f==1)
System.out.println(n+" days ago is:"+a+"-"+(b-1)+"-"+(29-n+c));
else
System.out.println(n+" days ago is:"+a+"-"+(b-1)+"-"+(28-n+c));
break;
case 12:
case 10:
case 7:
case 5:
System.out.println(n+" days ago is:"+a+"-"+(b-1)+"-"+(30-n+c));
break;
}
}
}
else if(n==0)
{
System.out.println(n+" days ago is:"+a+"-"+b+"-"+(c-n));
}
else
{
if(c-n<=31)
{
if((a%4==0&&a%100!=0)||a%400==0)
f=1;
switch(b)
{
case 12:
case 10:
case 8:
case 7:
case 5:
case 3:
case 1:
System.out.println(n+" days ago is:"+a+"-"+b+"-"+(c-n));
break;
case 2:
if(f==1)
{
if(c-n<=29)
{
System.out.println(n+" days ago is:"+a+"-"+b+"-"+(c-n));
}
else
{
System.out.println(n+" days ago is:"+a+"-"+(b+1)+"-"+(c-n-29));
}
}
else
{
if(c-n<=28)
{
System.out.println(n+" days ago is:"+a+"-"+b+"-"+(c-n));
}
else
{
System.out.println(n+" days ago is:"+a+"-"+(b+1)+"-"+(c-n-28));
}
}
break;
case 11:
case 9:
case 6:
case 4:
if(c-n<=30)
{
System.out.println(n+" days ago is:"+a+"-"+b+"-"+(c-n));
}
else
{
System.out.println(n+" days ago is:"+a+"-"+(b+1)+"-"+(c-n-30));
}
break;
}
}
else
{
if((a%4==0&&a%100!=0)||a%400==0)
f=1;
switch(b)
{
case 10:
case 8:
case 7:
case 5:
case 3:
case 1:
System.out.println(n+" days ago is:"+a+"-"+(b+1)+"-"+(c-n-31));
break;
case 2:
if(f==1)
{
System.out.println(n+" days ago is:"+a+"-"+(b+1)+"-"+(c-n-29));
}
else
{
System.out.println(n+" days ago is:"+a+"-"+(b+1)+"-"+(c-n-28));
}
break;
case 11:
case 9:
case 6:
case 4:
System.out.println(n+" days ago is:"+a+"-"+(b+1)+"-"+(c-n-30));
break;
case 12:
System.out.println(n+" days ago is:"+(a+1)+"-"+1+"-"+(c-n-31));
break;
}
}
}
}
}
}
}
}
}
3.1题创建账户类Account
- 使用类来包装程序,先创建类成员,并设置成员的属性,再创建方法,无参方法public+类名(),有参函数(对应的参数)对有参的函数进行赋值.用this方法.接下来定义所需要的方法,让创建的对象去引用它,此题需要有初始账号,初始余额,返回月利息,返回月利率,从账户提取特定数额,向账户存储特定数额,获取当前日期.最后在主函数内创立一个新的对象,根据题意来引用方法,从而完成题目
- 不太了解的知识点:①对输出的数字保留特定的数字,调用Java包的import java.text.DecimalFormat类的函数,DecimalFormat df = new DecimalFormat("#0.00");
System.out.println("The Account'balance:" + df.format(balance));#后面的0.00表示保留几位小数②public void getDateCreated(){//获取当前日期
//LocalDate dateCreated = LocalDate.now();
LocalDate dateCreated = LocalDate.of(2020, 7, 31);
System.out.println("The Account'dateCreated:"+dateCreated);
}
getYear()int 、 该日期的年份
getMonth()Month、 该日期月份的对象
getMonthValue()int 、 该日期的月份
查询、直接修改年份日期等–
getDayOfWeek().getValue()int 、 该日期是当前周的第几天
getDayOfMonth()int 、 该日期是当前月的第几天
getDayOfYear()int 、 该日期是当前年的第几天
更多知识前往https://blog.csdn.net/weixin_42040802/article/details/84585758学习
3.2题定义日期类
定义一个类Date,包含三个私有属性年(year)、月(month)、日(day),均为整型数,其中:年份的合法取值范围为[1900,2000] ,月份合法取值范围为[1,12] ,日期合法取值范围为[1,31]
- 做题中遇见的问题:
int[] mon_maxnum = new int[13];
char mon_maxnum = {0,31,28,31,30,31,30,31,31,30,31,30,31}这样编译不通过
int mon_maxnum[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};*///这样可以
int mon_maxnum[]=new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};//这样也可以
创建一个Date的类,声明类成员并设置私有属性,设置一个无参函数构造方法和有参函数构造方法,并用getter及setter方法对年份,月份,日进行设置和输出
具体方法
1.public boolean isLeapYear(int year){
return(year%4==0&&year%100!=0||year%400==0);//此处括号时一个判断句返回true或false
}
2.boolean checkInputValidilty(){//判断输入合法性
/*int[] monmaxnum = new int[12];
monmaxnum[12] ={0,31,28,31,30,31,30,31,31,30,31,30,31};*/
if(month==2) //先判断特殊情况2月的时候,当月份为2的时候且是闰年的时候,将数组中最大的天数加1
{
if(isLeapYear(year))
{
mon_maxnum[2]+=1;
}
/* else
{
day=mon_maxnum[2];
}*/
}
if(month>12||month<1||day>mon_maxnum[month]||day<1||year<0)//判断输入的天分是否大于该月天数的最大天,如果大于则返回false,如果小于则返回true.
{
return false;
}
else
{
return true;
}
}
- 求下一天的函数
void getNextDate(){
if(month==2)
{
if(isLeapYear(year))
{
if(day==29)
{
month=3;
day=1;
}
else{
day+=1;
}
}
else
{
if(day==28)
{
month+=1;
day=1;
}
else
{
day +=1;
}
}
/*{
month+=1;
day=1;
}
else
{
day +=1;
}*/
}
else if(month==1||month==3||month==5||month==7||month==8||month==10)//我写if的时候,月份为2时,会执行到此语句,不知道为什么.....哦哦哦我知道了 当日期为尾时,月份++,此时月份就满足下一个if的条件了,卧槽大意了大意了
{
if(day==31)
{
month+=1;
day=1;
}
else
{
day +=1;
}
}
else if(month==4||month==6||month==9||month==11)
{
if(day==30)
{
month+=1;
day=1;
}
else
{
day +=1;
}
}
else if(month==12)
{
if(day==31)
{
year++;
month =1;
day=1;
}
else
{
day+=1;
}
}
}
当时这个函数没有用else if 全用的if,以至于有时候天数会加2天,还是不够严谨,原因在于第一次if的判断符合条件后,month自动加一,这时候便符合第二个if的条件了,就多运行了下一次if的方法,让day多加了一天
当时还出现了静态方法不能调用动态方法的提升:于是我就创建了两个类,把主函数要调用的那个类放在下面,就可以了
浙公网安备 33010602011771号