目录

  • 1 项目一 开发第一个Java程序
    • 1.1 任务1 搭建Java开发环境
    • 1.2 任务2 使用记事本开发Java程序
    • 1.3 任务3 使用Eclipse开发Java程序
    • 1.4 编程实践
  • 2 项目二 开发简单的Java应用
    • 2.1 任务1 打印超市购物小票
    • 2.2 任务2 掷色子游戏
    • 2.3 任务3 抽奖游戏
    • 2.4 编程实践
  • 3 项目三 开发面向对象的Java应用
    • 3.1 类和对象的创建
    • 3.2 类的封装
    • 3.3 构造方法
    • 3.4 对象数组
    • 3.5 编程实践
  • 4 项目四 Java API应用
    • 4.1 任务1 加密/解密工具
    • 4.2 编程实践
  • 5 项目五 Java集合的应用
    • 5.1 点菜系统
    • 5.2 编程实践
任务1 加密/解密工具

主要知识点:

一、Arrays类

    Arrays 类是 Java 中提供的一个工具类,在 java.util 包中。该类中包含了一些方法用来直接操作数组,比如可直接实现数组的赋值、排序、比较、查找等操作。

    主要具备以下功能:

        给数组赋值:通过 fill 方法。

        对数组排序:通过 sort 方法,按升序。

        比较数组:通过 equals 方法比较数组中元素值是否相等。

  • 查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找法操作。

序号方法和说明
1public static int binarySearch(Object[] a, Object key)
用二分查找算法在给定数组中搜索给定值的对象(Byte,Int,double等)。数组在调用前必须排序好的。如果查找值包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。
2public static boolean equals(long[] a, long[] a2)
如果两个指定的 long 型数组彼此相等,则返回 true。如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的。换句话说,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。
3public static void fill(int[] a, int val)
将指定的 int 值分配给指定 int 型数组指定范围中的每个元素。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。
4public static void sort(Object[] a)
对指定对象数组根据其元素的自然顺序进行升序排列。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。

应用示例:

int[] a= {8,6,9,3,2,7};

//数组元素排序

System.out.print("数组a中的元素为:");

Arrays.sort(a);

// 输出所有数组元素

System.out.println(Arrays.toString(a));

//查找9这个元素

int index=Arrays.binarySearch(a, 9);

System.out.printf("9这个元素在%d位置\n",index+1);

//  声明数组b:int b=new int[6],用8填充b数组的每一个元素

int[] b=new int[6];

Arrays.fill(b, 8);

System.out.print("数组b中的元素为:");

System.out.println(Arrays.toString(b));

//  判断数组a和数组b是否相等

boolean equal=Arrays.equals(ab);

if(equal)

System.out.println("两个数组相等");

else

System.out.println("两个数组不相等");

b=Arrays.copyOf(a, 6);

//  拷贝数组a到数组b中,再判断两个数组是否相等

equal=Arrays.equals(ab);

if(equal)

System.out.println("两个数组相等");

else

System.out.println("两个数组不相等");

二、String类

    String 类位于 java.lang包中。

    String 类代表不可变的字符串。

    Java 程序中的所有字符串常量(如 “abc” )都作为此类的对象。 

    String类的构造方法:

字符串在内存中的存放:

用法小结:

§字符串常量存储在“数据区(字符串池)”。

§使用构造方法创建字符串对象,存储在“堆区”。

§使用字符串连接符连接若干字符串常量,如“abc” + “efg”,会创建新的字符串常量,存储在“数据区”。

§使用字符串连接符连接字符串常量和字符串变量,如“abc” + s1,或 s1 + s2,会创建新的字符串对象,存储在“堆区”。

§String 对象的长度和内容是不可变的。给 String 类型的变量重新赋值时,并不是改变了原来的字符串内容,而是生成了一个新的字符串。

主要方法:

应用举例:

public class Test8 {

    public static void main( String args[] ) {

        String s1 = “我爱学java”;

        String s2 = “我爱学JAVA”;

        System.out.println( s1.length( ) );   // 7

        System.out.println( s1.equals(s2) );   // false

        System.out.println( s1.equalsIgnoreCase(s2) );   // true

        s1.replace( ‘我’,  ‘你’ );

        System.out.println( s1 );   // 我爱学java

    }

}

应用举例:

public class Test9 {

    public static void main( String args[] ) {

        String s = “我爱学java”;

        System.out.println( s.startsWith( “我” ) );   // true 

        s = s.toUpperCase();

        System.out.println( s );   // 我爱学JAVA

    }

}

应用举例:

public class Test10 {

    public static void main( String args[ ] ){

        String s = “  Welcome to Java World  ”;

        s = s.trim( );

        System.out.println( s);   // Welcome to Java World

        char c = s.charAt( 11);

        System.out.println( c);   // J 

        String t = s.substring( 11);

        System.out.println( t);   // Java World 

        String[ ] a = s.split(“ ” );

        for( inti=0; i<a.length; i++ ){

            System.out.println( a[i]);   //

        }

    }

}

public class Test11 {

    public static void main( String args[] ) {

        String email = “JohnSmith@sina.com.cn”;

        inti = email.indexOf( ‘@’ );

        if( i == -1 ) {

            System.out.println( “非法邮箱地址” );

        }

        else {

            int j = email.indexOf( “sina”, i );

            if ( j != -1 ) {

                System.out.println( “sina用户” );

            }

        }

    }

}

应用举例:

public class Test12 {

    public static void main( String args[] ) {

        inti = 352001890;

        String s = String.valueOf( i );

        System.out.println( i + “是”+ s.length( ) + “位数” );

    }

}

应用举例:

import java.util.*;

public class Test13 {

    public static void main( String[ ] args) {

        String name, mail, tel,regex;

        Scanner sc = new Scanner( System.in );

        while( true ) {

            System.out.println( “请输入姓名:” );

            name = sc.nextLine( );

            regex = “[\u4e00-\u9fa5]+([  .]*[\u4e00-\u9fa5]+)*”;

            if( name.matches( regex ) ) {

                name = name.replaceAll( “ +”, “” );

                name = name.replaceAll( “\\.{2,}”,“.” );

                break;

            }

            else

                System.out.println( “错误姓名” );

            }

        }

while(true ) {

            System.out.println( “请输入电话:” );

            tel = sc.nextLine( );

            regex = “((\\(?\\d{3,4}[)-]?)?\\d{7,8})|\\d{11}”;

            if( tel.matches( regex ) )

                break;

            else

                System.out.println( “错误电话” );

        }

        while( true ) {

            System.out.println( “请输入邮箱:” );

            mail = sc.nextLine( );

            regex = “\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*”;

            if( mail.matches( regex ) )

                break;

            else

                System.out.println( “错误邮箱地址” );

        }

    }

}

二、Math类与Random类

1、Math类

    Math类是数学操作类,提供了一系列用于数学运算的静态方法,包括求绝对值、三角函数等。Math类中有两个静态常量PI和E,分别代表数学常量π和e。Math类比较简单,初学者可以通过查看API文档来学习Math类的具体用法。例如:

public class Test14 {

    public static void main( String args[] ) {

        System.out.println("-5的绝对值为:"+Math.abs(-5));

        System.out.println("两个数中较大值为:"+Math.max(6,-7.8));   

        System.out.println("两个数中较小值为:"+Math.min(6,-7.8));   

        System.out.println("产生一个大于等于0.0小于1.0的随机数:"+Math.random()));   

    }

}

2、Random类

    在JDK的java.util包中有一个Random类,它可以在指定的取值范围内随机产生数字。在Random类中提供了两个构造方法,具体如下表所示:

方法说明   功能描述
 Random()   构造方法,用于创建一个伪随机数生成器
  Random(long seed) 构造方法,使用一个long型的种子创建伪随机数生成器

    表中列举了Random类的两个构造方法,其中第一个构造方法是无参的,通过它创建的Random实例对象每次使用的种子是随机的,因此每个对象所产生的随机数不同。如果希望创建的多个Random实例对象产生相同序列的随机数,则可以在创建对象时调用第二个构造方法,传入相同的种子即可。

    相对于Math的random()方法而言,Random类提供了更多的方法来生成各种伪随机数,不仅可以生成整数类型的随机数,还可以生成浮点类型的随机数,Random类中的常用方法如下表所示。

方法说明功能描述
boolean nextBoolean()随机产生布尔型的随机数
double nextDouble()随机产生double类型的随机数
float nextFloat()随机产生float类型的随机数
int nextInt()随机产生int类型的随机数
int nextInt(int n)随机产生0~n之间int类型的随机数
long nextLong()随机产生long类型的随机数

    表中,列出了Random类常用的方法,其中,Random类的nextDouble()方法返回的是0.0和1.0之间double类型的值,nextFloat()方法返回的是0.0和1.0之间float类型的值,nextInt(int n)返回的是0(包括)和指定值n(不包括)之间的值。

三、Math类

    Math类是数学操作类,提供了一系列用于数学运算的静态方法,包括求绝对值、三角函数等。Math类中有两个静态常量PI和E,分别代表数学常量π和e。Math类比较简单,初学者可以通过查看API文档来学习Math类的具体用法。例如:

public class Test14 {

    public static void main( String args[] ) {

        System.out.println("-5的绝对值为:"+Math.abs(-5));

        System.out.println("两个数中较大值为:"+Math.max(6,-7.8));   

        System.out.println("两个数中较小值为:"+Math.min(6,-7.8));   

        System.out.println("产生一个大于等于0.0小于1.0的随机数:"+Math.random()));   

    }

}

四、Random类

    在JDK的java.util包中有一个Random类,它可以在指定的取值范围内随机产生数字。在Random类中提供了两个构造方法,具体如下表所示:

方法说明   功能描述
 Random()   构造方法,用于创建一个伪随机数生成器
  Random(long seed) 构造方法,使用一个long型的种子创建伪随机数生成器

    表中列举了Random类的两个构造方法,其中第一个构造方法是无参的,通过它创建的Random实例对象每次使用的种子是随机的,因此每个对象所产生的随机数不同。如果希望创建的多个Random实例对象产生相同序列的随机数,则可以在创建对象时调用第二个构造方法,传入相同的种子即可。

    相对于Math的random()方法而言,Random类提供了更多的方法来生成各种伪随机数,不仅可以生成整数类型的随机数,还可以生成浮点类型的随机数,Random类中的常用方法如下表所示。

方法说明功能描述
boolean nextBoolean()随机产生布尔型的随机数
double nextDouble()随机产生double类型的随机数
float nextFloat()随机产生float类型的随机数
int nextInt()随机产生int类型的随机数
int nextInt(int n)随机产生0~n之间int类型的随机数
long nextLong()随机产生long类型的随机数

    表中,列出了Random类常用的方法,其中,Random类的nextDouble()方法返回的是0.0和1.0之间double类型的值,nextFloat()方法返回的是0.0和1.0之间float类型的值,nextInt(int n)返回的是0(包括)和指定值n(不包括)之间的值。