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/10c往前缩小,达成转换原理

c[i] /= 10;

}

2.if(a.charAt(i)!=0&&a.charAt(i)!=1)结构判断字符串中是否有除了01以外的数字;

3.c[i] = Integer.parseInt(a.substring((i+1)*8-8, (i+1)*8))将字符串转变成数字

2.3判断闰年及星期几

  1. 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;

  1. 先判断闰年然后确定天数
  2. 再判断天数是该月的多少天
  3. 利用除余的方法确定是星期几

         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

  1. 使用类来包装程序,先创建类成员,并设置成员的属性,再创建方法,无参方法public+类名(),有参函数(对应的参数)对有参的函数进行赋值.this方法.接下来定义所需要的方法,让创建的对象去引用它,此题需要有初始账号,初始余额,返回月利息,返回月利率,从账户提取特定数额,向账户存储特定数额,获取当前日期.最后在主函数内创立一个新的对象,根据题意来引用方法,从而完成题目
  2. 不太了解的知识点:①对输出的数字保留特定的数字,调用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]

  1. 做题中遇见的问题:

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;

}

}

  1. 求下一天的函数

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多加了一天

当时还出现了静态方法不能调用动态方法的提升:于是我就创建了两个类,把主函数要调用的那个类放在下面,就可以了

posted @ 2021-04-04 23:33  C调战神  阅读(114)  评论(0)    收藏  举报