首页 > 其他分享 >1~3Blog

1~3Blog

时间:2023-03-24 13:45:00浏览次数:34  
标签:int 3Blog System else 31 public out

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”格式返回日期值

 

应用程序共测试三个功能:

  1. 求下n天
  2. 求前n天
  3. 求两个日期相差的天数

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

相关文章