JAVA基础07一维数组

STM32铅酸蓄电池内阻测试仪的交流阻抗测量与数据采集优化 本文深入探讨了基于STM32的铅酸蓄电池内阻测试仪设计,重点解析了交流阻抗测量原理与数据采集优化方案。通过采用1kHz交流小信号注入和数字相敏检波技术,实现对电池欧姆内阻的无损精准测量,并详细介绍了硬件前端调理、ADC过采样及系统标定等关键优化手段,有效提升了测量精度与稳定性。 阅读详情

7. 一维数组

7.1 数组的基础知识

一旦数组被创建,它的大小是固定的。使用一个数组引用变量,通过下标来访问数组中的元素。

7.1.1 声明数组变置

为了在程序中使用数组,必须声明一个引用数组的变量,并指明数组的元索类型。下面是声明数组变量的语法:

elementType[] arrayRefVar;(元素类型口数组引用变量 ;)

elementType 可以是任意数据类型,但是数组中所有的元素都必须具有相同的数据类型。例如:下面的代码声明变量 myList,它引用一个具有 double 型元素的数组。

double[] myList;

注意:也可以用 elementType arrayRefVar[ ])(元素类型数组引用变量[ ]) 声明数组变量。这种来自 C/C++ 语言的风格被 Java 采纳以适用于 C/C++ 程序贞。推荐使用 elementType[] arrayRefVar (元素类型 [ ]数组引用变量)风格。

 

7.1.2 创建数组

不同于基本数据类型变量的声明,声明一个数组变量时并不在内存中给数组分配任何空间。它只是创建一个对数组的引用的存储位置。如果变量不包含对数组的引用,那么这个变量的值为 null。除非数组已经被创建,否则不能给它分配任何元素。声明数组变量之后,可以使用下面的语法用 new 操作符创建数组,并且将它的引用赋给一个变量:

arrayRefVar = new e1ementType[arraySize]:

这条语句做了两件事情:1 ) 使用 new elementType[arrayS"ize]创建了一个数组;2 ) 把这个新创建的数组的引用赋值给变暈 arrayRefVar。

声明一个数组变量、创建数组、然后将数组引用赋值给变量这三个步驟可以合并在一条语句里,如下所示:

elementType[] arrayRefVar = new elementType[arraySize];

(元素类型[ ]数组引用变量 =new 元素类型[ 数组大小]; )

或

elementType arrayRefVar[] = new e1ementType[arraySize];

(元素类型数组引用变量 =new 元素类型[ 数组大小];)

下面是使用这条语句的一个例子:

double[] myList = new double[10]:

这条语句声明了数组变量 myList, 创建一个由 10 个 double 型元素构成的数组,并将该数组的引用赋值给 myList。使用以下语法给这些元索赋值:

arrayRefVar[index] = value;

例如,下面的代码初始化数组:

myList[0] = 5.6;
myList[l] = 4.5;
myList[2] = 3.3;
myL1st[3] = 13.2;
myList[4] = 4.0;
myList[5] = 34.33;
myList[6] = 34.0;
myList[7] = 45.45;
myL1st[8] = 99.993;
myList[9] = 11123;

注意:一个数组变量看起来似乎是存储了一个数组,但实际上它存储的是指向数组的引用。严格地讲,一个数组变量和一个数组是不同的,但多教情况下它们的差别是可以忽略的。因此,为了简化,通常可以说 myList 是一个数组,而不用更长的陈述:myList 是一个含有 10 个 double 型元素数组的引用变量。

 

7.1.3 数组大小和默认值

当给数组分配空间时,必须指定该数组能够存储的元素个数,从而确定数组大小。创建数组之后就不能再修改它的大小。可以使用 arrayRefVar.length 得到数组的大小。例如: myList.length 为 10。

当创建数组后,它的元素被赋予默认值,数值型基本数据类型的默认值为 0, char 型的默认值为 '\u0000',boolean 型的默认值为 false。

 

7.1.4 访问数组元素

数组元素可以通过下标访问。数组下标是基于 0的,也就是说,其范围从 0 开始到 arrayRefVar.length -1结束。例如,在上图的例子中,数组 myList 包含 10 个 double 值,而且下标从 0 到 9。

数组中的每个元素都可以使用下面的语法表示,称为下标变量 (indexed variable) :

arrayRefVar[index];(数组引用变量[下标 ];)

例如:myList[9] 表示数组 myList 的最后一个元素。

警告:一些语言使用圆括号引用数组元素,例如 myList(9)。而 Java 语言使用方括号,例如 myList[9]。

创建数组后,下标变量与正常变量的使用方法相同。例如:下面的代码是将 myList[0] 和 myList[l]的值相加赋给 myList[2]。

myList[2] = myList[0] + myList[l];

下面的循环是将 0 赋给 myList[0], 1赋给 myList[1], ..., 9 赋给 myList[9]:

for (int i = 0;i < myList.length; i++){
myList[i] = i; 
}

 

7.1.5 数组初始化语法

Java 有一个简捷的标记,称作数组初始化语法,它使用下面的语法将声明数组、创建数组和初始化数组结合到一条语句中:

elementType[] arrayRefVar = {valueO, valuel, valuek};
(元索类型 [] 数组引用变量={值 0,值 1,... 值 k};)

例如:

double[] myList = {1.9, 2.9, 3.4, 3.5};

这条语句声明、创建并初始化包含 4 个元素的数组 myList, 它等价于下列语句:

double[] myList = new double[4];
myList[0] = 1.9;
myList[l] = 2.9;
myList[2] = 3.4;
myList[3] = 3.5;

警告:数组初始化语法中不使用操作符 new。使用数组初始化语法时,必须将声明、创建和初始化数组都放在一条语句中。将它们分开会产生语法错误。因此,下面的语句是错误的:

double[] myList;
myList ={1.9, 2.9, 3.4, 3.5};

 

7.1.6 处理数组

处理数组元素时,经常会用到 for 循环,理由有以下两点:

1 ) 数组中所有元素都是同一类型的。可以使用循环以同样的方式反复处理这些元素。

2 )由于数组的大小是已知的,所以很自然地就使用 for 循环。

 

7.1.7 foreach 循环

Java 支持一个简便的 for 循环,称为 foreach 循环,即不使用下标变量就可以顺序地遍历整个数组。例如,下面的代码就可以显示数组 myList 的所有元素:

for (double e: myList) {
System.out.println(e); 
}

此代码可以读作 “ 对 myList 中每个元素 e 进行以下操作” 。注意,变量 e 必须声明为与 myList 中元素相同的数据类型。

通常,foreach 循环的语法为:

for (elementType element: arrayRefVar) {
// Process the element
}

但是,当需要以其他顺序遍历数组或改变数组中的元素时,还是必须使用下标变量。

警告:越界访问数组是经常会出现的程序设计错误,它会抛出一个运行错误 ArraylndexOut OfBoundsException。为 了 避 免 错 误 的发生,在使用时应确保所使用的下标不超过 arrayRefVar.length -1。

程序员经常错误地使用下标1幻用数组的第一个元素,但其实第一个元素的下标应该是 0。这称为下标过 1 错误(off - by - one error)。它是在循环中该使用 <的地方误用 <= 时会犯的错误。例如,下面的循环是错误的:

for (int i = 0;i <= list.length;i++)
System.out.print(list[i] + "");

应该用 <替换 <=。

 

 

7.2 数组的复制

要将一个数组中的内容复制到另外一个中,你需要将数组的每个元素复制到另外一个数组中。

在程序中经常需要复制一个数组或数组的一部分。这种情况下,你可能会尝试使用赋值语句(=), 如下所示:

list2 = list1;

该语句并不能将 listl引用的数组内容复制给 list2, 而只是将listl的引用值复制给了 list2。在这条语句之后,listl和 list2 都指向同一个数组,如下图所示。list2 原先所引用的数组不能再引用,它就变成了垃圾,会被 Java 虚拟机自动收回(这个过程称为垃圾回收)。

在 Java 中,可以使用賦值语句复制基本数据类型的变量,但不能复制数组。将一个数组变量赋值给另一个数组变量,实际上是将一个数组的引用复制给另一个变量,使两个变量都指向相同的内存地址。

复制数组有三种方法:

  • 1 ) 使用循环语句逐个地复制数组的元素。
  • 2 ) 使用 System 类中的静态方法 arraycopy。
  • 3 )使用 clone 方法复制数组。

可以使用循环将源数组中的每个元素复制到目标数组中的对应元素。例如,下述代码使用 for 循环将 sourceArray 复制到 targetArray:

int[] sourceArray = {2 , 3, 1, 5, 10};
int[] targetArray = new int[sourceArray.length]:
for Cint i = 0: i < sourceArray.lenath: i++) {
targetArray[i] = sourceArray[i]; 
}

另一种方式是使用 java.lang.System 类的 arraycopy 方法复制数组,而不是使用循环。 arraycopy 的语法如下所示:

arraycopy(sourceArray, srcPos, targetArray, tarPos, length);

其中,参数 srcPos 和 tarPos 分别表示在源数组 sourceArray 和目标数组 targetArray 中的起始位置。从 sourceArray 复制到 targetArray 中的元素个数由参数 length 指定。例如,可以使用下面的语句改写上述循环:

System.arraycopy(sourceArray, 0, targetArray, 0,sourceArray.length);

arraycopy 方法没有给目标数组分配内存空间。复制前必须创建目标数组以及分配给它的内存空间。复制完成后,sourceArray 和 targetArray 具有相同的内容,但占有独立的内存空间。

注意:arraycopy 方法违反了 Java 命名习惯。根据命名习慣,该方法应该命名为 arrayCopy(即字母 C 大写)。

 

 

7.3 将数组传递给方法

当将一个数组传递给方法时,数组的引用被传给方法。正如前面给方法传递基本数据类型的值一样,也可以给方法传递数组。例如,下面的方法显示 int 型数组的元素:

public static void printArray(int[] array){
    for (int i = 0;i < array.length;i++ ){
        System.out.print(array[i] + ""); 
    } 
}

可以通过传递一个数组调用上面的方法。例如,下面的语句调用 PrintArray 方法显示 3、1、2、6、4 和 2:

printArrayCnew int[]{3, 1, 2, 6, 4, 2};

注意:前面的语句使用下述语法创建数组:

new elementType[ ]{value0, value1, … ,valuek};

该数组没有显式地引用变量,这样的数组称为匿名数组(anonymous array)。

Java 使用按值传递(pass - by - value)的方式将实参传递给方法。传递基本数据类型变量的值与传递数组值有很大的不同。

对于基本数据类型参数,传递的是实参的值。

对于数组类型参数,参数值是数组的引用,给方法传递的是这个引用。从语义上来讲,最好的描述就是参教传递的是共享信息(pass - by - sharing), 即方法中的数组和传递的数组是一样的。所以,如果改变方法中的数组,将会看到方法外的数组也变化了。

例如,采用下面的代码:

public class Test {
    public static void main(String[] args){
        int x = 1;//x represents an int value
        int[] y = new int[l0];// y represents an array of int values
        m(x , y); // Invoke m with arguments x and y
        System.out.println("x is " + x);
        System.out.print!n("y[0] is " + y[0]);
    }
    public static void m(int number, int[] numbers){
        number = 1001;// Assign a new value to number
        numbers[0] = 5555;// Assign a new value to numbers[0]
    }
}

显示

x is 1 
y[0] is 5SS5

你会觉得困惑,为什么在调用 m 之后 x 仍然是1, 但是 y[0]却变成了 SSSS。这是因为尽管 y 和 numbers 是两个独立的变量,但它们指向同一数组,如下图所示。当调用 m(x,y)时,x 和 y 的值传递给 number 和 numbers。因为 y 包含数组的引用值,所以,numbers 现在包含的是指向同一数组的相同引用值。

注意:数组在 Java 中是对象。JVM 将对象存储在一个称作堆(heap)  的内存区域中,堆用于动态内存分配。

 

 

7.4 从方法中返回数组

当从方法中返回一个数组时,数组的引用被返回。

可以在调用方法时向方法传递一个数组。方法也可以返回一个数组。例如,下面的方法返回一个与输人数组元素顺序相反的数组:

public static int[] reverse(int[] list) { 
    int[] result = new int[list.length]; 

    for (int i = 0, j = result.length - 1; 
         i < list.length; i++, j--) { 
        result[j]=l1st[i]; 
    }

    return result;
}

第 2 行创建了一个新数组 result, 第 4 ~7 行把数组 list的元素复制到数组 result 中。第 9 行返回数组。例如,下面的语句返回元素为 6、5、4、3、2、1的新数组 list2。

int[] listl = {1, 2, 3, 4, 5, 6};
int[] list2 = reverse(list1);

 

 

7.5 可变长参数列表

具有同样类型的可变长度的参数可以传递给方法,并将作为数组对待。可以把类型相同但个数可变的参数传递给方法。方法中的参数声明如下:

typeName… parameterName ( 类 型 名 … 参 数 名 )

在方法声明中,指定类型后紧跟着省略号(...)。只能给方法中指定一个可变长参数,同时该参数必须是最后一个参数。任何常规参数必须在它之前。

Java 将可变长参数当成数组对待。可以将一个数组或数目可变的参数传递给可变长参数。当用数目可变的参数调用方法时,Java 会创建一个数组并把参数传给它。

 

 

7.6 数组的查找

如果一个数组排好序了,对于寻找數组中的一个元素,二分查找比线性查找更加高效。

査找(searching) 是在数组中寻找特定元素的过程,例如:判断某一特定分数是否包括在成绩列表中。査找是计算机程序设计中经常要完成的任务。有很多用于査找的算法和数据结构。本节讨论两种经常使用的方法:线性查找(linear searching ) 和二分查找( binary searching)。

 

7.6.1 线性查找法

线性査找法将要査找的关键字 key 与数组中的元素逐个进行比较。这个过程持续到在列表中找到与关键字匹配的元素,或者査完列表也没有找到关键字为止。如果匹配成功,线性査找法返回与关键字匹配的元素在数组中的下标。如果没有匹配成功,则返回 -1。下列程序清单中的linearSearch 方法给出解决方案:

    LinearSearch.java
public class LinearSearch { 
/**The method for finding a key in the list */
    public static int linearSearch(int[] list, int key) { 
        for (int i = 0;i < list.length;i++){ 
            if (key = list[i]) {
                return i;
            }
        }
        return -1; 
    } 
}

为了更好地理解这个方法,对下面的语句跟踪这个方法:

int[] list = {1, 4, 4, 2, 5, -3, 6, 2};
int i = linearSearch(list, 4); // Returns 1 
int j- linearSearch(list, -4); // Returns -1 
int k - 1inearSearch(list, -3); // Returns 5

线性査找法把关键字和数组中的每一个元素进行比较。数组中的元素可以按任意顺序排列。平均来看,如果关键字存在,那么在找到关键字之前,这种算法必须与数组中一半的元素进行比较。由于线性査找法的执行时间随着数组元素个数的增长而线性增长,所以,对于大数组而言,线性査找法的效率并不高。

 

7.6.2 二分查找法

二分査找法是另一种常见的对数值列表的査找方法。使用二分査找法的前提条件是数组中的元素必须已经排好序。假设数组已按升序排列。二分査找法首先将关键字与数组的中间元素进行比较。

考虑下面三种情况:

  • 如果关键字小于中间元素,只需要在数组的前一半元素中继续査找关键字。
  • 如果关键字和中间元素相等,则匹配成功,査找结束。
  • 如果关键字大于中间元素,只需要在数组的后一半元素中继续査找关键字。

显然,二分法在每次比较之后就排除掉一半的数组元素,有时候是去掉一半的元素,有时候是去掉一半加 1 个元素。假设数组有个元素。为方便起见,假设 n 是 2 的幂。经过第1 次比较,只剩下 n/2 个元素需要进一步査找;经过第 2次比较,剩下(n/2)/2 个元素需要进— 步査找。经过 k 次比较之后,需要査找的元素就剩下 n/2k 个。当hl0g2n 时,数组中只剩 下 1 个元素,就只需要再比较丨次。因此,在一个已经排序的数组中用二分査找法査找一个元素,即使是最坏的情况,也只需要 login+l次比较。对于一个有 1024 (2^10 ) 个元素的数组,在最坏情况下,二分査找法只需要比较11次,而在最坏的情况下线性査找要比较 1023 次。

每次比较后,数组要査找的部分就会缩小一半。用 low 和 high 分别表示当前査找数组的第一个下标和最后一个下标。初始条件下,low 为 0, 而 high 为 list.length -1。让mid 表示列表的中间元素的下标。这样,mid 就是(low + high)/2。下图显示怎样使用二分法从列表{2,4, 7, 10,11, 4S, S0, 59, 60, 66, 69, 70, 79}中找出关键字 11。

现在知道了二分査找法是如何工作的。下一个任务就是在 Java 中实现它。不要急于给出一个完整的实现。逐步地实现这个程序,一次一步。可以从査找的第一次迭代开始,如下图a 所示。它将关键字 key 和低下标 low 为 0、髙下标 high 为 list.length -1的列表的中间元素进行比较。如果 key<list[nrid], 就将下标 high 设置为 mid -1;如果 key = list[mid], 则匹配成功并返回 mid; 如果 key>list[mid],就将下标 low 设置为 mid+1。

接下来就要考虑增加一个循环,实现这个方法重复地完成査找,如上图b 所示。如果找到这个关键字,或者当 low>high 时还没有找到这个关键字,就结束这个査找。

当没有找到这个关键字时,low 就是一个插入点,这个位置将插入关键字以保持列表的有序性。一种更实用的方法是返回插入点减去1。这个方法必须返回一个负值,表明这个关键字不在该序列中。可以只返回 - low 吗?答案是:不可以。如果关键字小于 list[0], 那么low 就是 0, -0 也是 0。这就表明关键字匹配 list[0]。一个好的选择是,如果关键字不在该序列中,方法返回 - low -1。返回不仅表明关键字不在序列中,而 且 还 给出了关键字应该插人的地方。

下面的表格列出当方法退出时 low 和 high 的值,以及调用该方法的返回值。

注意:线性查找法适用于在较小数组或没有排序的数组中查找,但是对大数组而言效率不高。二分查找法的效率较高,但它要求数组已经排好序。

 

 

7.7 数组的排序

假设要按升序排列一个数列。选择排序法先找到数列中最小的数,然后将它和第一个元素交换。接下来,在剩下的数中找到最小数,将它和第二个元素交换,依此类推,直到数列中仅剩一个数为止。下图显示如何使用选择排序法对数列{2,9,5,4,8,1,6}进行排序。

已经知道了选择排序法是如何工作的。现在的任务是用 Java 语言实现它。对初学者来说,很难在第一次尝试时就开发出完整的解决方案。开始编写第一次迭代的代码,找出数列中的最大数,将其与最后一个元素互换,然后观察第二次迭代与第一次的不同之处,接着是第三次,依此类推。通过这样的观察可以写出推广到所有迭代的循环。

for (int i = 0;i < list. length - 1; i++){
    select the smallest element in list[i...list.length-1];
    swap the smallest with list[i],if necessary; 
    // list[i] is in its correct position. 
    // The next iteration applies on list[i+l..list.length-1]
}

 

 

7.8 Arrays 类

java.util.Arrays 类包含一些实用的方法用于常见的數组操作,比如排序和查找。

java.util.Arrays 类包括各种各样的静态方法,用于实现数组的排序和査找、数组的比较和填充数组元素,以及返回数组的字符串表示。这些方法都有对所有基本类型的重载方法。

可以使用 sort 或者 parallelSort方法对整个数组或部分数组进行排序。例如,下面的代码对数值型数组和字符型数组进行排序。

double[] numbers = {6.0, 4.4, 1.9, 2.9, 3.4, 3.5};
java.util .Arrays.sort(numbers);// Sort the whole array
java.util .Arrays.parallelSort(numbers): // Sort the whole array
char[] chars = {'a', 'A', '4', 'F', 'D', 'P'};
java.util .Arrays.sort(chars, 1,3);// Sort part of the array
java.util .Arrays.parallelSort(chars, 1, 3); // Sort part of the array

可以调用sort(numbers)对整个数组 numbers 排序。可以调用sort(chars,1, 3)对从 chars[1]到 chars[3-1]的部分数组排序。如果你的计算机有多个处理器,那么 parallelSort 将更加高效。

可以采用二分査找法( binarySearch 方法)在数组中査找关键字。数组必须提前按升序排列好。如果数组中不存在关键字,方法返回 -( 插入点下标 +1)。例如,下面的代码在整数数组和字符数组中査找关键字:

int[] list = {2 , 4, 7, 10, 11, 45 , 50 , 59, 60, 66 , 69, 70, 79 } ;
System.out.println("l. Index is " +
java.util .Arrays.binarySearch(list, 11));
System.out.println("2. Index is " +
java.util .Arrays.binarySearch(list, 12));
char[] chars = {'a' , 'c' , 'g' , 'x' , 'y' , 'z' };
System.out.println("3. Index is " +
java.util .Arrays.binarySearch(chars, 'a'));
System.out.println("4. Index is " +
java.util .Arrays.binarySearch(chars, 't' ));

前面代码的输出为:

1. Index is 4 
2. Index is — 6 
3. Index is 0 
4. Index is — 4

可以采用 equals 方法检测两个数组是否相等。如果它们的内容相同,那么这两个数组相等。在下面的代码中,listl 和 list2 相等,而 list2 和 list3 不相等。

int[] listl = {2 , 4 , 7,  10};
int[] list2 = {2 , 4 , 7 , 10};
int[] Tist3 = {4 , 2 , 7 , 10};
System.out. println(java.uti1.Arrays.equals(listl, list2)); // true
System.out. println(java.uti1.Arrays.equals(list2, list3)); // false

可以使用 fill 方法填充整个数组或部分数组。例如:下列代码将 5 填充到 list1 中,将 8 填充到元素 list2[1] 到 list2 [5-1] 中。

int[] listl = {2 , 4, 7, 10};
int[] list2 = {2 , 4 , 7, 7, 7, 10};
java.util .Arrays.fiil (list1, 5); // Fill 5 to the whole array
java.util .Arrays.fiil (list2, 1, 5, 8); // Fill 8 to a partial array

还可以使用 toString 方法来返回一个字符串,该字符串代表了数组中的所有元素。这是一个显示数组中所有元素的快捷和简便的方法。例如,下面代码

int[] list = {2, 4, 7, 10};

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

显示 [ 2 , 4 , 7, 10]。

 

 

 

 

编译运算练习

1.数组遍历

 

 

2.数组线性查找

 

 

3.数组二分查找

 

 

4.数组扩容

 

 

5.数组选择排序

 

 

6.数组冒泡排序

 

 

7.数组插入(希尔)排序

 

手把手教你学Simulink——基于Simulink的固态变压器(SST)多级协同控制 摘要:本文详细介绍了基于Simulink的固态变压器(SST)多级协同控制方法。SST作为新一代智能电网核心设备,通过AC-DC整流、DC-DC隔离和DC-AC逆变三级架构实现电能高效转换。针对多级耦合难题,提出能量-功率协同控制策略:纵向解耦电压环与功率前馈,横向联动级间功率指令。在Simulink中搭建10kV/400V系统模型,实现直流母线电压波动<2%的动态性能。特别设计了负载突变时的三级协同机制,通过虚拟惯性算法和前馈控制实现快速响应。文章包含完整的建模步骤、控制推导和参数设置,为电力电子工 阅读详情

相关推荐

为什么你的PROFINET IRT同步性能不达标?等时模式常见配置误区盘点

本文深入剖析了PROFINET IRT等时模式同步性能不达标的常见原因。文章直击痛点,系统盘点了从硬件兼容性、拓扑组态、过程映像分区分配,到同步OB配置、时序参数调校及带宽管理等关键环节的配置误区,并提供了实用的诊断思路与性能优化清单,帮助工程师精准定位并解决同步抖动、时序混乱等难题。

ujm5678901的博客 457

数组的基本操作和一些比较简单的排序算法

数组的基本操作和一些比较简单的排序算法 假设创建如下数组: double [] mylist=new double[10]; 下面是一些处理数组的例子 随机初始化数组 //使用0.0到100.0之间,但小于100.0的随机初始化数组 for(int i=0;i<mylist.length;i++){ mylist[i]=Math.random()*100; } 使用输入值初始化数组 java.util.Scanner input=new java.util.Scanner(Syst

zhongyiit的博客 754

运算放大器电路仿真实践:从零实现完整示例

通过一个完整的运算放大器电路仿真示例,深入掌握电路仿真的关键步骤与技巧,帮助电子爱好者和工程师快速上手实际项目设计。

weixin_34725745的博客 1320

java android 数组_Android开发基础之Java 数组

Java 数组数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。Java 语言中提供的数组是用来存储固定大小的同类型元素。你可以声明一个数组变量,如 numbers[100] 来代替直接声明 100 个独立变量 number0,number1,....,number99。本教程将为大家介绍 Java 数组的声明、创建和初始化,并给出其对应的代码。声明数组变...

weixin_30240263的博客 628

Unity FPS射击控制系统:数据驱动的武器行为解耦方案

在Unity第一人称射击(FPS)开发中,射击系统常因输入、状态、行为耦合导致连发异常、换弹冲突与网络同步失准。其本质是缺乏对‘武器行为’(如后坐力曲线、弹药逻辑)与‘射击控制’(如输入合法性校验、冷却调度)的正交分离。本方案基于ScriptableObject实现WeaponData数据资产化,配合ShootingController状态机服务,达成输入解耦、运行时参数可调、协程受控、网络预测友好等工程目标。适用于中大型FPS项目架构升级与数据驱动转型,尤其解决Unity InputSystem与物理反馈

weixin_30536861的博客 613

Visual Studio 2022与Qt集成实战:解决Qt.props导入错误的完整指南

本文详细解析了在Visual Studio 2022中集成Qt开发时,如何解决因Qt.props文件导入失败导致的编译错误。文章从问题根源入手,深入剖析了Qt.props文件与QtMsBuild环境变量的关系,并提供了从检查文件存在性、配置环境变量到直接修改项目文件路径的完整排查与修复方案,帮助开发者快速恢复项目构建。

wdx01234567的博客 675

Java学习笔记(7)Single-Dimentional Arrays

7.2 Array Basics 数组是一组相同类型数据的集合。你不需要关心这些数据在内存中如何排列,因为Java不能通过地址访问元素。 7.2.1 Declaring Array Variables datatype[] arrayRefVar; //推荐写法 例如: double[] myList; //声明myList是数组变量(指针,在Stack中),但是目前数组为null,还

黄瓜菜生长的土地 2284

实现 PDF 添加水印的五种方式

PDF(Portable Document Format,便携式文档格式)是一种流行的文件格式,它可以在多个操作系统和应用程序中进行查看和打印。在某些情况下,我们需要对 PDF 文件添加水印,以使其更具有辨识度或者保护其版权。本文将介绍如何使用 Spring Boot 来实现 PDF 添加水印的方式。

逸轩 6474

java中length,length(),size()三者的区别

1.关于length 它针对的是对象是 【数组】 它是【属性】 例子: String [] myList={"str1","str2","str3"}; System.out.println(myList.length); 2.关于length() 它针对的是对象是 【字符串String】 它是【方法】 String [] myString="stringtest"; System.out.println(myList.length()); 3.关于size() 它针对的是对象..

Julian的博客 880

风光储互补微电网在偏远地区的应用实践:从建模到仿真全解析

本文深入解析了风光储互补微电网在偏远地区的应用实践,从系统设计到仿真建模全流程。通过Simulink等工具进行动态仿真,验证了系统在多种工况下的可靠性,并结合实际案例展示了其显著的经济和环保效益。文章为从业者提供了从技术路径到实施优化的全面指导。

weixin_29047545的博客 271

044.树莓派4B部署YOLO:从系统烧录到模型运行

《树莓派4B部署YOLOv8实战笔记》摘要:本文详细记录了在ARM架构树莓派4B上部署YOLOv8的全流程。关键点包括:必须使用64位系统并手动编译OpenCV(禁用FFMPEG、开启NEON优化);模型需在x86转换为TFLite格式(分辨率不超过320×320);推理代码使用tflite_runtime替代TensorFlow以减少内存占用;针对USB摄像头卡顿、内存泄漏等典型问题给出了解决方案。

2603_95664987的博客 169

【Java学习笔记】14.Java 数组

数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。

qq_62052372的博客 370

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Java入门学习——Day07 一维数组

在 Java 中,一维数组是一种存储固定大小的相同类型元素的结构。掌握一维数组的基本操作是 Java 编程的基础。

2303_79461916的博客 712

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

java多维数组给一维数组_07-JAVA一维数组及多维数组(2)

1. Java数组的定义:1) 和其它编程语言的数组定义基本相同,具有2要素,分别是类型一致(数组中的数据都是一种类型的)和定长(初始化时就已经确定长度,这也意味着数组的内存空间也确定了,即大小不变了);2) 在Java中数组类型也是一种引用类型,底层是用面向对象的类实现的;3) 定义数组:支持两种格式i. Java格式:type[] arrayName;ii. 传统的C语言格式:type arr...

weixin_40006963的博客 298

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Java语言程序设计——一维数组07

7.1 引言 7.2 数组的基础知识 7.2.1 声明数组变量 7.2.2 创建数组 7.2.3 数组大小和默认 7.2.4 访问数组元素 7.2.5 数组初始化语法 7.2.6 处理数组 7.2.7 foreach循环 7.3 示例学习:分析数字 7.4 示例学习:一副牌 7.5 数组的复制 7.6 将数组传递给方法 7.7 从方法中返回数组 7.8 示例学习:统计每个字母出现的次数 7.9 可变长参数列表 7.10 数组的査找 7.10.1 线性查找法 7.10.2 二分查找法 7.11 数组的排序 7

cyl16688 972

java中一维数组的基础语法,运用以及一些代码实例java学习日记2021-07-28

        一维数组 Array 1.java语言中的数组是一种引用数据类型,不属于基本数据类型。数组的父类是Object。 2.数组实际上是一个容器,可以同时容纳多个元素。(数组是一个数据的集合。) 3.数组当中可以存储基本数据类型的数据,也可以存储引用数据类型的数据。 4.数组因为是引用类型,所以数组对象实在堆内存当中。(数组是存储在堆当中。) 5.数组在内存方面是怎么样的一个图形? 连续的 6.对于数组当中如果存储的是java对象的话,实际上储存的是对象的引用(内存地址)。数组中不能直接存储jav

a1272159758的博客 423

2021-10-07 Java一维数组

Java数组 数组名:是符合Java标志符定义规则的用户自定义标志符; 数组的维数:用方括号"[]"的个数来确定。 数组元素的数据类型:可以是Java的任何数据类型,例如:基本类型(int,float,double,char等),类(class),接口(interface)引用类型等。 一维数组的声明 类型标志符 数组名[]; 类型标志符[] 数组名;(推荐) 例: int[] arr; String[] example; myClass[] mc; 注意:声明时不可在方括号内指定数组大小。int[1

qq_51307195的博客 303

07-JAVA一维数组及多维数组(1)

一维数组的声明 使用一个数据时,必须要对其进行声明,这个道理对于数组来说也一样,数组在使用之前也必须先声明。先看下面的代码,是如何声明一个变量的。 int a; 仔细分析一下:int 是指变量的数据类型,a 是指变量名,由变量的声明可以联系到数组的声明。 int a[]; 仔细分析一下:int 是指数组中所有数据的数据类型,也可以说是这个数组的数据类型,a[]表示数组...

weixin_30511107的博客 73

Java 一维数组进行反转 2021-07-08

public class Revers { public static void main(String[] args) { int arr[]=new int[]{1,2,3,4,5,6,7,8,9,10}; //创建反转排序类的对象 Revers Array=new Revers(); //调用对象方法 Array.sort(arr); } public void showArr(int arr[]

weixin_53028966的博客 378

Java语法基础学习笔记07-1-一维数组-声明-使用-异常

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、数组是什么二、一维数组声明2.1一维数组声明语法格式三、一维数组的使用3.1访问指定索引的元素3.2遍历数组四、数组的常见问题4.1数组空指针异常4.1.1空指针异常怎么理解呢?4.2数组下标越界异常总结 前言 一维数组是怎么定义的,怎么使用以及常用的操作。 一、数组是什么 数组是存储相同数据类型的对象,属于引用数据类型,必须创建该对象,指定长度,并初始化每个元素的值,才能够使用他。引用数据类型都是存放在对空间里面的,这.

江小蜗的博客 713

07-JAVA一维数组及多维数组(2)

1. Java数组的定义: 1) 和其它编程语言的数组定义基本相同,具有2要素,分别是类型一致(数组中的数据都是一种类型的)和定长(初始化时就已经确定长度,这也意味着数组的内存空间也确定了,即大小不变了); 2) 在Java中数组类型也是一种引用类型,底层是用面向对象的类实现的; 3) 定义数组:支持两种格式 i. Java格式:type[] ar...

weixin_30832405的博客 89

Java基础day07 - 一维数组及排序方式与二维数组

掌握 逐个比较取最大值。(1)数组中元素的筛选。二维数组的动态与赋值。

liang79096的博客 391

java二维数组遍历后转为一维数组_java基础学习笔记-day06-(2020/07/02-现在)

本文结构:java知识图谱概述java基础程序设计及语法java面向对象编程项目家庭记账软件The Java™ Tutorials​docs.oracle.comjava知识图谱概述java三个版本分类:javase :开发桌面级应用,有一部分是Java基础,是学习javaee的前提javaee :web后台、企业级应用javame :移动终端应用JDK、JRE、JVM的关系JDK=JRE+jav...

weixin_39677106的博客 173

创建maxarray类并利用该类的对象求一维数组重的最大值java_潭州Java中级班(day_11)Test01,Array07...

Test011.定义一个Car类,包括的属性有:品牌,颜色,重量,高度包括行为有:驾驶和装载,创建该类的对象,打印出该车的所有属性信息,调用该类的行为。/** 1.定义一个Car类,包括的属性有:品牌,颜色,重量,高度包括行为有:驾驶和装载,创建该类的对象,打印出该车的所有属性信息,调用该类的行为。*/classCar{privateString pinPai;privateString ...

weixin_39890289的博客 828

java程序设计基础第七章_Java语言程序设计(基础篇) 第七章 一维数组

第七章 一维数组7.2 数组的基础知识1.一旦数组被创建,它的大小是固定的。使用一个数组引用变量,通过下标来访问数组中的元素。2.数组是用来存储数据的集合,但是,通常我们会发现把数组看作一个存储具有相同类型的变量集合会更有用。7.2.1 声明数组变量1.为了在程序中使用数组,必须声明一个引用数组的变量,并指明数组的元素类型语法:elementType[] arrayRefVar;(数据类型[] 数...

weixin_33959449的博客 597

java一维数组基础

数组篇

Sashay_的博客 286
上一篇: JAVA基础06方法
下一篇: JAVA练习01
Fallen一down
博客等级 码龄7年 9粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值