1. 程式人生 > 其它 >java三次題目集總結

java三次題目集總結

一、前言

本學期開始Java程式設計學習,本人也是首次接觸Java語言。由於之前只學過C語言和組合語言,而Java與這兩者差別較大,以致學習和程式設計過程中遇到許多困難。第一次題目集相對比較簡單,而第二次第三次則難度較大,在同學幫助和網上學習之後才勉強完成。第一次題目量較大,較為簡單;後兩次題目量雖然減少,但是難度偏大,花費的時間也多。

第一次題目主要學習了Java的基本程式設計方法。第二次主要學習了java類中的方法的使用,以及自己程式設計構造方法解決問題。第三次主要學習了類的構造使用,以及方法的使用。

二、分析

題目集一:

7-8:在一行中輸入三角形的三條邊的值(實型數),可以用一個或多個空格或回車分隔,其中三條邊的取值範圍均為[1,200]。

程式碼:

import java.util.Arrays;
import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner in=new Scanner(System.in);
double a[] = new double[3];
int i;
for(i = 0; i < 3; i++){
a[i] = in.nextDouble();
}
for(i = 0; i < 3; i++){
if(a[i] < 1 || a[i] > 200){
System.out.println("Wrong Format");
return;
}
}
Arrays.sort(a);
if(a[0] + a[1] > a[2]){
if(a[0] == a[1] && a[1] == a[2]){
System.out.println("Equilateral triangle");
}
else if(a[0] == a[1] && a[0] * a[0] + a[1] * a[1] - a[2] * a[2] < 0.000001)
System.out.println("Isosceles right-angled triangle");
else if(a[2] == a[1] || a[2] == a[0] || a[0] == a[1])
System.out.println("Isosceles triangle");
else if(a[0] * a[0] + a[1] * a[1] - a[2] * a[2] < 0.0000010)
System.out.println("Right-angled triangle");
else{
System.out.println("General triangle");
}

}
else
System.out.println("Not a triangle");
}

}

題目集二:

7-4:輸入年月日的值(均為整型數),輸出該日期的下一天。 其中:年份的合法取值範圍為[1820,2020] ,月份合法取值範圍為[1,12] ,日期合法取值範圍為[1,31]

程式碼:

import java.util.Scanner;

public class Main {

public static boolean isLeapYear(int year) {//判斷是否閏年
boolean isLeapYear = (year % 4 == 0 && year % 100 !=0 )||year % 400 == 0;
return isLeapYear;
}

public static boolean checkInputValidity(int year,int month,int day) {
int[] aa=new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
if(isLeapYear(year))
aa[2] = 29;
boolean checkInputValidity = (year>=1820&&year<=2020&&month>0&&month<=12&&day<=aa[month]&&day>0);
return checkInputValidity;
}

public static void nextDate(int year,int month,int day) {
//求下一天注意誇年月以及特殊月份以及閏年和平年的二月不同天數
int[] aa=new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
if(isLeapYear(year))
aa[2] = 29;
int a = 0,b = 0,c = 0;
if(checkInputValidity(year,month,day)) {
if(month==12) {
if(day==aa[month]) {
a = year+1;
b = 1;
c = 1;}
if(day>0&&day<aa[month])
{a = year;
b = month;
c =day +1;
}
}
if(month<12) {
if(day==aa[month]) {
a = year;
b = month + 1;
c = 1;}
if(day>0&&day<aa[month])
{a = year;
b = month;
c = day+1;
}
}
System.out.println("Next date is:"+a+"-"+b+"-"+c);
}
else System.out.println("Wrong Format");
}

public static void main(String[] args) {
Scanner LJY = new Scanner(System.in);
Main ljy = new Main();
int year = LJY.nextInt();
int month = LJY.nextInt();
int day = LJY.nextInt();
ljy.nextDate(year,month,day);

}

}

7-5:輸入年月日的值(均為整型數),同時輸入一個取值範圍在[-10,10] 之間的整型數n,輸出該日期的前n天(當n > 0時)、該日期的後n天(當n<0時)。
其中年份取值範圍為 [1820,2020] ,月份取值範圍為[1,12] ,日期取值範圍為[1,31] 。

程式碼:

import java.util.Scanner;

public class Main {

public static boolean isLeapYear(int year) {//判斷是否閏年
boolean isLeapYear = (year % 4 == 0 && year % 100 !=0 )||year % 400 == 0;
return isLeapYear;
}

public static boolean checkInputValidity(int year,int month,int day) {
int[] aa=new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
if(isLeapYear(year))
aa[2] = 29;
boolean checkInputValidity = (year>=1820&&year<=2020&&month>0&&month<=12&&day<=aa[month]&&day>0);
return checkInputValidity;
}

public static void nextDate(int year,int month,int day) {
//求下一天注意誇年月以及特殊月份以及閏年和平年的二月不同天數
int[] aa=new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
if(isLeapYear(year))
aa[2] = 29;
int a = 0,b = 0,c = 0;
if(checkInputValidity(year,month,day)) {
if(month==12) {
if(day==aa[month]) {
a = year+1;
b = 1;
c = 1;}
if(day>0&&day<aa[month])
{a = year;
b = month;
c =day +1;
}
}
if(month<12) {
if(day==aa[month]) {
a = year;
b = month + 1;
c = 1;}
if(day>0&&day<aa[month])
{a = year;
b = month;
c = day+1;
}
}
System.out.println("Next date is:"+a+"-"+b+"-"+c);
}
else System.out.println("Wrong Format");
}

public static void main(String[] args) {
Scanner LJY = new Scanner(System.in);
Main ljy = new Main();
int year = LJY.nextInt();
int month = LJY.nextInt();
int day = LJY.nextInt();
ljy.nextDate(year,month,day);

}

}

題目集三:主要學習自己構造類,以及對類的運用。還有對正則表示式的學習,及其類中包含的一些方法,其中7-2相對簡單一點,7-3難度太大,最終未能完成。

7-2:定義一個類Date,包含三個私有屬性年(year)、月(month)、日(day),均為整型數,其中:年份的合法取值範圍為[1900,2000] ,月份合法取值範圍為[1,12] ,日期合法取值範圍為[1,31] 。

程式碼:

import java.util.*;
import java.text.DecimalFormat;
public class Main {

public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int year = input.nextInt();
int month =input.nextInt();
int day =input.nextInt();
Account account = new Account(year,month,day);

if(account.checkinoutValidity())
{
DecimalFormat df = new DecimalFormat("0");

account.getNextDate();
System.out.println("Next day is:"+account.getYear()+"-"+account.getMonth()+"-"+df.format(account.getDay()));
// System.out.println(account.getYear());
// System.out.println(account.getMonth());
// System.out.println(df.format(account.getDay()));

}
}

}
class Account {

private int year = 0;
private int month = 0 ;
private int day = 0;
private int panduan = 0;
public boolean checkinoutValidity() {
if(month>0&&month<=12){

if(isLeapYear(year))
{
if(day<=month1[month]&&day>0)
panduan=1;
}
else
{
if(day<=month2[month]&&day>0)
panduan=1;

}
}


if(year<1900||year>2000||month<1||month>12||day<1||day>31||panduan==0) {
System.out.println("Date Format is Wrong");
return false;
}
return true;

}
public static boolean isLeapYear(int year){
if((year%4==0&&year%100!=0)||year%400==0) {
return true;
}
else
return false;
}
int[] month2=new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
int[] month1=new int[]{0,31,29,31,30,31,30,31,31,30,31,30,31};

public Account(int a ,int b,int c) {
this.year = a;
this.month = b;
this.day = c;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public double getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
public void getNextDate() {
if(isLeapYear(this.year)==true ) {
this.day+=1;
if(day>month1[month]) {
this.day=this.day-month1[month];
this.month+=1;
if(this.month>12) {
this.month -=12;
this.year+=1;
}
}
}
else {
this.day+=1;
if(day>month2[month]) {
this.day=this.day-month2[month];
this.month+=1;
if(this.month>12) {
this.month -=12;
this.year+=1;
}
}

}
}

三、心得

三次題目集進行得並不順利,遇到得困難非常多。首先是對java語法不夠熟悉,對類和方法掌握的不夠,自己程式設計時候的邏輯思維也有問題。

四、總結

在解決題目集問題的過程中暴露出許多自己java學習中存在的不足,每次題目集的完成都比較艱難,對知識掌握得不夠熟練,程式設計思維也有點落後,以後要儘可能克服這些缺點,以取得更大的進步。