up:bbbgk 1:前言,三次题目集目前还有难题不会写,写出来的程序有的会超时,会非0返回,还有的完全不会写;主要用到了字符串拼接,循环遍历,判断条件等方法; 最近阶段的练习,总体而言,越来越难;题目量虽然不是很大,每次都是两三道题目,但是难度确实比较大。有时候花几个小时做一道题目都拿不了多少分。对于各种解题技巧我并不是很 会,只是老老实实的按照最普通的方法写。我认为还可以做到一部分代码简化,去优化一下代码,提高使用效率 综上:对前三次作业进行总结分析; 2:设计分析:
pta 7-3:设计日期类:
标准javabean
2.判断是不是闰年
3.检查日期是否正确
通过对不同月的分类来求得下一天:
2月
12月
4 6 9 11月
1 3 5 7 8 10月
最后输出:
7-4设计Date-util类:
public boolean checkInputValidity();//检测输入的年、月、日是否合法
public boolean isLeapYear(int year);//判断year是否为闰年
public DateUtil getNextNDays(int n);//取得year-month-day的下n天日期
public DateUtil getPreviousNDays(int n);//取得year-month-day的前n天日期
public boolean compareDates(DateUtil date);//比较当前日期与date的大小(先后)
public boolean equalTwoDates(DateUtil date);//判断两个日期是否相等
public int getDaysofDates(DateUtil date);//求当前日期与date之间相差的天数
public String showDate();//以“year-month-day”格式返回日期值
应用程序共测试三个功能:
- 求下n天
- 求前n天
- 求两个日期相差的天数
1求下n天,可以通过对求下一天的函数循环n次实现
2求前N天,可以新增求上一天的函数,再循环n次实现;
3求日期差,可以将年月全部化成天,再相减实现;
代码:
1求下n天:
public DateUtil getNextNDays(int n) {
DateUtil A = new DateUtil();
A.setYear(year);
A.setMonth(month);
A.setDay(day);
while (n != 0) {
A.nextDay();
n--;
}
return A;
}
2求上n天:(求上一函数自己实现)
public DateUtil getPreviousNDays(int n) {
DateUtil A = new DateUtil();
A.setYear(year);
A.setMonth(month);
A.setDay(day);
while (n != 0) {
A.beforeDay();
n--;
}
return A;
}
3求日期差
public int getDaysofDates(DateUtil date) {
int arr[] ={0,31,28,31,30,31,30,31,31,30,31,30,31};
int i, s = 0;
for ( i = 1; i < this.getYear(); i++) {
s += 365;
if (isLeapYear(i)) {
s += 1;
}
}
if (isLeapYear(i) ){
arr[2] = 29;
}
for ( i = 1; i < this.getMonth(); i++) {
s += arr[i];
}
s += this.getDay();
int ls = 0;
for ( i = 1; i < date.getYear(); i++) {
ls += 365;
if (isLeapYear(i)) {
ls += 1;
}
}
if (isLeapYear(i)) {
arr[2] = 29;
}
for ( i = 1; i < date.getMonth(); i++) {
ls += arr[i];
}
ls += date.getDay();
if (ls > s) return ls - s;
else return s - ls;
}
最后输出
:
V
7-5 学号识别:
可以通过 字符-‘0’的方式将字符变为数字字符;
7-8判断三角形类型:(注意不同三角形条件)
public static void main(String[] args) {
double a, b, c;
Scanner sc = new Scanner(System.in);
a = sc.nextDouble();
b = sc.nextDouble();
c = sc.nextDouble();
if (1 <= a && a <= 200&&1 <= b && b <= 200 && 1 <= c && c <= 200) {
if (a+b>c&&a-b<c&&a+c>b&&a-c<b&&b+c>a&&a>b-c) {
if (a == b || b == c || a == c) {
if ( (a * a + b * b - c * c < 0.1) || (b * b + c * c - a * a <0.1) || (a * a + c * c - b * b <0.1))
System.out.println("Isosceles right-angled triangle");
else if (a == b && a == c)
System.out.println("Equilateral triangle");
else System.out.println("Isosceles triangle");
} else if ((a*a+b*b-c*c<0.1) || (a*a+c*c-b*b<0.1) ||(b*b+c*c-a*a<0.1)) {
System.out.println("Right-angled triangle");
} else System.out.println("General triangle");
}
else{
System.out.println("Not a triangle");
}
}
else {
System.out.println("Wrong Format");
}
}
7-5 去掉重复的字符:
通过对字符第一次索引和最后一次索引的对比,判断是不是重复
7-6统计一个字符串出现次数:
可以通过contains p判断是否包含;
如果包含,通过sub截取第一次出现索引位置+字符串的长度;
再次contains,直到没有为止
7-12 列出最简真分数序列:
本质是求最大公因数:
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
for (int i = 1; i<= a; i++)
{
boolean flag=true;
for (int j = 2; j <a/2 ; j++)
{
if(i%j==00&&a%j==0)
flag=false;
}
if(flag) System.out.print(i+"/"+a+",");
}
3:踩坑心得:
注意字符串相关方法的使用;
如contains,sub;
注意合理构造类里的成员变量,成员方法;
学会对方法进行改进:
如求下n天,可以将原有求下一天的方法循环N次;
结果:
注意不同三角形类型的判断条件,如等腰包括等边,等腰直角是直直角与等边的特殊情况;
代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
double a, b, c;
Scanner sc = new Scanner(System.in);
a = sc.nextDouble();
b = sc.nextDouble();
c = sc.nextDouble();
if (1 <= a && a <= 200&&1 <= b && b <= 200 && 1 <= c && c <= 200) {
if (a+b>c&&a-b<c&&a+c>b&&a-c<b&&b+c>a&&a>b-c) {
if (a == b || b == c || a == c) {
if ( (a * a + b * b - c * c < 0.1) || (b * b + c * c - a * a <0.1) || (a * a + c * c - b * b <0.1))
System.out.println("Isosceles right-angled triangle");
else if (a == b && a == c)
System.out.println("Equilateral triangle");
else System.out.println("Isosceles triangle");
} else if ((a*a+b*b-c*c<0.1) || (a*a+c*c-b*b<0.1) ||(b*b+c*c-a*a<0.1)) {
System.out.println("Right-angled triangle");
} else System.out.println("General triangle");
}
else{
System.out.println("Not a triangle");
}
}
else {
System.out.println("Wrong Format");
}
}
}
注意数组越界,和成员方法的调用;
注意在日期类里,对特殊日期的书写,对闰年的判断,对12月跨年的判断等。。
其实本类题完全没必要写那么多的if和else,如果想到用int[] monthDate = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },并且把能和起来的条件用“||”和“&&”表示在一个if里面会降低很多。
4改进建议:
本次代码,总是只有一个类,没有涉及到多个类,目前还不了解多个类的程序编写,这些代码类间关系较弱,没有联系。
以后的学习中,这是一个难点,也希望能改进。
对于日期类的月份分类;
可以采用数组方法;
而不是一个一个分类;
可以设置数组 int arr[]=new int{31,28(29),31,30,31,30,31,31,30,31,30,31};表示
字符拼接可以调用stringbuffer,以及相关方法;
注意标准javabean的书写:
同样还是在大块的if-else语句中进行优化和修改吧,至于其他的修改及方式,本人还在努力学习当中,我相信通过日后的学习与练习会使代码更加优化简洁的。
5总结:
学到了书写标准javabean;
学会了stringbuffer 类:
tringBuffer 类提供了 3 个构造方法来创建一个字符串,如下所示:
StringBuffer() 构造一个空的字符串缓冲区,并且初始化为 16 个字符的容量。
StringBuffer(int length) 创建一个空的字符串缓冲区,并且初始化为指定长度 length 的容量。
StringBuffer(String str) 创建一个字符串缓冲区,并将其内容初始化为指定的字符串内容 str,字符串缓冲区的初始容量为 16 加上字符串 str 的长度
arraylist类:
添加元素到 ArrayList 可以使用 add() 方法 ;
如果要删除 ArrayList 中的元素可以使用 remove() 方法;....
注意对条件的判断,如闰年的判断,对月份日期的判断
作为初学者,发现还有许多东西需要去掌握:
1.各类之间的关系,当能够了解,并运用掌握类与类之间的关系,则能解决大多数问题。
2.学会java自带的类,以及相关方法;
3.在写程序过程中,要有分类的概念,构造出框架类,进行分工;不要将所有代码写在一个类里
最后,希望自己努力学习,不断学习提高;
标签:int,3Blog,System,else,31,public,out From: https://www.cnblogs.com/bbbgk/p/17251109.html