零基础学Java语言-浙江大学-翁恺-第5周 数组_学习笔记

数组

  • 存储相同数据类型的元素。
  • 一旦创建,不能再改变大小。
  • 数组中的每个数据叫做元素。

定义数组变量:

<类型>[]<名字> = new <类型>[元素个数];

  • 元素个数必须给出
  • 元素个数必须是整数
  • 元素个数可以是变量(先让用户输入数组的个数,然后将这个数确定为数组的元素个数)
int[]numbers = new int[10];
/*创建了一个名字叫numbers的int型数组,元素个数为10

数组元素

  • 数组的索引或下标都是从0开始的(源自于C语言,其编译器从0开始更易于计算)
numbers[0];//表示数组中的第一个元素
/*10个元素:a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]
每个元素是一个int类型的变量*/
  • 最小的下标是0,最大的下标是元素个数-1
  • 编译器不会检查下标是否有效,如果运行时出现了无效下标,会导致程序终止。

直接初始化数组

package Pracrice;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
	Scanner in = new Scanner(System.in);
	int[] scores = {87,98,69,54,65,76,87,99};//直接初始化数组
	System.out.println(scores.length);//.length可以输出数组的元素个数,在遍历数组时使用.length方便日后扩展
	for(int i=0;i<scores.length;i++)
	{
		System.out.print(scores[i]+" ");
	}
}
}

数组变量

  • 数组变量是数组的管理者而非数组本身

  • 数组必须创建出来然后交给数组变量来管理

  • 数组变量之间的赋值是管理权限的赋予

  • 数组变量之间的比较是判断是否管理同一个数组

    int[] a1 = {1,2,3,4,5};
    int[] a2 = a1;
    for ( int i=0; i<a2.length; ++i )
    {
    a2[i] ++;
    }
    for ( int i=0; i<a1.length; ++i )
    {
    System.out.println(a1[i]);
    }
    //示意图如下
    

在这里插入图片描述

复制数组

  • 必须遍历源数组,将每个元素逐一拷贝给目标数组

遍历数组

for循环

  • 通常使用for循环,让循环变量i从0到<数组的length,这样循环体内最大的i正好是数组最大的有效下标。

  • 常见错误:

    • 循环结束条件是<=数组长度;

    • 离开循环后,继续使用i的值来做数组元素的下标

      //输入一个数,查看其是否在数组中
      int[] data = {2,3,4,5,6,7,8,9,10};
      int x = in.nextlnt();
      int loc = -1;
      for(int i=0;i<data.length;i++)
      {
          if(x==data[i])
          {
              loc = i;
              break;
          }
      }
      if(loc>-1)
      {
          System.out.println(x+"是第"+(loc+1+"个");
      }
      else
      {
          System.out.println(x+"不在其中");
      }
      

for-each循环

for(<类型><变量>:<数组>){
    ...
}//对于数组中的每一个元素取出来作为这个类型的变量
非常适合用于遍历读出数组,但是不能修改数组

对比for循环示例:

//输入一个数,查看其是否在数组中
int[] data = {2,3,4,5,6,7,8,9,10};
int x = in.nextlnt();
boolean found = false;
for(int k : data )//对于data数组中的每一个元素,循环的每一轮将其取出作为一个k。所以每一轮的k都是变化的,第一轮k=data[0];第二轮k=data[2]
{
    if(x == k )
    {
        found = true;
        break;
    }
}
if(found)
{
    System.out.println(x+"在其中");
}
else
{
    System.out.println(x+"不在其中");
}

素数

构造素数表

//方法一
Scanner in = new Scanner(System.in);
int[] primes = new int[50];
primes[0]= 2;
int cnt = 1;
MAIN_LOOP:
for(int x = 3;cnt<50;x++)
{
for(int i= 0;i<cnt;i++)
	{
		if(x%primes[i]==0)
		{
			continue MAIN_LOOP;
		}
	}
	primes[cnt++]=x;
}
for(int k:primes)
{
	System.out.print(k+" ");
}
//方法二		
Scanner in = new Scanner(System.in);
boolean[]isPrime = new boolean[100];
for(int i = 0;i<isPrime.length;i++)
{
	isPrime[i] = true;
}
for(int i=2;i<isPrime.length;i++)
{
	if(isPrime[i])
		{
		for(int k=2;i*k<isPrime.length;k++)
		{
			isPrime[i*k]= false;
		}
	}
}
for(int i= 2;i<isPrime.length;i++)
	{
		if(isPrime[i])
		{
			System.out.print(i+" ");
		}
	}

二维数组

int[][] a = new int[3][5];

通常理解为a是一个3行5列的矩阵,如下图所示:

在这里插入图片描述

二维数组的遍历

for(i=0;i<3;i++)
{
    for(j=0;j<5;j++)
    {
        a[i][j]=i*j;
    }
}
- a[i][j]是一个int
- 表示第i行第j列上的单元
    - 不存在a[i,j]的写法

二维数组的初始化

int[][] a {
    {1,2,3,4},
    {1,2,3},
};
  • 编译器来数数
  • 每行一个{},逗号分隔
  • 最后的逗号可以存在,来自C语言的古老传统
  • 如果省略,表示补零
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
浙江大学翁恺C语言课件是浙江大学计算机院教授翁恺编写的一套C语言课程教材。这套课件主要用于C语言的教学习,内容包括基本语法、数据类型、运算符、流程控制、函数、指针、数组、字符串等C语言的基础知识。 这套课件具有以下几个特点。首先,它简单易懂,适合初学习翁恺老师针对C语言的特点和学习难点,将知识点进行了简洁明了的讲解,同时结合了大量的示例和练习,帮助生更好地理解和掌握C语言的编程思路和技巧。 其次,课件内容丰富全面。翁恺老师在编写课件时,充分考虑到C语言的广泛应用领域和生的学习需求,涵盖了C语言的各个方面,包括基础语法、程序设计、算法数据结构等内容,帮助生建立正确的编程思维和解决实际问题的能力。 再次,课件设计灵活多样。为了培养生的动手实践能力,课件中设计了丰富的编程实例和实践项目,生可以边边练,不断巩固和提高自己的编程能力。此外,课件中还包含了一些扩展知识,如文件操作、动态内存管理等,有助于生进一步拓宽视野。 总之,浙江大学翁恺C语言课件是一套权威且实用的C语言学习资料,通过学习这套课件,生可以系统地学习和掌握C语言的基础知识,提高编程能力,并为日后的学习和工作打下坚实的基础。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值