第一篇Java,pta总结

一、前言


1  作业知识点、题量和难度总结

知识点:  Java中输入一般是通过Scanner类来实现的:具体步骤如下:

(1)创建Scanner对象,接受从控制台输入        Scanner input=new Scanner(System.in);

(2) 接受String类型        String str=input.next();

(3)接受int类型        int n=input.nextInt();

(4)输出结果      System.out.println(str);   System.out.println(n);

        条件语句

1.if:

①单条件语句:

if( 条件判断语句 ){ 

         当条件判断语句为true,就执行该代码块,为false就不执行

}

②双条件语句:

if(条件判断语句){
           功能语句1,当条件满足时执行该代码块
}else{
           功能语句2,当条件不满足时执行该代码块
}

③多条件语句:

if(条件判断语句1){
      功能语句1,当条件1满足时执行该代码块

}else if(条件判断2){
      功能语句2,当条件2满足时执行该代码块

}else if(条件判断3){
      功能语句3,当条件3满足时执行该代码块

}else{
      当所有条件都不满足时执行该代码块

 }

注意:if后面的{}可以省略,如果没有{},它只会执行下面的一行代码(一般不适用),else{}、else if(){}不能单独使用,只要匹配了条件,执行完对应的代码块之后,整个选择结构就结束了,后面再满足条件的代码块将不再执行!!!

2.switch:(注意:jdk7之后可支持字符串String)

      变量   

      switch(变量){
            case 值1:
                功能语句1;
                break;
            case 值2:
                功能语句2;
                break;
            case 值3:
                功能语句3;
                break;
            default:
                功能语句default;
                break;
        }

注意:当条件匹配上后,执行匹配的功能语句,否则执行default语句,如果没有break则会依次往下执行,只到switch执行完

一般用在比较固定的情况:如 VIP 、段位、星期、月份等
    注意: ①从匹配上的代码开始执行,直到找到最近的break,跳出整个switch语句
                ②变量:可以有的类型  byte short char int enum(枚举,java5开始支持的)
    条件语句的选择:switch一般用来变量固定的情况。如 VIP 、段位、星期、月份等
                                 其它的情况一般用if 或  if else。。。,
    switch能做到的  if语句都能做到

        循环语句

while 循环

while是最基本的循环,它的结构为:

while( 布尔表达式 ) { //循环内容 }

只要布尔表达式为 true,循环就会一直执行下去。

for循环

虽然所有循环结构都可以用 while 或者 do...while表示,但 Java 提供了另一种语句 —— for 循环,使一些循环结构变得更加简单。

for循环执行的次数是在执行前就确定的。语法格式如下:

for(初始化; 布尔表达式; 更新) { //代码语句 }

关于 for 循环有以下几点说明:

  • 最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
  • 然后,检测布尔表达式的值。如果为 true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。
  • 执行一次循环后,更新循环控制变量。
  • 再次检测布尔表达式。循环执行上面的过程。

JAVA中,char占2字节,16位。可在存放汉字


2、char赋值

char a='a';  //任意单个字符,加单引号。

char a='中';//任意单个中文字,加单引号。

char a=111;//整数。0~65535。十进制、八进制、十六进制均可。输出字符编码表中对应的字符。

注:只能放单个字符。 

String用法

1 length()字符串的长度

String a = "Hello Word!";
System.out.println(a.length);

输出的结果是字符串长度10。

2 charAt()截取一个字符

String a = "Hello Word";
System.out.println(a.charAt(1));

输出的结果是字符串a的下标为1的字符e。

3 getchars()截取多个字符并由其他字符串接收

String a = "Hello Word";
char[] b = new char[10];
a.getChars(0, 5, b, 0);
System.out.println(b);

输出的结果为Hello,其中第一个参数0是要截取的字符串的初始下标(int sourceStart),第二个参数5是要截取的字符串的结束后的下一个下标(int sourceEnd)也就是实际截取到的下标是int sourceEnd-1,第三个参数是接收的字符串(char target[]),最后一个参数是接收的字符串开始接收的位置。

4 getBytes()将字符串变成一个byte数组

String a = "Hello Word";
byte b[] = a.getBytes();
System.out.println(new String(b));

输出的结果为Hello Word的byte数组。

5 toCharArray()将字符串变成一个字符数组

String a = "Hello Word";
char[]b = a.toCharArray();
System.out.println(b);  

输出的结果为Hello Word字符数组。

6 equals()和equalsIgnoreCase()比较两个字符串是否相等,前者区分大小写,后者不区分

String a = "Hello Word";
String b = "hello word";
System.out.println(a.equals(b));
System.out.println(a.equalsIgnoreCase(b));  

输出的结果为第一条为false,第二条为true。

7 startsWith()和endsWith()判断字符串是不是以特定的字符开头或结束

String a = "Hello Word";
System.out.println(a.startsWith("ee"));  
System.out.println(a.endsWith("rd"));

输出的结果第一条为false,第二条为true。

8 toUpperCase()和toLowerCase()将字符串转换为大写或小写

String a = "Hello Word";
System.out.println(a.toUpperCase());
System.out.println(a.toLowerCase());

输出的结果第一条为“HELLO WORD”,第二条为“hello word”。

9 concat() 连接两个字符串

String a = "Hello Word";
String b = "你好";
System.out.println(b.concat(a));

输出的结果为“你好Hello Word”。

10 trim()去掉起始和结束的空格

String a = "    Hello Word   ";
System.out.println(a.trim());

输出的结果为“Hello Word”。

11 substring()截取字符串

String a = "Hello Word";
System.out.println(a.substring(0, 5));
System.out.println(a.substring(6));

输出的结果第一条为“Hello”,第一个参数0(beginIndex)是开始截取的位置,第二个参数5(endIndex)是截取结束的位置,输出的结果第二条是“Word”,参数6(beginIndex)是开始截取的位置。

12 indexOf()和lastIndexOf()前者是查找字符或字符串第一次出现的地方,后者是查找字符或字符串最后一次出现的地方

String a = "Hello Word";
System.out.println(a.indexOf("o"));
System.out.println(a.lastIndexOf("o"));

输出的结果第一条是4,是o第一次出现的下标,第二条是7,是o最后一次出现的下标。

13 compareTo()和compareToIgnoreCase()按字典顺序比较两个字符串的大小,前者区分大小写,后者不区分

String a = "Hello Word";
String b = "hello word";
System.out.println(a.compareTo(b));
System.out.println(a.compareToIgnoreCase(b)); 

输出的结果第一条为-32,第二条为0,两个字符串在字典顺序中大小相同,返回0。

14 replace() 替换

String a = "Hello Word";
String b = "你好";
System.out.println(a.replace(a, b));
System.out.println(a.replace(a, "HELLO WORD"));
System.out.println(b.replace("你", "大家"));

数组

Java 中定义数组的语法有两种:
    type arrayName[];
    type[] arrayName;
type 为Java中的任意数据类型,包括基本类型和组合类型,arrayName为数组名,必须是一个合法的标识符,[ ] 指明该变量是一个数组类型变量。例如:

  1. demoArray=new int[3];

为一个整型数组分配3个int 型整数所占据的内存空间。

通常,你可以在定义的同时分配空间,语法为:
    type arrayName[] = new type[arraySize];
例如:

  1. int demoArray[] = new int[3];

数组的初始化

你可以在声明数组的同时进行初始化(静态初始化),也可以在声明以后进行初始化(动态初始化)。例如:

  1. // 静态初始化
  2. // 静态初始化的同时就为数组元素分配空间并赋值
  3. int intArray[] = {1,2,3,4};
  4. String stringArray[] = {"微学苑", "http://www.weixueyuan.net", "一切编程语言都是纸老虎"};
  5. // 动态初始化
  6. float floatArray[] = new float[3];
  7. floatArray[0] = 1.0f;
  8. floatArray[1] = 132.63f;
  9. floatArray[2] = 100F;

数组引用

可以通过下标来引用数组:
    arrayName[index];
与C、C++不同,Java对数组元素要进行越界检查以保证安全性。

每个数组都有一个length属性来指明它的长度,例如 intArray.length 指明数组 intArray 的长度。

二维数组

二维数组的声明、初始化和引用与一维数组相似:

  1. int intArray[ ][ ] = { {1,2}, {2,3}, {4,5} };
  2. int a[ ][ ] = new int[2][3];
  3. a[0][0] = 12;
  4. a[0][1] = 34;
  5. // ......
  6. a[1][2] = 93;

Java语言中,由于把二维数组看作是数组的数组,数组空间不是连续分配的,所以不要求二维数组每一维的大小相同。例如:

  1. int intArray[ ][ ] = { {1,2}, {2,3}, {3,4,5} };
  2. int a[ ][ ] = new int[2][ ];
  3. a[0] = new int[3];
  4. a[1] = new int[5];

Java中的类

类可以看成是创建Java对象的模板。

通过下面一个简单的类来理解下Java中类的定义:

public class Dog{
   String breed;
   int age;
   String color;
   void barking(){
   }
   
   void hungry(){
   }
   
   void sleeping(){
   }
}

一个类可以包含以下类型变量:

  • 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
  • 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
  • 类变量:类变量也声明在类中,方法体之外,但必须声明为static类型。

一个类可以拥有多个方法,在上面的例子中:barking()、hungry()和sleeping()都是Dog类的方法。

  1. 构造方法也是方法,只是一种特殊的方法而已。请写出使用它的4个要点。

    1. 构造器通过new关键字调用。
    2. 构造器不能定义返回值类型(返回值的类型肯定是本类),不能在构造器里使用return返回某个值。
    3. 如果我们没有定义构造器,则编译器会自动定义一个无参的构造方法。如果已定义则编译器不会自动添加!
    4. 构造器的方法名必须和类名一致!

下面是一个构造方法示例:

public class Puppy{
   public Puppy(){
   }

   public Puppy(String name){
      // 这个构造器仅有一个参数:name
   }
}

创建对象

对象是根据类创建的。在Java中,使用关键字new来创建一个新的对象。创建对象需要以下三步:

  • 声明:声明一个对象,包括对象名称和对象类型。
  • 实例化:使用关键字new来创建一个对象。
  • 初始化:使用new创建对象时,会调用构造方法初始化对象。

下面是一个创建对象的例子:

public class Puppy{
   public Puppy(String name){
      //这个构造器仅有一个参数:name
      System.out.println("Passed Name is :" + name ); 
   }
   public static void main(String []args){
      // 下面的语句将创建一个Puppy对象
      Puppy myPuppy = new Puppy( "tommy" );
   }
}

编译并运行上面的程序,会打印出下面的结果:

Passed Name is :tommy

访问实例变量和方法

通过已创建的对象来访问成员变量和成员方法,如下所示:

/* 实例化对象 */
ObjectReference = new Constructor();
/* 访问其中的变量 */
ObjectReference.variableName;
/* 访问类中的方法 */
ObjectReference.MethodName();

题量和难度: 

第一次的八道编程题,题量虽然大,但是较为容易,就是在计算税率这道题中,数据较多,写起来很简单就是很繁琐。

第二次的五道编程题,题量适中,难度一般。

第三次的三道编程题,题量少,前两题类的运用简单,第三道题涉及到正则表达式个人感觉难度较大,得分不容易。

二、设计与分析


重点对题目的提交源码进行分析,可参考SourceMonitor的生成报表内容以及PowerDesigner的相应类图,要有相应的解释和心得(做到有图有真相),本次Blog必须分析的内容如下:

题目集1(7-8)

SourceMonitor报表:

Metrics Details For File 'Main.java'
--------------------------------------------------------------------------------------------

Parameter                Value
=========                =====
Project Directory            E:\IntelliJ_IDEA\arrary3\javapta作业\src\
Project Name                分析结果
Checkpoint Name                Baseline
File Name                Main.java
Lines                    34
Statements                24
Percent Branch Statements        29.2
Method Call Statements            17
Percent Lines with Comments        0.0
Classes and Interfaces            1
Methods per Class            2.00
Average Statements per Method        9.50
Line Number of Most Complex Method    9
Name of Most Complex Method        Main.test()
Maximum Complexity            20
Line Number of Deepest Block        18
Maximum Block Depth            3
Average Block Depth            1.96
Average Complexity            10.50

--------------------------------------------------------------------------------------------
Most Complex Methods in 1 Class(es):    Complexity, Statements, Max Depth, Calls

Main.main()                1, 1, 2, 1
Main.test()                20, 18, 3, 16

--------------------------------------------------------------------------------------------
Block Depth                Statements

0                    3
1                    2
2                    12
3                    7
4                    0
5                    0
6                    0
7                    0
8                    0
9+                    0
--------------------------------------------------------------------------------------------

类图

 

 题目集2

7-4

SourceMonitor报表:

 

Metrics Details For File 'Main.java'
--------------------------------------------------------------------------------------------

Parameter                Value
=========                =====
Project Directory            E:\IntelliJ_IDEA\arrary3\javapta作业\src\
Project Name                分析结果题目集2 .7-4
Checkpoint Name                Baseline
File Name                Main.java
Lines                    91
Statements                40
Percent Branch Statements        20.0
Method Call Statements            9
Percent Lines with Comments        17.6
Classes and Interfaces            1
Methods per Class            4.00
Average Statements per Method        7.75
Line Number of Most Complex Method    46
Name of Most Complex Method        Main.nextDate()
Maximum Complexity            7
Line Number of Deepest Block        57
Maximum Block Depth            4
Average Block Depth            2.15
Average Complexity            2.75

--------------------------------------------------------------------------------------------
Most Complex Methods in 1 Class(es):    Complexity, Statements, Max Depth, Calls

Main.checkInputValidity()        2, 5, 3, 1
Main.isLeapYear()            1, 2, 2, 0
Main.main()                1, 5, 2, 4
Main.nextDate()                7, 19, 4, 2

--------------------------------------------------------------------------------------------
Block Depth                Statements

0                    3
1                    6
2                    17
3                    10
4                    4
5                    0
6                    0
7                    0
8                    0
9+                    0
--------------------------------------------------------------------------------------------
 

类图 

 

7-5 

SourceMonitor报表:

Metrics Details For File 'Main.java'
--------------------------------------------------------------------------------------------

Parameter                Value
=========                =====
Project Directory            E:\IntelliJ_IDEA\arrary3\javapta作业\src\
Project Name                分析结果题目集2 7-5
Checkpoint Name                Baseline
File Name                Main.java
Lines                    89
Statements                43
Percent Branch Statements        23.3
Method Call Statements            11
Percent Lines with Comments        15.7
Classes and Interfaces            1
Methods per Class            4.00
Average Statements per Method        9.25
Line Number of Most Complex Method    48
Name of Most Complex Method        Main.agoDate()
Maximum Complexity            10
Line Number of Deepest Block        66
Maximum Block Depth            6
Average Block Depth            2.95
Average Complexity            3.50

--------------------------------------------------------------------------------------------
Most Complex Methods in 1 Class(es):    Complexity, Statements, Max Depth, Calls

Main.agoDate()                10, 24, 6, 5
Main.checkInputValidity()        2, 5, 3, 1
Main.isLeapYear()            1, 2, 2, 0
Main.main()                1, 6, 2, 5

--------------------------------------------------------------------------------------------
Block Depth                Statements

0                    2
1                    4
2                    16
3                    7
4                    4
5                    6
6                    4
7                    0
8                    0
9+                    0
--------------------------------------------------------------------------------------------
 

类图 

题目集3 

7-2 

类图

 

SourceMonitor报表:

Metrics Details For File 'Main.java'
--------------------------------------------------------------------------------------------

Parameter                Value
=========                =====
Project Directory            E:\IntelliJ_IDEA\arrary3\javapta作业\src\
Project Name                分析结果 题目集3 7-2
Checkpoint Name                Baseline
File Name                Main.java
Lines                    143
Statements                62
Percent Branch Statements        12.9
Method Call Statements            9
Percent Lines with Comments        16.1
Classes and Interfaces            2
Methods per Class            5.00
Average Statements per Method        5.50
Line Number of Most Complex Method    {undefined}
Name of Most Complex Method        {no methods}
Maximum Complexity            0
Line Number of Deepest Block        91
Maximum Block Depth            3
Average Block Depth            1.05
Average Complexity            0.00

--------------------------------------------------------------------------------------------
No Methods Found:            Complexity


--------------------------------------------------------------------------------------------
Block Depth                Statements

0                    15
1                    33
2                    10
3                    4
4                    0
5                    0
6                    0
7                    0
8                    0
9+                    0
--------------------------------------------------------------------------------------------
 

7-3

 类图

 SourceMonitor报表:

Metrics Details For File 'Main.java'
--------------------------------------------------------------------------------------------

Parameter                Value
=========                =====
Project Directory            E:\IntelliJ_IDEA\arrary3\javapta作业\src\
Project Name                题目集3 7-3
Checkpoint Name                Baseline
File Name                Main.java
Lines                    242
Statements                161
Percent Branch Statements        21.1
Method Call Statements            103
Percent Lines with Comments        0.0
Classes and Interfaces            3
Methods per Class            6.33
Average Statements per Method        6.74
Line Number of Most Complex Method    36
Name of Most Complex Method        Main.output()
Maximum Complexity            19
Line Number of Deepest Block        28
Maximum Block Depth            5
Average Block Depth            2.91
Average Complexity            2.95

--------------------------------------------------------------------------------------------
Most Complex Methods in 3 Class(es):    Complexity, Statements, Max Depth, Calls

Main.computePoly()            5, 6, 5, 11
Main.main()                1, 8, 2, 5
Main.output()                19, 33, 5, 34
Main.parsePoly()            5, 7, 4, 5
Poly.addDeg()                1, 1, 3, 1
Poly.addTerm()                1, 1, 3, 1
Poly.diff()                6, 12, 5, 5
Poly.getDeg()                1, 1, 3, 0
Poly.getTerm()                1, 1, 3, 0
Poly.isCons()                1, 1, 3, 0
Poly.isRepeat()                1, 1, 3, 0
Poly.Poly()                1, 4, 3, 0
Poly.setCons()                1, 1, 3, 0
Poly.setRepeat()            1, 1, 3, 0
StringChecker.charChecker()        1, 6, 3, 5
StringChecker.checkPoly()        7, 29, 4, 28
StringChecker.opChecker()        1, 9, 3, 4
StringChecker.spaceChecker()        1, 5, 3, 2
StringChecker.StringChecker()        1, 1, 3, 0

--------------------------------------------------------------------------------------------
Block Depth                Statements

0                    5
1                    8
2                    35
3                    70
4                    35
5                    8
6                    0
7                    0
8                    0
9+                    0
--------------------------------------------------------------------------------------------
 

三、采坑心得 

在7-4 计算税率这道题上千万不要使用魔法数、计算机就是用来做计算的,不要自己手算各个钱数,用代码来解决;在7-8 判断三角形类型这道题中应注意包含关系,判断的向后顺序,等边直角三角形是特殊的直角三角形,等边三角形就是特殊的等腰三角形;在判断闰年那一类题中要注意不闰年和平年二月份的区别,在计算前几天或者后几天时候注意边界值,例如12月31日的下一天是1月1日,月份变为1月年份也要加一;还有就是在第三次作业关于正则表达式这道题上初次学习正则表达式很多地方不能理解,使得做起来困难;

四、改进建议

多用类,分模块来进行,深刻体会面向对象的思想,把功能划分给不同的对象,分工合作。

五、总结

第一次作业使我了解到java的对判断、循环等基本语法,第二次作业是我了解到Java对于方法的调用,第三次作业让我对java的类有了基本的认识、知道如何去创建一个方法,然后就是必须得从C语言面向过程的思想上一步一步转到面向对象上来,细细品味万物皆可对象这句话。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值