阵列和矩阵
#java #数组 #estruturadedados #matriz

olth!今天,我们将看到一些有关阵列和矩阵的信息,以解决以下坦克:

sumârio
  • 1。介绍
    • 1.1或什么是£或?
    • 1.2是为了什么?
    • 1.3 como se faz?
  • 2。卡拉克特
    • 2.1包含存储的元素
    • 2.2索引访问元素
    • 2.3固定尺寸
    • 2.4两维存储
  • 3。适用性
    • 3.1situaã§或Academica
    • 3.2空间£o real
  • 4。包括£o

我希望您喜欢,任何东西都是反馈。

=========================================================== ==

1.介绍

有一天,当我看到状态(我刚刚交付了KKKK应用程序)时,我从一个看到有关矢量和阵列的遏制的人那里进行了消息,我有一个想法详细阐述包含有关学术适用性的内容透视和市场。毫无疑问,让我们开始。

1.1你£o?

如果您不知道这些东西是什么,我将首先给您定义。柔软的?让我们走。

矩阵和向量是数据结构,允许存储一组值在变化中的值

学术定义

这个定义很有趣,我认为我们可以留下来。 “啊,但是我不知道什么是数据结构!”,所以有一个苛刻的解释:不是在计算机上存储和组织信息的方法。好吧,现在您知道什么是...至少有什么是KKK。

1.2是为了什么?

矩阵和阵列是以有组织的方式组织和操纵数据的一种机制,因此它是一种形式。

您甚至可以思考:“但是这并不是那么简单,这是不可能的。是。

“但是卢卡斯,我需要每个人更具体的东西。”,好吧,我会为您提供帮助。

数组:用于将同一类型的值存储在有序列表中,其中每个值都通过数字标识。

矩阵:SAN作为多维阵列,即它们用于将值存储在具有两个或多个维度的表中。

矩阵通常最复杂,一般可以理解,但是让我在帖子过程中更好地了解这一点。

1.3如何完成?

对于这篇文章,我将使用Java,但是您可以自由地尝试使用偏好语言的示例。

示例_1:您正在详细阐述一个系统,用于管理被邀请参加非常亲密的亲戚结婚的人(您正在付款)。您正在安静地编程,您会发现巨大的压力,您需要列出将出现的人的名字列表,然后在控制台1 by1上打印1。 >

让我们去实施的想法...

第一个想法:

ideia_1

这个想法并不酷,我们正在伤害不重复的原则,我们正在明确造成恶化。不会再有有趣的想法吗?

第二个想法:

ideia_2

“我们的,我对你所做的一切都不了解!

我们将开始从第5行中理解事物,在其中我们有String convidados[] = new String[5],这意味着我们创建了一个包含M 5字符串的小盒子,“盒子??对于被邀请的差异。

与这种理解的类比是想象您来找一个蛋糕交付的人。她可能会要求您成为吃饭的人数的第一个问题,因此蛋糕的大小将与数量成正比。这与数组的声明结构相似,您可以告知类型和数量。

第6行8行的

您可以看到它根据下图发生了每个位置的分配。

imagem_memoria

“等等...从0?为什么????”

在阵列中以0开始使用索引的来源广泛归因于丹麦计算的语言学家和科学家克里斯汀·尼加德(Kristen Nygaard),《模拟程序语言语言》的共同发入者,在此公约中引入了此公约语言模拟的早期暂定报告67,于1967年出版。

使用0 0的另一个可能原因是,它们允许FanMulas计算元素的成员更简单,更有效,因为无需添加地址的基本位移。这种选择也可能受到使用0的数学惯例的影响。

值得注意的是,并非所有编程语言都使用0用于数组,有些使用base 1或其他约定。

启动代码habiles,在我们的koud1中,我们可以看到两个非常有趣的事物,即convidados.length,用于采用数组的总尺寸。 ,也就是说,请乘坐i。

的客人

obs :它可能是一个有效的技术

2.caracterãsticas

技术领域的所有内容都有特殊性,这是针对orientação a objetos,功能程序,反应性编程等范式。因此,我们可以开始谈论一些特征点。

2.1基本存储

当我们说元素诱m数组或矩阵时,这意味着元素存储在相邻记忆的位置,一个apost。这很重要,因为它允许访问元素是粗鲁和高效的。

“我有点明白,但是您能为我提供任何示例吗?”让我们走。

situa㧧o:
想象一下,您有一个带有书籍收藏的架子。如果您按字母顺序组织书籍,并在每本书之间留有空白空间,那么很难快速找到一本特定的书。但是,如果您以字母顺序将所有书籍放在一起,而无需留空空间,那么找到您要寻找的书将更加幻想。

这类似于包含数组和矩阵的存储。

此外,该存储包含还使处理器更幻想访问数组或矩阵元素。这是因为处理器可以访问时间成员的记录,而不必在内存的不同位置寻找元素。好像处理器可以一次从架子上拿一组书籍,而不必一次在不同地方拿一本书。

疯狂吗?我不认识你,但我觉得它很有轰动。

2.2索引访问元素

要更好地了解索引访问的工作原理,让我们回到架子上的书籍示例。如果您在字母内组织了书籍,并且没有空的空间,则可以使用标题的第一个字母来快速找到一本特定的书作为参考。例如,如果您想找到“ Dom Casmurro”一书,则可以直接转到架子的“ D”并查找这本书。

如果您无法在您的脑海中可视化它,则基本上是这样的:

fluxograma_pratileira

在阵列或矩阵中,迷子或位置的工作原理与本书的第一个字母相同。数组或矩阵的每个元素都存储在特定位置,该位置由离子或位置识别。例如,在整数数组中,第一个元素存储在位置0中,第二个元素在位置1,第三个位置2等。p> p>

当我们要访问数组或矩阵的特定元素时,我们会使用相应的位置或位置。例如,如果我们要访问整个upperraway阵列的第三个元素,我们使用ãndice2,该元素对应于阵列位置2。

索引访问很重要,因为它允许我们以粗略有效的方式访问数组或矩阵的特定元素。我们可以使用离子或位置直接进入相应位置。

,而不是传播数组或矩阵的所有元素。

2.3固定尺寸

具有固定尺寸的数组或矩阵是具有突出元素的数。在执行程序期间无法更改此大小,即从创建数组或矩阵的那一刻就修复了。

理解固定尺寸概念的类比是鞋盒的概念。想象一下,您需要组织一个家庭鞋系列,并决定使用鞋盒存储它们。如果您选择不同尺寸的盒子,则可能会以有组织和高效的方式储存鞋子。另一方面,如果您选择固定尺寸的盒子,则可以以有序和标准化的方式容纳每双鞋,而不会浪费空间。

同样,当使用固定尺寸阵列或矩阵时,我们可以保证所有元素将以有组织的标准化方式存储,占据已知且可预测的成员空间。这使其更具狂热的访问和操纵元素,因为我们不必担心数组或矩阵大小的变化。

但是,重要的是要注意固定尺寸可以限制程序的灵活性。如果我们需要存储比固定尺寸允许的更多元素,则有必要创建一个具有更大尺寸的新数组或矩阵并复制前阵列元素。这可以生成内存和处理的开销。

2.4两维存储

理解两个维存储的一种方法是想象一个表或电子表格。如果您使用电子电子表格(例如Excel)工作,则会知道它是在cã©lulas中组织的,该卢拉斯形成了带有线条和柱子的两个维网格。每个CT都可以存储一个值,例如数字,文本或风扇。

同样,在两个维矩阵中,这些元素在带有线和柱的网格中组织。每个元素都通过一对ãndices识别,一个元素到线上,一个用于列。例如,在具有3行和4列的矩阵中,我们可以使用ândices(1,2)访问第二行元素和第三列。

理解两个维度组织组织的一个类比是想象一个国际象棋委员会。板是一个带有8行和8列的矩阵,每个cion都可以包含格子peã或空为空。每个卢拉都通过一对对应于Cion的线和列来识别。

两个维存储允许使用矩阵来表示具有网格结构的信息,例如图像,表,地图等。此外,具有矩阵的数学操作,例如矩阵乘法,也基于两个维存储。

3.适用性

一个非常普遍的事情是编程学生不知道如何在学术生活和实际应用中应用阵列或阵列,以解决这个小问题 - 至少尝试 - 我会显示一些学术和真实的情况。

3.1学术状况

“填充矩阵M 3x3的键盘捕获值。Apons捕获打印矩阵创建的矩阵,并找到配对的数量NO。和NO的量。

有多种解决这个问题的方法,但是我提出了以下解决方案:

import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int[][] matriz = new int[3][3];
    int pares = 0, impares = 0;

    // Captura os valores do teclado para preencher a matriz
    for (int linha = 0; linha < matriz.length; linha++) {
      for (int coluna = 0; coluna < matriz[linha].length; coluna++) {
        System.out.print("Digite o valor da posição [" + linha + "][" + coluna + "]: ");
        matriz[linha][coluna] = scanner.nextInt();
      }
    }

    // Imprime a matriz criada
    System.out.println("\nMatriz criada:");
    for (int linha = 0; linha < matriz.length; linha++) {
      for (int coluna = 0; coluna < matriz[linha].length; coluna++) {
        System.out.print(matriz[linha][coluna] + "\t");
      }
      System.out.println();
    }

    // Conta a quantidade de números pares e ímpares na matriz
    for (int linha = 0; linha < matriz.length; linha++) {
      for (int coluna = 0; coluna < matriz[linha].length; coluna++) {
        if (matriz[linha][coluna] % 2 == 0) {
          pares++;
        } else {
          impares++;
        }
      }
    }

    // Imprime a quantidade de números pares e ímpares na matriz
    System.out.println("\nQuantidade de números pares na matriz: " + pares);
    System.out.println("Quantidade de números ímpares na matriz: " + impares);
  }
}

对于某些人来说,这可能是一种非常复杂的方式,是的,它具有复杂性,声称它在for Chanded中并不复杂是谎言。您可以在以后更平静地尝试以这种方式理解,因为这只是学术适用性的一个例证。

3.2真实情况

“您正面临着一个名为'Betinho Construction'的公司的旧系统,在此应用程序中,您需要在数据库中实施,并仅返回该公司可以拥有的100个客户”

好...我不会在这里遵循SRP等职责的最佳隔离实践,即使我只希望您可以使用何时使用您可以使用。P>

遵循我的解决方案:

public class ClienteDAO {
  public Cliente[] buscaClientes() {
    try {
      // Conecta ao banco de dados
      Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/meubanco", "usuario", "senha");

      // Busca todos os clientes da tabela
      Statement stmt = conn.createStatement();
      ResultSet rs = stmt.executeQuery("SELECT * FROM clientes");

      // Cria um array de objetos Cliente e preenche com os registros obtidos do banco de dados
      Cliente[] clientes = new Cliente[100]; // Suponha que a tabela tem no máximo 100 registros
      int i = 0;
      while (rs.next()) {
        int id = rs.getInt("id");
        String nome = rs.getString("nome");
        int idade = rs.getInt("idade");
        Cliente cliente = new Cliente(id, nome, idade);
        clientes[i++] = cliente;
      }

      // Fecha a conexão com o banco de dados
      conn.close();

      //retorna todos os clientes buscados
      return clientes;
    } catch (SQLException e) {
      e.printStackTrace();
    }
  }
}

如您所见,这是一个在真实情况下如何工作的下降示例。

“啊,卢卡斯,但是如今还有其他结构,例如p koud5,HashSet等,因为它会在现实生活中吗?”在许多情况下,某人的技术无法适应所提供的问题,但仍然提供了解决方案。发生了,我并不是说这个人是程序员,我是说项目中可能有一种弹药的补品,在纠正某些内容之前,您必须了解场景。

4.找到£o

准备好了,我们看到了它是什么,它是什么,何时使用,您可以找到哪些上下文等。这是一项小型研究,尽管您仍然发现它很长,但我试图成为最可能的事情,希望您能成功学习,这就是。我们在另一篇文章中。

bibliografia
费雷拉(Nickerson)。等级01-矢量和数组。可在以下网址获得:http://docente.ifrn.edu.br/nickersonferreira/disciplinas/programacao-estruturada-e-orientada-a-objetos/aula-01-vetores-e-matrizes/view。访问:4月4日。 2023.
Silva,Vincius Gusman£o Pereira da。数据结构。 Paulo:Novatec Publisher,2013年。