学堂在线—Java程序设计—课程笔记(第1章 Java语言基础知识,第1章续 习题讲解视频)

第1章 Java语言基础知识,第1章续 习题讲解视频

  • 第1章 Java语言基础知识
    • 1.0 导学
    • 1.1 Java与面向对象程序设计简介
    • 1.2 基本数据类型与表达式
    • 1.3 数组
    • 1.4 算法的流程控制
    • 1.5 习题讲解
  • 编程练习题
    • 1. 字符串排序
      • 题目
      • 思路
      • 代码
    • 2. 求斐波拉契数
      • 题目
      • 思路
      • 代码
    • 3. 交集
      • 题目
      • 思路
      • 代码

第1章 Java语言基础知识

1.0 导学

  1. 安装JDK、文本编辑并使用命令行编译运行、eclipse安装配置;
    JDK安装时:复制位置,高级系统设置-环境变量-新建JAVA_HOME+路径,Path加%JAVA_HOME%bin;(classpath JDK5以后可以不配置)
    验证: javac -version;java -version
  2. Eclipse字体设置:font
    Eclipse:可设置保存时自动编译成字节码;
    Eclipse代码模板:template
  3. 文档注释:/**…./,内容可以生成类的官方文档,不可嵌入
    多行注释:/
    ….*/,不可导出文档,不可嵌入
    单行注释://可以独立或加在语句后
  4. 复制语句:ctrl+alt+下箭头;单行注释:ctrl+?/;
    多行注释:ctrl+shift+/?;去掉多行注释:ctrl+shift+
    Ctrl + shift + F:自动排版
  5. Java区别大小写;
    长语句写在多行,不加;即认为是一行;
  6. 字节码文件与类数量对应;一般不建议在一个源代码文件中声明多个class。

1.1 Java与面向对象程序设计简介

  1. 程序设计语言发展历程:机器语言、汇编语言、高级语言、面向对象的语言;
  2. 面向对象的思想:将客观事物看作具有状态和行为的对象,通过抽象找出同一类对象的共同状态和行为,构成类;
    面向对象技术给软件发展带来的益处:可重用性、可靠性;
    面向对象语言的基本特征:抽象和封装、继承、多态;
  3. Java程序编译执行的过程:.java——compiler——.class——interpreter(一次编写,各处运行)

1.2 基本数据类型与表达式

  1. 文字量:直接出现在程序中并被编译器直接使用,也称为文字常量;
    标识符:一个名称,与内存中的某个位置(地址)相对应;
    变量:一个由标识符命名的项,每个变量都有类型,值可以被改变;
  2. 数值类型、字符类型(转义字符:某些特殊字符型常量不可显示)、布尔类型;
    字符串:String类(JDK标准类一部分),每一个字符都可以用转义序列表示;
  3. 算术运算符、赋值运算符、关系运算符(特色:类型比较运算符instanceof)、逻辑运算符、条件运算符;
  4. 类型转换:扩展转换(损失精度)、窄化转换(丢失信息);
    隐含转换:赋值转换、方法调用转换、字符串转换
    显式转换(强制转换)

1.3 数组

  1. 数组是对象:动态初始化,可以赋值给Object类型的变量,调用方法;
  2. 数组的创建和使用:
    声明(无需指明个数、不分配空间、不能直接使用)
    创建(用new构成创建表达式)(声明和创建可一并执行、可同时多个)
    初始化、使用;
  3. 数组名是一个引用;
  4. 二维数组的长度:行数;每一行的长度:列数,可以不同。(二维数组是由一维数组构成的数组)

1.4 算法的流程控制

  1. If语句(简单的if-else可以用条件运算替代)
    switch语句(开关语句,每个case后面要有break语句)
    for语句(循环语句,可以嵌套)
    增强for循环:对数组或集合对象进行遍历
    while语句(循环体可能不执行)
    do-while语句(至少执行一次循环体)
    Break语句:跳出循环(最内层/标号所在循环)、跳出代码块
    Continue语句:停止本次迭代,回到循环起始处

1.5 习题讲解

  1. Float:6-7位有效数字,double:15位有效数字;默认的为double,double速度更快;
    Char:0-65535
  2. 整数默认的类型是int类型,超出范围时需加对应后缀L;
    八进制:0开头;十六进制:0x开头;二进制:0b(Java7以后支持);
    长数字:除开始和结束位,可以加下划线作为分隔符,便于阅读(Java7以后支持)
  3. 浮点型默认类型是double类型,作为float时加f;
    浮点型0.x可以省略0(一般不用);
    十六进制浮点数:只能科学记数法,E改为P;
  4. 字符类型只能表示单个字符,可以赋值0-65535内数字(对应unicode编码);
    转义符\n换行,\r回车,\b退格,\t水平制表,\f换页;
    \数字:八进制,\u数字:十六进制;
  5. 浮点强制转换成整数:丢失小数后部分;
    强制转型超出范围:原始数据取余后的值;
    表达式中数据类型的自动提升;
  6. Int[] a:在栈中开空间;
    new int[5]:在堆中开空间;
    =:将堆中空间地址引用赋值给a;
    数组理论最大容量:length为Int类型,即int最大值2147483647;
    一般数组大小受虚拟机容量限制;
    数组长度可以为0。
  7. 二维数组:可理解为由一维数组组成的数组,在堆中多开一个数组引用各一维数组的首地址,再传给栈空间变量;
    二维数组每行个数可不一致;
  8. 推荐一行只声明一个变量,提高可读性;
    基本数据类型变量:虚拟机栈(容量小,速度快);
    变量作用域:声明的代码块(大括号)内;
    常量:final
  9. 命令行参数:
    Eclipse中运行时选run configurations,可以作为main中的字符串args输入;
  10. 命令行中java xxx 后面直接加参数。

编程练习题

1. 字符串排序

题目

用Java编写一个能对一组字符串按字典序升序排序的程序 输入为N和N行字符串,需要按行输出字符串升序排序的结果 如输入
3
Abc
Abe
Abd
输出:
Abc
Abd
Abe

思路

最基础的排序,暂不考虑复杂度要求,可写一个简单的冒泡排序。
用到的主要方法:
输入 Scanner,分别使用 nextInt() 和 nextLine() 读取时注意光标位置,前者不会自动换行,直接继续读取会导致第一个字符串是输入的数字;
排序可直接用 compareTo()。

代码

import java.util.Scanner;

public class homework1_1 {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		String[] input = new String[n];
		in.nextLine();

		for (int i = 0; i < n; i++) {
			input[i] = in.nextLine();
		}

		for (int i = 0; i < n; i++) {
			for (int j = i + 1; j < n; j++) {
				int key = input[i].compareTo(input[j]);
				if (key > 0) {
					String tmp = input[i];
					input[i] = input[j];
					input[j] = tmp; 
				}
			}
		}
		
		for (int i = 0; i < n; i++) {
			System.out.println(input[i]);
		}		
		
	}
}

2. 求斐波拉契数

题目

斐波拉契数为,Fib(N) = Fib(N-1)+Fib(N-2) F(0)=F(1)=1 用Java编写能求Fib(N)的程序 输入为N,须输出Fib(N)
如输入
3
输出:
3

思路

按公式求解即可,为避免大量递归运算,可用数组存储计算出的数值。
用 long 避免数据溢出。

代码

import java.util.Scanner;

public class homework1_2 {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();

		long[] fib = new long[n + 1];
		fib[0] = 1;
		if (n > 0) {
			fib[1] = 1;
			if (n > 1) {
				for (int i = 2; i <= n; i++) {
					fib[i] = fib[i - 2] + fib[i - 1];
				}
			}
		}

		System.out.println(fib[n]);
	}
}

3. 交集

题目

给定两个数组(数组中不包含相同元素),求两个数组的交集中元素的个数(即共同出现的数,如没有则输出为None) 如输入:
5
1 2 4 6 8
6
1 2 5 6 7 8
输出: 4

思路

暂不考虑复杂度要求,可直接遍历。

代码

import java.util.Scanner;

public class homework1_3 {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int n1 = in.nextInt();
		int[] a = new int[n1];
		for (int i = 0; i < n1; i++) {
			a[i] = in.nextInt();
		}

		int n2 = in.nextInt();
		int[] b = new int[n2];
		for (int i = 0; i < n2; i++) {
			b[i] = in.nextInt();
		}

		in.close();

		int ans = 0;
		for (int i = 0; i < n1; i++) {
			for (int j = 0; j < n2; j++) {
				if (a[i] == b[j])
					ans++;
			}
		}

		if (ans != 0) {
			System.out.println(ans);
		} 
		else {
			System.out.println("None");
		}

	}
}

你可能感兴趣的:(基础学习)