如果你有多个数据元素,你可以考虑学习序列这种数据结构。这一节将为你展示怎样创建、使用和比较序列,以及访问序列的子集——切片(子序列)。
Contents
- Creating Sequences
- Creating Sequences with Boolean Expressions
- Accessing Sequence Items
- Inserting Items into a Sequence
- Deleting Items from a Sequence
- Reversing the Items in a Sequence
- Comparing Sequences
- Using Sequences Slices
Creating Sequences
创建序列
除了5种基本数据类型之外,JavaFX也提供了序列这种数据结构。序列代表着对象的有序列表,序列中的对象称为项(item,或译为元素)。序列以方括号声明,每一数据项用逗号分割。
创建序列的一种方法是显式地列出它的每一项。每一项用逗号分割,列表用方括号括起来。下面是一个例子:
var weekDays = ["Mon","Tue","Wed","Thu","Fri"];
声明了一个序列并把它赋值给变量weekDays。编译器知道我们要建一个字符串序列,因为序列中的项都是字符串。如果序列中的项是整型(例如,var nums = [1,2,3];),编译器就会认为我们希望创建一个整数的序列。
你也可以显式地指明一个序列的类型,在变量类型后面加一个[]:
var weekDays: String[] = ["Mon","Tue","Wed","Thu","Fri"];
这将告诉编译器变量weekDays将接纳一个字符串序列(跟单一的字符串相对照)。
序列也可以嵌套在其他序列中:
var days = [weekDays, ["Sat","Sun"]];
在这种情况下,编译器自动将这种嵌套的序列转化为一个序列,使上面的语句等价于:
var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
创建算术序列时有一种简写格式。如创建包含1到100的序列,用下面的格式:
var nums = [1..100];
Creating Sequences with Boolean Expressions
用布尔表达式创建序列
你可以用布尔表达式,来声明一个为已知序列的子集的序列。
var nums = [1,2,3,4,5];
创建第二个序列(基于第一个序列项),仅包括大于2的数字,用下面的代码:
var numsGreaterThanTwo = nums[n | n > 2];
上面的代码可以用这样的话表达:在num序列里选择所有值大于2的项,然后赋给名为numsGreaterThanTwo的新序列。
Accessing Sequence Items
访问序列项
序列项可以通过索引号来访问,索引号从0开始。
var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
println(days[0]);
println(days[1]);
println(days[2]);
println(days[3]);
println(days[4]);
println(days[5]);
println(days[6]);
屏幕上输出如下:
Mon
Tue
Wed
Thu
Fri
Sat
Sun
同时,你可以确定序列的大小,用sizeof操作符:
sizeof days
下面的代码向屏幕上输出“7”。
var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
println(sizeof days);
Inserting Items into a Sequence
增加项
insert关键字允许你向序列中增加一个元素,在特定的元素之前,或之后。
--------------------------------------------------------------------
注意:实际上,序列是不可变的,这意味着一旦创建序列就不可更改。当修改序列的时候,例如插入或删除序列项,后台创建了一个新序列,并赋给原来的变量,给人的印象就是序列被修改了。
--------------------------------------------------------------------
让我们通过再次创建days序列来做一下探讨:
var days = ["Mon"];
此时,序列仅包含一个元素,“Mon”。
用insert和into关键字插入“Tue”到序列的结尾。
insert "Tue" into days;
类似的方法,增加“Fri”,“Sat”,“Sun”。
insert "Fri" into days;
insert "Sat" into days;
insert "Sun" into days;
序列包含了:“Mon”,“Tue”,“Fri”和“Sun”。
同样可以用insert和before关键字将元素插入特定的项前面。牢记索引号从0开始,在当前的序列里,“Fri”在索引号为2的位置。因此,我们可以将“Thu”插入到“Fri”前面,如下:
insert "Thu" before days[2];
现在序列包含:“Mon”,“Tue”,“Thu”,“Fri”,“Sat”。
为了在“Tue”后面加入“Wed”,我们可以使用insert和after关键字:
insert "wed" after days[1];
现在序列包含了一周的所有天:“Mon”,“Tue”,“Wed”,“Thu”,“Fri”,“Sat”,“Sun”。
Deleting Items from a Sequence
删除项
使用delete和from关键字可以很容易地从序列中删除项:
delete "Sun" from days;
序列现在包含:“Mon”,“Tue”,“Wed”,“Thu”,“Fri”,“Sat”。
你也可以根据索引的位置删除元素。下面的代码从序列中删除“Mon”(记住第一个元素的索引号为0)。
delete days[0];
从一个序列中删除所有的项,使用delete关键字加序列名:
delete days;
注意,delete操作只是移除序列里的项,并不删除days变量。你仍可以访问days变量并向它插入新的项。
Reversing the Items in a Sequence
转置项
你可以简单的转置项,通过reverse操作符:
var nums = [1..5];
reverse nums; // returns [5, 4, 3, 2, 1]
Comparing Sequences
比较序列
很多时候需要对比序列是否相等。序列通过“值”来判断:如果序列长度相等,并且项的值也相等,那么序列相等。
测试一下,创建两个具有相同内容的序列:
var seq1 = [1,2,3,4,5];
var seq2 = [1,2,3,4,5];
println(seq1 == seq2);
表达式“seq1 == seq2”的值为true,因为项的数量和值都相等。屏幕上打印出“true”。
改变其中一个序列,使他们的长度不相同:
var seq1 = [1,2,3,4,5];
var seq2 = [1,2,3,4,5,6];
println(seq1 == seq2);
这时输出为“false”,因为第二个序列比第一个序列的长度长,因此不相等。
也可以通过改变元素的值来使序列不相等,即使序列有相同的长度:
var seq1 = [1,2,3,4,5];
var seq2 = [1,3,2,4,5];
println(seq1 == seq2);
再次打印出“false”,因为序列不等。
Using Sequence Slices
使用序列切片(子序列)
序列切片提供了访问序列的局部内容的功能。
seq[a..b]
这样的语法可以访问从索引号a开始到索引号b结束的序列项。下面创建了一个weekend序列只包含项“Sat”,“Sun”。
var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
var weekend = days[5..6];
seq[a..<b]
使用“<”字符将得到从a开始(包含a)到b结束(不包含b)的序列。我们可以在days基础上创建一个包含从“Mon”到“Fri”的序列。
var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
var weekdays = days[0..<5];
seq[a..]
省略第二个索引号,访问的是从a开始到序列结束的所有项。下面的例子同样创建了weekend序列:
var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
var weekend = days[5..];
seq[a..<]
最后,你可以用“<”来访问从a开始到序列结束,但不含最后一个元素的序列。
var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
var days2 = days[0..<];
This version creates a days2 sequence consisting of the items "Mon" through "Sat".
这将创建一个包含从“Mon”到“Sat”的序列days2。
分享到:
相关推荐
在这个“javafx显示多个窗口以及javafx多窗口之间数据交互传输项目原文件”中,我们可以学习到如何在JavaFX中创建并管理多个窗口,以及在这些窗口之间进行数据的交换和传递。 1. **创建JavaFX窗口** 在JavaFX中,...
- **声明变量**:解释变量的概念及如何在JavaFX Script中声明变量。 - **调用函数**:演示如何定义和调用函数。 - **Lesson 3: 使用对象** - **对象介绍**:介绍JavaFX Script中的对象概念。 - **对象字面量声明...
在JavaFX中,可以实现`Serializable`接口来标记一个类可以被序列化。开发者可能自定义了一个类来表示画布上的形状,包括其几何属性和颜色等,然后使用`ObjectOutputStream`和`ObjectInputStream`进行序列化和反序列...
FX Gson是一组类型适配器,用于将JavaFX属性序列化为其值,并将值反序列化为属性。 FX Gson只需删除属性“包装”,然后将值的序列化委托给Gson。 这意味着在序列化该类型的属性时,将考虑您添加到Gson的有关该类型...
《深入学习JavaFX脚本编程语言》:现代GUI应用程序开发的高效工具 一、JavaFX脚本编程语言概述 JavaFX脚本编程语言是专为创建具有现代化图形用户界面(GUI)的应用程序而设计的一种高级编程语言。它以其声明式的...
JavaFX从Java 8版本开始内置在JDK中,但从Java 11开始被剥离,需要单独安装OpenJFX库。对于不同操作系统,如Windows、Mac OS和Linux,安装方式略有差异。 5. 开发工具 开发JavaFX应用,可以使用Eclipse、IntelliJ...
在这个项目中,开发者利用JavaFX提供的丰富的图形和动画功能,为玩家提供了类似经典泡泡龙游戏的体验。JavaFX是Oracle公司推出的用于构建桌面、移动和Web应用的现代Java GUI框架,它支持CSS样式和硬件加速,使得创建...
JavaFX可以与Java的序列化机制结合,或者使用数据库技术来实现数据的持久化。 7. **游戏逻辑**:游戏的核心是其逻辑,包括战斗系统、任务系统、NPC交互等。开发者可能需要使用到数据结构(如队列、栈)和算法(如A*...
- 序列是JavaFX中的一种特殊类型,类似于数组,但更加强大,支持更多的操作。 6. **脚本变量** - 脚本变量用于存储数据。JavaFX脚本中的变量声明可以省略类型,编译器会根据赋值自动推断类型。 7. **函数** - ...
- **实践意义**:研究这些代码片段有助于识别.fx 源文件中的模式,加深对新概念的理解。 #### 五、总结 - **核心价值**:JavaFX Script 通过其简洁的语法、强大的数据绑定能力以及丰富的视觉效果,极大地简化了富...
教程目录 教程概述 1. 入门 2. 编写脚本 3. 使用对象 4. 数据类型 5. 序列 6. 运算符 7. 表达式 8. 数据绑定和触发器 9. 编写您自己的类 10. 软件包 11. 访问修饰符
- 支持包含在法语引用符`<<>>`内的任何字符串序列作为标识符。 ##### 3.2 常量 JavaFXScript使用`def`修饰符定义常量,一旦定义之后,其值不能再改变。例如: ```javafx def a = 1; ``` 这里定义了一个名为`a`的...
在JavaFX中,你可以利用其强大的图形和媒体支持,以及高效的2D和3D渲染,来创建具有高级视觉效果的应用。 一、JavaFX基础 JavaFX的基础是它的 scenegraph 模型,这是一个基于对象的图形模型,允许开发者以层次结构...
Java画图工具是一种基于Java语言开发的图形渲染库,它结合了Highstock和AngularJS以及JavaFX技术,为开发者提供了一种便捷的方式来在各种项目中集成高质量的数据可视化功能。Highstock是一个JavaScript图表库,专为...
在“javaFX实验,实现风扇动画”这个项目中,我们将深入探讨如何使用JavaFX来创建一个具有交互性的风扇动画,包括改变风扇的方向和转速。 首先,我们需要理解JavaFX的基础知识。JavaFX是Oracle公司在Java SE 7中...
首先,我们来深入理解JavaFX中的关键概念。JavaFX的图形API允许开发者使用 scenegraph(场景图)这一数据结构来构建用户界面。场景图由节点构成,这些节点可以是简单的形状,如矩形、圆形,也可以是复杂的组合,如...
在这个项目中,“Chess-JavaFX”是一款使用JavaFX技术开发的国际象棋游戏,它展示了JavaFX在游戏开发中的应用。下面将详细介绍这个项目的相关知识点。 一、JavaFX基础 JavaFX提供了丰富的API,可以方便地创建出...
在这个“JavaFx写的2048小游戏源码”中,我们可以学习到如何使用JavaFX来实现这样一个趣味性的游戏。 首先,源码会包含一个主类,这个主类通常继承自`Application`,这是JavaFX程序的入口点。在`start()`方法中,...
JavaFX提供了丰富的动画和视觉效果库,使开发者能够轻松地为应用添加动态元素,如平滑的过渡、复杂的动画序列和视觉特效,从而提升用户体验。 ### 事件处理 为了使GUI应用具有交互性,JavaFX提供了一套完整的事件...
- LCS问题的基本思想是:通过比较两个序列中的元素,构建一个二维的动态规划表,其中每个单元格的值表示对应位置的两个子序列的LCS长度。 - 动态规划方程:如果序列X[i]与序列Y[j]匹配,则dp[i][j] = dp[i-1][j-1]...