第4章 流程控制与数组

1:顺序结构

        任何编程语言中最常见的程序结构就是顺序结构。顺序结构就是自上而下逐行地执行,中间没有任何的判断与跳转。

2:分支语句

Java提供了两种常见的分支控制结构:if语句和switch语句。

    1:if条件语句

        if语句使用布尔表达式或布尔值作为分支语句条件进行分支控制。if语句有如下三种形式:①if②if-else③if-else if-else。if、else、else if后的条件执行体要么是一个花括号括起来的代码块,则这个代码块整体作为条件执行体;要么是以分号为结束符的一行语句,甚至可能是一个空语句(空语句是一个分号),那么就是只是这条语句作为条件执行体。如果省略了if条件后条件执行体的花括号,那么if条件只控制到跟该条件语句的第一个分号处。

    2:switch分支语句

        switch语句有一个控制表达式和多个case标签组成,和if语句不同的是,switch语句后面的控制表达式的数据类型只能是byte、short、char、int四种整数类型,枚举类型和java.lang.String类型,不能是boolean类型。switch语句往往需要在case标签后紧跟一个代码代码块,case标签作为这个代码块的标识。

public class text1 {
	public static void main(String[] args) {
		String season = "夏天";
		switch (season) {
		case "春天":
			System.out.println("春暖花开");
			break;
		case "夏天":
			System.out.println("夏日炎炎");
			break;
		case "秋天":
			System.out.println("秋高气爽");
			break;
		case "冬天":
			System.out.println("冬雪皑皑");
			break;
		default:
			System.out.println("错误!!!");
			break;
		}
	}
}

3:循环结构

    

    1:while循环语句

while(条件)
		{
			执行体;
		}    

    2:do while循环语句

do {
			执行体;
		}while(条件)

    3:for循环

for (语句1;语句2; 语句3) {
			执行体;
		}

        语句1:初始化语句;语句2:循环条件;语句3:循环迭代语句。

4:控制循环结构

        Java语言没有提供goto语句来控制程序的跳转,这种做法提高的程序流程控制的可读性,但降低了程序流程控制的灵活性。为了弥补这种不足,Java提供了continue和break来控制循环结构。除此之外,return语句可以结束整个方法。

        (1)break:break用于完全结束一个循环,跳出循环体。

        (2)continue:continue只是跳过本次循环,接着下一次循环,并不会终止循环。

        (3)return:return关键字并不是专门用于结束循环的,return的功能是结束一个方法。当方法执行到一个return语句时,这个方法将被结束。

5:数组类型

    数组是编程语言中最长常见的一种数据是够,可用于存储多个数据,每个数组元素存放一个数据,通常可通过数组元素的索引类访问数组元素,包括为数组元素赋值和取出数组元素的值。

    1:理解数组:数组也是一种类型

           Java的数组要求所有的数组元素具有相同的数据类型。因此,在一个数组中,数组元素的类型是唯一的,即一个数组里只能存储一种数据类型的数据。而不能存储多种数据类型的数据。

           一旦数组的初始化完成,数组在内存中所占的空间就被固定下来,因此数组的长度是不可改变的。Java的数组既可以存储基本类型数据也可以存储引用类型的数据。数组也是一种数据类型,它本身是引用类型。

    2:定义数组

           Java语言支持两种语法格式类定义数组:①type[ ] arrayName;②type arrayName[ ];对于这两种语法格式而言,通常推荐第一种格式。数组是一种引用类型的变量,因此使用它定义一个变量时仅仅表示定义了一个引用变量,这个引用变量还未指向任何有效的内存,因此定义数组时不能指定数组长度。而且由于定义了一个引用变量,并未指向任何有效的内存空间,所以还没有没存空间的存储数组元素,因此这个数组也不能使用,只有对数组进行初始化后才能使用。注意定义数组是不能指定数组的长度。

   3:数组的初始化

        数组初始化有两种方式:静态初始化、动态初始化。
        (1)静态初始化:
int[] intArr;
		intArr=new int[] {11,22,33};
        (2)动态初始化:
int[] intArr = new int[4];
        注意:不要同时使用静态初始化和动态初始化,也就是说,不要为数组元素赋值,不要在进行数组初始化时,既指定数组的长度,也为每个数组元素分配初始值。、

    4:使用数组

            数组最常见的用法就是访问数组元素,包括对数组进行元素的赋值和取出数组 元素的值。Java语言的数组索引是从0开始的,也就是说,第一个数组元素的索引值为0,最后一个数组元素的索引值为数组长度减1。
            
int[] intArr = new int[] {1,2,3,4};
		for (int i = 0; i < intArr.length; i++) {
			System.out.println(i);
		}

    5:foreach循环

        foreach循环,这种循环遍历数组和集合更加简洁。使用foreach循环遍历数组和集合时无须获得数组和集合长度,无需根据根据索引来访问数组元素和集合元素,foreach循环自动遍历数组和集合的每个元素。
int[] intArr = new int[] {1,2,3,4};
		for (int i : intArr) {
			System.out.println(i);
		}
        注意:使用foreach循环迭代数组元素时,并不能改变数组元素的值,因此不要对foreach的循环变量进行赋值。

    6:深入数组

        数组是一种引用类型,数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的。
        实际的数组对象被存储在堆内存中;如果引用该数组对象的数组引用变量是一个局部变量,那么它被存储在栈内存中。

         1:基本类型的初始化
            对于基本类型数组而言,数组元素的值直接存储在对应的数组元素中,因此,初始化数组时,先为该数组分配内存空间,然后直接将数组元素的值存入对应数组元素中。
    
int[] intArr;
		intArr = new int[5];
		for (int i = 0; i < intArr.length; i++) {
			intArr[i] = i;
		}
        2:引用类型数组的初始化

            应用类型数组的数组元素是引用,因此情况变得更加复杂,每个数组元素里存储的还是引用类型,它指向另一块内存,这块内存里存储了有效数据。

    

 class Person {
		public String name;
		public void info() {
			System.out.println("名字是:"+name);
		}
}
public class text1 {
	public static void main(String[] args) {
		Person[] person;
		person=new Person[2];
		Person temp;
		temp=new Person();
		temp.name="小熊";
		person[0]=temp;
		person[0].info();
		temp.name="小猫";
		person[1]=temp;
		person[1].info();
	}
}
        
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值