??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲欧洲国产经精品香蕉网,亚洲中文字幕无码爆乳,亚洲最大AV网站在线观看 http://www.tkk7.com/asdtiang/category/43599.html交流学习JAVA zh-cn Fri, 15 Jan 2010 23:14:41 GMT Fri, 15 Jan 2010 23:14:41 GMT 60 JAVA FX语法学习----数据l定和触发器 http://www.tkk7.com/asdtiang/articles/309688.htmlasdtiang asdtiang Fri, 15 Jan 2010 06:35:00 GMT http://www.tkk7.com/asdtiang/articles/309688.html http://www.tkk7.com/asdtiang/comments/309688.html http://www.tkk7.com/asdtiang/articles/309688.html#Feedback 0 http://www.tkk7.com/asdtiang/comments/commentRss/309688.html http://www.tkk7.com/asdtiang/services/trackbacks/309688.html l定概述
bind
关键字将目标变量的gl定表达式的值相兌。绑定表辑ּ可以是某个基本类型的单倹{对象、函数的l果或表辑ּ的结果。以下几节分别提供每U绑定表辑ּ
的示例?/p>
在大多数实际的编E情况下Q需要通过数据l定使应用程序的囑Ş用户界面 (Graphical User
Interface, GUI) 与其底层数据同步。(GUI ~程?a >使用 JavaFX 构徏
GUI 应用E序的主题;下面我们用一些非可视的示例来说明基本的底层结构。)
让我们先看一个简单的CZQ下面的脚本变?x
l定到变?y
Q?
更改 x
的|然后输出 y
的倹{由于这两个变量l定在一P因此 y
g自动更新为新倹{?/p>
var x = 0;
def y = bind x;
x = 1;
println(y); // y now equals 1
x = 47;
println(y); // y now equals 47
h意,我们已将变量 y
声明?def
。这可防止Q何代码直?
变量赋|管允许该变量的值因l定 (bind
) 而更改)。在l定到对象时Q此U定仍适用Q请回顾?
用对?/a>中介l的 Address
Q:
var myStreet = "1 Main Street";
var myCity = "Santa Clara";
var myState = "CA";
var myZip = "95050";
def address = bind Address {
street: myStreet;
city: myCity;
state: myState;
zip: myZip;
};
println("address.street == {address.street}");
myStreet = "100 Maple Street";
println("address.street == {address.street}");
如果更改 myStreet
的|address
对象内部?street
变量受到媄响:
address.street == 1 Main Street
address.street == 100 Maple Street
h意,更改 myStreet
的值实际上会导致创Z个新?Address
对象Q然后将该对象重新赋l?address
变量。ؓ了跟t所做的更改?em>?/em>创徏新的 Address
对象Q请改ؓ直接l定 (bind
) 到该对象的实例变量:
def address = bind Address {
street: bind myStreet;
city: bind myCity;
state: bind myState;
zip: bind myZip;
};
如果要显式绑定到实例变量Q还可以省略W一?bind
Q?code>Address
前面的那个)Q?/p>
def address = Address {
street: bind myStreet;
city: bind myCity;
state: bind myState;
zip: bind myZip;
};
前面的课E已讲授了函敎ͼ但是您还必须了解l定函数 ?em>非绑定函?/em>之间的区别?/p>
误虑下面的函敎ͼ该函数创建和q回一?Point
对象Q?/p>
var scale = 1.0;
bound function makePoint(xPos : Number, yPos : Number) : Point {
Point {
x: xPos * scale
y: yPos * scale
}
}
class Point {
var x : Number;
var y : Number;
}
q就是所谓的l定 函数Q因为它前面?bound
关键字?/p>
注意Q?code>bound 关键字不能替?bind
关键字;q两个关键字按如下所C方式结合用?
接下来,让我们添加一些代码来调用此函数ƈ试l定Q?/p>
var scale = 1.0;
bound function makePoint(xPos : Number, yPos : Number) : Point {
Point {
x: xPos * scale
y: yPos * scale
}
}
class Point {
var x : Number;
var y : Number;
}
var myX = 3.0;
var myY = 3.0;
def pt = bind makePoint(myX, myY);
println(pt.x);
myX = 10.0;
println(pt.x);
scale = 2.0;
println(pt.x);
此脚本的输出如下所C:
让我们分析一下此脚本Q一ơ分析一部分Q?/p>
代码Q?/p>
var myX = 3.0;
var myY = 3.0;
def pt = bind makePoint(myX, myY);
println(pt.x);
脚本变?myX
?myY
初始化ؓ 3.0
?
q些值随后作为参C递给 makePoint
函数Q该函数会创建ƈq回一个新?Point
对象?code>bind 关键字(位于 makePoint
调用前面Q将新创建的 Point
对象 (pt
) l定?makePoint
函数的结果?/p>
接下来,代码Q?/p>
myX = 10.0;
println(pt.x);
?myX
的值更改ؓ 10.0
q输?pt.x
的倹{输? pt.x
现在也ؓ 10.0
?/p>
最后,代码Q?/p>
scale = 2.0;
println(pt.x);
更改 scale
的值ƈ再次输出 pt.x
的倹{?code>pt.x
的值现在ؓ 20.0
。但是,如果我们从该函数中删?bound
关键字(从而其成为非l定函数Q,则输出应为:
q是因ؓQ非l定函数只是在其某个参数发生变化时才被重新调用。由?scale
不是函数的参敎ͼ因此更改它的值将不会D另一个函数调用?/p>
您还可以?bind
?for
表达式结合用。ؓ了对此进行研IӞ让我们首先定义两个序列ƈ输出q两个序列中各个的|
var seq1 = [1..10];
def seq2 = bind for (item in seq1) item*2;
printSeqs();
function printSeqs() {
println("First Sequence:");
for (i in seq1){println(i);}
println("Second Sequence:");
for (i in seq2){println(i);}
}
seq1
包含十个(数字 1 ?10Q?code>seq2
也包含十个项Q这些项本来会与 seq1
h相同的|但是我们已经对其中的每个w应用了表辑ּ item*2
Q?
因此它们的值将加倍?/p>
因此Q输ZؓQ?/p>
First Sequence:
1
2
3
4
5
6
7
8
9
10
Second Sequence:
2
4
6
8
10
12
14
16
18
20
我们可以通过?bind
关键字放?for
关键字前面来l定q两个序列?/p>
def seq2 = bind for (item in seq1) item*2;
问题现在变成Q?#8220;如果 seq1
发生了某些变化,那么?seq2
中的所?/em>w受到影响q是部分 受到媄响?”我们可以通过以下Ҏ来对此进行测试:一个项Q?11Q插?
seq1
的末֤Q然后输两个序列的|看有什么变化:
var seq1 = [1..10];
def seq2 = bind for (item in seq1) item*2;
insert 11 into seq1;
printSeqs();
function printSeqs() {
println("First Sequence:");
for (i in seq1){println(i);}
println("Second Sequence:");
for (i in seq2){println(i);}
}
输出Q?/p>
First Sequence:
1
2
3
4
5
6
7
8
9
10
11
Second Sequence:
2
4
6
8
10
12
14
16
18
20
22
输出表明Q将 11 插入 seq1
的末֤不会影响 seq2
中的?10 个项Q新会自动d? seq2
的末֤Q其gؓ 22?/p>
替换触发?/em>是附加到变量的Q意代码块Q一旦变量的值发生变化,它们׃执行。以下示例显CZ基本语法Q?
它定义一? password
变量q向光加一个替换触发器Q当密码发生变化Ӟ该触发器会输Z则消息来报告此变量的新|
var password = "foo" on replace oldValue {
println(""nALERT! Password has changed!");
println("Old Value: {oldValue}");
println("New Value: {password}");
};
password = "bar";
此示例的输出如下所C:
ALERT! Password has changed!
Old Value:
New Value: foo
ALERT! Password has changed!
Old Value: foo
New Value: bar
此示例中的触发器引发两次Q当 password
初始化ؓ "foo"
时引发一ơ,当其值变?"bar" 时又引发一ơ。请注意Q?code>oldValue
变量存储在调用触发器之前变量的倹{您可以?oldValue
变量命名ZQ何所需的名Uͼ我们是由于该名称h描述性才恰好使用它?/p>
]]>JAVA FX语法学习----表达?/title> http://www.tkk7.com/asdtiang/articles/309687.htmlasdtiang asdtiang Fri, 15 Jan 2010 06:23:00 GMT http://www.tkk7.com/asdtiang/articles/309687.html http://www.tkk7.com/asdtiang/comments/309687.html http://www.tkk7.com/asdtiang/articles/309687.html#Feedback 0 http://www.tkk7.com/asdtiang/comments/commentRss/309687.html http://www.tkk7.com/asdtiang/services/trackbacks/309687.html 表达?/em>是可以生成某个结果值的代码D,可以l合使用表达式来生成“更大?#8221;表达式。JavaFX Script
~程语言是表辑ּ语言Q这意味着一切(包括循环、条件甚臛_Q都是表辑ּ。在某些情况下(?while
表达式)Q表辑ּh Void
cdQ这意味着它们不返回结果?br />
块表辑ּ ׃pd声明或表辑ּl成Q它们括在花括号中ƈ用分可行分隔。块表达式的值是最后一个表辑ּ
的倹{如果块表达式中不包含表辑ּQ则其类型ؓ Void
。请注意Q?code>var ?def
是表辑ּ?/p>
下面的块表达式对几个数字q行相加q将l果存储在一个名?total
的变量中Q?/p>
var nums = [5, 7, 3, 9];
var total = {
var sum = 0;
for (a in nums) { sum += a };
sum;
}
println("Total is {total}.");
q行此脚本将生成以下输出Q?/p>
W一?(var nums = [5, 7, 3, 9];
) 声明一个整数序列?/p>
W二行声明一个名?total
的变量,该变量将用来存放q些整数的和?/p>
随后的块表达式由左花括号和右花括号之间的所有内Ҏ成:
{
var sum = 0;
for (a in nums) { sum += a };
sum;
}
在该块内部,W一行代码声明一个名?sum
的变量,该变量将用来存放此序列中各个数字之和。第二行Q一?for
表达?/a>Q遍历该序列Q将每个数字?sum
相加。最后一行设|该块表辑ּ的返回|在本例中?24Q?/p>
使用 if
表达式后Q?em>仅当 特定条g为真时才执行某些代码块,从而对E序?
q行定向?/p>
例如Q以下脚本基于年龄来讄h?2 岁到 65 岁的人支付正怭h 10 元。老h和儿童支?5 元Q?
岁以下的儿童免费?/p>
def age = 8;
var ticketPrice;
if (age < 5 ) {
ticketPrice = 0;
} else if (age < 12 or age > 65) {
ticketPrice = 5;
} else {
ticketPrice = 10;
}
println("Age: {age} Ticket Price: {ticketPrice} dollars.");
如果?age
讄?8Q该脚本生成以下输出:
Age: 8 Ticket Price: 5 dollars.
该示例的E序如下所C:
if (age < 5 ) {
ticketPrice = 0;
} else if (age < 12 or age > 65) {
ticketPrice = 5;
} else {
ticketPrice = 10;
}
如果 age
于 5Q则h设|ؓ 0?/p>
E序随后蟩q其余条件测试ƈ输出l果?/p>
如果 age
不小?5Q程序将l箋执行下一个条件测试(由后跟另一?if
表达式的 else
关键字来指示Q:
if (age < 5 ) {
ticketPrice = 0;
} else if (age < 12 or age > 65) {
ticketPrice = 5;
} else {
ticketPrice = 10;
}
如果人的q龄?5 ?12 岁之间或者大?65 岁,该程序会票仯|ؓ 5 元?/p>
如果人的q龄?12 ?65 岁之_E序会流x后一个代码块Q用 else
关键字进行标讎ͼQ?/p>
if (age < 5 ) {
ticketPrice = 0;
} else if (age < 12 or age > 65) {
ticketPrice = 5;
} else {
ticketPrice = 10;
}
只有当前面的所有条件均不满xQ才会执行此块。它会针?12 ?65 岁之间的人将h讄?10 元?/p>
注:可以上面的代码~减成一个非常简z的条g表达式:
ticketPrice = if (age < 5) 0 else if (age < 12 or age > 65) 5 else 10;
q是一个需要掌握的有用ҎQ在本教E的?
面部分中q会使用它?
“序列”一课讲授了一U用来声明Ş成等差数列的数字序列的简化表C法?/p>
从技术上Ԍ[0..5]
是一?em>范围表达?/em>。默认情况下Q相dg间的?
隔ؓ 1Q但是您可以使用 step
关键字来指定一个不同的间隔。例如,定义一个由 1 ?10
之间的奇数构成的序列Q?/p>
var nums = [1..10 step 2];
println(nums);
此脚本的输出如下所C:
要创?em>降序范围Q请保W二个值小于第一个|q指定一个负?step |
var nums = [10..1 step -1];
println(nums);
输出为:
[ 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 ]
如果您在创徏降序范围时没有提?em>负的 step |则会生成一个空序列?/p>
以下代码Q?/p>
var nums = [10..1 step 1];
println(nums);
生成下面的~译时警告:
range.fx:1: warning: empty sequence range literal, probably not what you meant.
var nums = [10..1 step 1];
^
1 warning
如果您完全忽?step |也会生成一个空序列?/p>
另一个与序列有关的表辑ּ?for 表达式?code>for
表达式ؓ遍历序列中的各个Ҏ供了一U方便的机制?/p>
以下代码提供了一个示例:
var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
for (day in days) {
println(day);
}
此脚本的输出如下所C:
Mon
Tue
Wed
Thu
Fri
Sat
Sun
让我们将该示例分成几个部分?code>for 表达式以 "for" 关键字开_
for (day in days) {
println(day);
}
days
变量是要?for
表达式处理的输入序列 ?
名称Q?/p>
for (day in days ) {
println(day);
}
?for
表达式遍历该序列Ӟday
变量用来存放当前:
for (day in days) {
println(day);
}
h意,不需要在脚本中的其他位置声明 day
变量卛_其用在 for
表达式中。此外,在完成整个@环之后,无法访?day
。程序员通常会赋予时变量(如该变量Q非常短的名Uͼ或由一?
字母构成的名Uͼ?/p>
在上例中Q未昄 for
q回|?for
也是一个返回序列的表达式。以下代码显CZ两个使用 for
表达式从另一个序列创建序列的CZQ?/p>
// Resulting sequence squares the values from the original sequence.
var squares = for (i in [1..10]) i*i;
// Resulting sequence is ["MON", "TUE", "WED", and so on...]
var capitalDays = for (day in days) day.toUpperCase();
h意,toUpperCase
函数?String
对象提供。您可以通过查阅 API 文档来查看完整的可用函数列表?/p>
另一个@环结构是 while 表达式。与作用于序列中的 for
表达式不同,while
表达式会一直@环,直到l定的表辑ּ?false
为止。尽?while
在语法上是表辑ּQ但是它的类型ؓ Void
Q不q回倹{?/p>
下面提供了一个示例:
var count = 0;
while (count < 10) {
println("count == {count}");
count++;
}
此脚本的输出如下所C:
count == 0
count == 1
count == 2
count == 3
count == 4
count == 5
count == 6
count == 7
count == 8
count == 9
W一行声明一个名?count
的变量ƈ其初始化ؓ 0Q?/p>
var count = 0;
while (count < 10) {
println("count == {count}");
count += 1;
}
W二行以 while
表达式开头。此表达式创Z一个@环(在左花括号和双括号之间Q,该@环会一直进行,直到 count < 10
的gؓ false
为止Q?/p>
var count = 0;
while (count < 10) {
println("count == {count}");
count += 1;
}
While 表达式的M会输?count
的当前|然后?count
的值加 1Q?/p>
var count = 0;
while (count < 10) {
println("count == {count}");
count += 1;
}
?count
{于 10 Ӟ循环退出。要创徏一个无限@环,请将 true
关键字放在左括号和叛_括号之间Q如 while(true){}
中所C?/p>
break
?continue
表达式与循环表达式有兟뀂这两个表达式会影响循环q代Q?code>break 完全攑ּ循环Q?continue
仅放弃当前P代?/p>
管 break
?continue
在语法上是表辑ּQ但它们的类型ؓ Void
Q不q回倹{?/p>
CZQ?/p>
for (i in [0..10]) {
if (i > 5) {
break;
}
if (i mod 2 == 0) {
continue;
}
println(i);
}
输出Q?/p>
如果没有 if
表达式,该程序将只是输出 0 ?10 之间的数字?/p>
如果只有W一?if
表达式,E序在 i
的值大?5 ?em>?
?/em>循环Q?/p>
因此Q程序将仅输?1 ?5 之间的数字?/p>
通过dW二?if
表达式,E序仅攑ּ循环的当前P代?em>l箋执行下一
个P代:
if (i mod 2 == 0) {
continue;
}
在这U情况下Q只有当 i
为偶敎ͼ?i
能被 2
整除Q没有余敎ͼ时才执行 continue
。出现这U情冉|Q将永远不会调用 println()
Q?
因此输出中将不包含该数字?/p>
在实际的应用E序中,正常的脚本执行流有时会被某个事g中止。例如,如果脚本从某个文件中d输入Q但是找不到该文Ӟ?
脚本无法l。我们将q种情况UCؓ“异常”?/p>
注意Q异常是对象。它们的cd通常以它们所表示的情况命名(例如Q?code>FileNotFoundException
表示找不到文件的情况Q。但是,定义一l特定于卛_l出的示例的异常不在本节的讨围之内。因此,我们用一个通用?Exception
对象Q从 Java ~程语言借用而来Q来说明 throw
?code>try?code>catch
? finally
表达式?
以下脚本定义Q和调用Q一个会抛出异常的函敎ͼ
import java.lang.Exception;
foo();
println("The script is now executing as expected... ");
function foo() {
var somethingWeird = false;
if(somethingWeird){
throw new Exception("Something weird just happened!");
} else {
println("We made it through the function.");
}
}
按原栯行此脚本Q将 somethingWeird
讄?false
Q?
输Z下消息:
We made it through the function.
The script is now executing as expected...
但是Q如果将该变量更改ؓ true
Q则会抛出异常。在q行Ӟ该脚本将崩溃q显CZ下消息:
Exception in thread "main" java.lang.Exception: Something weird just happened!
at exceptions.foo(exceptions.fx:10)
at exceptions.javafx$run$(exceptions.fx:3)
Z防止崩溃Q我们将需要?try/catch 表达式来包装 foo()
调用。顾名思义Q这些表辑ּ试 执行某些代码Q但会在出现问题?em>捕捉异常Q?/p>
try {
foo();
} catch (e: Exception) {
println("{e.getMessage()} (but we caught it)");
}
现在Q程序不会崩溃,而只是输出:
Something weird just happened! (but we caught it)
The script is now executing as expected...
q有一?finally 块(它在技术上不是表达式)Q无论是否抛Z异常Q该块始l在 try
表达式退Z后的某个旉执行?code>finally 块用来执行无?try
M是成功还是抛出异帔R需要执行的清除操作?/p>
try {
foo();
} catch (e: Exception) {
println("{e.getMessage()} (but we caught it)");
} finally {
println("We are now in the finally expression...");
}
E序输出现在为:
Something weird just happened! (but we caught it)
We are now in the finally expression...
The script is now executing as expected...
]]> JAVA FX语法学习----q算W?/title> http://www.tkk7.com/asdtiang/articles/309676.htmlasdtiang asdtiang Fri, 15 Jan 2010 05:03:00 GMT http://www.tkk7.com/asdtiang/articles/309676.html http://www.tkk7.com/asdtiang/comments/309676.html http://www.tkk7.com/asdtiang/articles/309676.html#Feedback 0 http://www.tkk7.com/asdtiang/comments/commentRss/309676.html http://www.tkk7.com/asdtiang/services/trackbacks/309676.html
赋D符 "=" 是您遇到的最常用的运符。用该q算W可以将其右侧的Dl其左侧的操作数Q?/p>
result = num1 + num2;
days = ["Mon","Tue","Wed","Thu","Fri"];
使用术q算W?/em>可以执行加、减、乘和除q算?code>mod
q算W用一个操作数除以另一个操作数q将余数作ؓl果q回?/p>
+ Q加q算W)
- Q减q算W)
* Q乘q算W)
/ Q除q算W)
mod Q求余运符Q?/pre>
以下脚本提供了一些示例:
var result = 1 + 2; // result is now 3
println(result);
result = result - 1; // result is now 2
println(result);
result = result * 2; // result is now 4
println(result);
result = result / 2; // result is now 2
println(result);
result = result + 8; // result is now 10
println(result);
result = result mod 7; // result is now 3
println(result);
您还可以l合使用术q算W与赋D符来创?em>复合赋?/em>。例如,result += 1;
?result = result+1;
都会?result
的值加 1?/p>
var result = 0;
result += 1;
println(result); // result is now 1
result -= 1;
println(result); // result is now 0
result = 2;
result *= 5; // result is now 10
println(result);
result /= 2; // result is now 5
println(result);
唯一不能按照此方式用的术q算W是 mod
。例如,如果您希望将 result
除以 2Q然后将余数重新赋给其自w,则需要编写:result = result mod 2;
大多数运符都需要两个操作数Q?em>一元运符
仅用一个操作数来执行诸如按一递增/递减某个倹{对某个
数字求反或对布尔值求反之cȝ操作?/p>
- 一元减q算W;Ҏ个数字求?br />
++ 递增q算W;?1 递增某个?br />
-- 递减q算W;?1 递减某个?br />
not 逻辑求补q算W;对布值求?/pre>
以下脚本用于试一元运符Q?/p>
var result = 1; // result is now 1
result--; // result is now 0
println(result);
result++; // result is now 1
println(result);
result = -result; // result is now -1
println(result);
var success = false;
println(success); // false
println(not success); // true
递增/递减q算W可以在操作C前(前缀Q或之后Q后~Q应用。代?result++;
?
++result;
都将D result
的值加 1。二者之间的唯一区别是前缀版本
(++result
) 得到的是递增后的|而后~版本 (result++
)
得到的是原始倹{(您可以通过以下Ҏ来记忆:++result
先执行递增再获得|?result++
先获得值再执行递增。)如果您只是执行简单的递增/递减Q则选择哪个版本都一栗但是,如果您将该运符作ؓ较大表达式的一部分q行使用Q则选择不同的版
本会对结果生很大的影响?/p>
以下脚本说明了这U区别:
var result = 3;
result++;
println(result); // result is now 4
++result;
println(result); // result is now 5
println(++result); // result is now 6
println(result++); // this still prints 6!
println(result); // but the result is now 7
相等和关p运符定一个操作数是大于、小于、等于还是不{于另一个操作数?/p>
== {于
!= 不等?br />
> 大于
>= 大于或等?br />
< 于
<= 于或等?/pre>
以下脚本用于试q些操作敎ͼ
def num1 = 1;
def num2 = 2;
println(num1 == num2); // prints false
println(num1 != num2); // prints true
println(num1 > num2); // prints false
println(num1 >= num2); // prints false
println(num1 < num2); // prints true
println(num1 <= num2); // prints true
条g?(and) ?em>条g?(or)
q算W用于对两个布尔表达式执行条件运。这些运符会表现出“短\”行ؓQ也是_仅在必要时才计算W二个操作数Q例如,对于 and
q算Q如果第一个表辑ּ的结果ؓ falseQ将不计第二个表达式。对?or
q算Q如果第一个表辑ּ的结果ؓ true
Q?
不计算W二个表辑ּ?/p>
以下脚本定义?username
?password
变量Q然后输出各个条件的匚w,从而说明了q些q算W的用法Q?/p>
def username = "foo";
def password = "bar";
if ((username == "foo") and (password == "bar")) {
println("Test 1: username AND password are correct");
}
if ((username == "") and (password == "bar")) {
println("Test 2: username AND password is correct");
}
if ((username == "foo") or (password == "bar")) {
println("Test 3: username OR password is correct");
}
if ((username == "") or (password == "bar")) {
println("Test 4: username OR password is correct");
}
输出为:
Test 1: username AND password are correct
Test 3: username OR password is correct
Test 4: username OR password is correct
instanceof
q算W将对象与指定的cd相比较。您可以使用该运符来确定某个对象是否ؓ特定cȝ实例Q?/p>
def str1="Hello";
println(str1 instanceof String); // prints true
def num = 1031;
println(num instanceof integer); // prints true
在本教程的最后一课中深入了解cdl承后,您将发现该运符非常有用?/p>
]]> JAVA FX语法学习-----序列 http://www.tkk7.com/asdtiang/articles/309671.htmlasdtiang asdtiang Fri, 15 Jan 2010 04:58:00 GMT http://www.tkk7.com/asdtiang/articles/309671.html http://www.tkk7.com/asdtiang/comments/309671.html http://www.tkk7.com/asdtiang/articles/309671.html#Feedback 0 http://www.tkk7.com/asdtiang/comments/commentRss/309671.html http://www.tkk7.com/asdtiang/services/trackbacks/309671.html 创徏序列的一U方法是昑ּ列出其各个项。每个项都用一个逗号q行分隔Q列表用Ҏ?"[
" ?"]
"
括v来。例如,下面的代码:
def weekDays = ["Mon","Tue","Wed","Thu","Fri"];
声明了一个序列ƈ其赋给 weekDays
。我们在q个例子中用了 def
Q?
因ؓ在创建序列后我们不打改变它的倹{这里,~译器知道我们打创Z?#8220;字符串序?#8221;Q因为每个项都声明ؓ String
字面倹{如果序列是使用 Integer
声明的(例如Q?code>def nums = [1,2,3];Q,
~译器将知道我们打算创徏“整数序列”?/p>
您还可以昑ּ指定序列的类型,Ҏ是修改序列的声明Q其包含后?"[]" 的类型名U?/p>
def weekDays: String[] = ["Mon","Tue","Wed","Thu","Fri"];
q会通知~译?weekDays
用来存?String
序列Q而不是单? String
Q?/p>
您还可以在序列中声明其他序列Q?/p>
def days = [weekDays, ["Sat","Sun"]];
在这U情况下Q编译器自动^展开嵌套的序列以构成单个序列Q这样上面的代码q效于Q?/p>
def days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
q可以通过化表C法来更方便地创建可构成{差数列的序列。要创徏一个由数字 1 ?100
构成的序列,请用以下代码:
def nums = [1..100];
您可以用布表辑ּQ又UCؓ谓词 Q声明一个ؓ现有序列的子集的新序列。例如,误虑以下代码Q?/p>
要创建第二个序列Q基于此W一个序列中的项Q但仅包含大?2 的数字,请用以下代码:
def numsGreaterThanTwo = nums[n | n > 2];
可以上面的代码行用中文表示为:“?nums
序列中选择值大?2
的所有项q将q些赋l名?numsGreaterThanTwo
的新序列?#8221;以粗体突出显C的“值大?
2”子句是谓词?/p>
在这些代码中Q?/p>
新创建的序列存储?numsGreaterThanTwo
中?/li>
代码 nums [n | n > 2];
中标Cؓ_体的部分指定要从中复制的原始序列。在我们的示例中Q?code>nums 是原始序列的名称?/li>
q会选择 nums
中的,q按序q回一个由使表辑ּ?true
的项构成的新序列?/li>
"|" 字符用来在视觉上变?"n" 与代码的其余部分隔开Q?code>nums[n |
n > 2];
代码 nums[n | n > 2 ];
中标Cؓ_体的部分定义一个布?em>表达?/em>Q该表达式指定将当前复制到新序列中旉要满的条g?/li>
序列中的Ҏ按数字烦引(?0
开始)q行讉K的。要讉K单个,请键入序列名Uͼ后跟该项的数字烦引(用方括号括v来)Q?/p>
def 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]);
q会以下内容输出到屏幕上:
Mon
Tue
Wed
Thu
Fri
Sat
Sun
您还可以使用后跟序列名称?sizeof
q算W来定序列的大:
以下代码会将 "7" 输出到屏q上Q?/p>
def days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
println(sizeof days);
insert
关键字可用于在序列中特定的前面 ?em>后面?
?/em>一个项?/p>
注:从技术上?序列?em>不可变的 Q即一l创建就怸更改。在修改序列Q例如通过插入或删除项Q时Q会在后台创
Z个新序列q新指定序列变量,q会lh一U序列已被修改的印象?
让我们通过重新创徏 days
序列来对此进行研I。请注意Q我们现在用 var
来声明变? days
Q因为我们会在创建原始序列后改变它的|
此时Q该序列仅包含一个项 "Mon"
?/p>
我们可以使用 insert
?into
关键字在该序列的末尾插入 "Tue"
Q?/p>
cM圎ͼ我们也可以添?"Fri"
?code>"Sat" ?"Sun"
Q?/p>
insert "Fri" into days;
insert "Sat" into days;
insert "Sun" into days;
该序列中现在包含Q?code>"Mon"?code>"Tue"?code>"Fri"?code>"Sat"
?"Sun"
?/p>
我们q可以?insert
?before
关键字在l定索引处的前面插入一个项。请CQ烦引是? 0 开始的Q因此,在当前的序列中,"Fri"
位于索引位置
2。因此,我们可以?"Fri"
前面插入 "Thu"
Q如下所C:
insert "Thu" before days[2];
该序列中现在包含Q?code>"Mon"?code>"Tue"?code>"Thu"?code>"Fri"?code>"Sat"
?"Sun"
?/p>
要在 "Tue"
后面插入 "Wed"
Q我们可以?insert
? after
关键字:
insert "Wed" after days[1];
该序列现在包含一周中的每一天:"Mon"
?code>"Tue"?code>"Wed"?code>"Thu"?code>"Fri"?code>"Sat"
?"Sun"
?/p>
通过使用 delete
?from
关键字可以轻村֜从序列中删除:
该序列中现在包含Q?code>"Mon"?code>"Tue"?code>"Wed"?code>"Thu"?code>"Fri"
?"Sat"
?/p>
q可以删除位于特定烦引位|的V以下代码从该序列中删除 "Mon"
Q请CQ?code>"Mon"
是第一个项Q因此它的烦引位|ؓ 0Q?/p>
要删除序列中的所有项Q请使用后跟序列名称?delete
关键字:
h意,delete
仅从序列中删除项Q而不从脚本中删除 days
变量。您仍可以像以前那样讉K days
变量q向其中d新项?/p>
使用 reverse
q算W可以轻村֜颠倒序列中的ơ序Q?/p>
var nums = [1..5];
reverse nums; // returns [5, 4, 3, 2, 1]
有时Q您可能希望对序列进行比较,看它们是否相{。序列是按值来比较是否相等的:如果它们的长度相同而且各个相{,则它
们相{?/p>
让我们创Z个具有相同内容的序列来对此进行测试:
def seq1 = [1,2,3,4,5];
def seq2 = [1,2,3,4,5];
println(seq1 == seq2);
表达?seq1 == seq2
的gؓ true
Q因?
个序列具有相同数量的,而且q两个序列中每个的值都相等。因此,q些代码会将 "true" 输出到屏q上?/p>
通过更改其中一个序列中的数量Q而不更改另一个序列)Q这两个序列现在h不同的长度:
def seq1 = [1,2,3,4,5];
def seq2 = [1,2,3,4,5,6];
println(seq1 == seq2);
׃W二个序列比W一个序列长Q从而这两个序列不相{,因此该脚本的输出?"false"?/p>
我们q可以通过更改的值来使两个序列不相等Q即使这两个序列的长度仍相同Q:
def seq1 = [1,2,3,4,5];
def seq2 = [1,3,2,4,5];
println(seq1 == seq2);
׃q两个序列不相等Q因此这些代码将再次输出 "false"?/p>
序列子集 提供对序列某些部分的讉K?/p>
seq[a..b]
此语法提供对位于索引 a
和烦?b
之间Q含 a ?
bQ各个项的访问。以下脚本创Z? weekend
序列Q其中仅包含 "Sat"
?"Sun"
V?/p>
def days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
def weekend = days[5..6];
seq[a..<b]
使用 "<" 字符可以讉K位于索引 a
和烦?b
之间Q含 aQ?em>不含 bQ的V我们可以对 days
使用此方法来创徏一?weekdays
序列Q其中包含项 "Mon"
?"Fri"
?/p>
def days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
def weekdays = days[0..<5];
seq[a..]
通过省略W二个烦引,可以讉K从烦?a
到序列末֤的所有项。ؓ了与上一个示例保持一_我们可以按如下方式创? weekend
序列Q?/p>
def days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
def weekend = days[5..];
seq[a..<]
最后,您可以用不带第二个索引?"<" 来访问从索引 a
到序列末֤的所有项Q?em>?
?/em>最后一)?/p>
def days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
def days2 = days[0..<];
此版本会创徏一?days2
序列Q其中包含项 "Mon"
?
"Sat"
?/p>
]]>JAVA FX语法学习----基础 http://www.tkk7.com/asdtiang/articles/309662.htmlasdtiang asdtiang Fri, 15 Jan 2010 04:14:00 GMT http://www.tkk7.com/asdtiang/articles/309662.html http://www.tkk7.com/asdtiang/comments/309662.html http://www.tkk7.com/asdtiang/articles/309662.html#Feedback 0 http://www.tkk7.com/asdtiang/comments/commentRss/309662.html http://www.tkk7.com/asdtiang/services/trackbacks/309662.html var ?def
关键字声明的。二者之间的区别在于Q?br />
在脚本的整个生命周期内都可以?var
变量赋予新|
?def
变量在被首次赋予新值后保持不变?br />
函数实例Q?br />
function add(argOne: Integer, argTwo: Integer) : Integer {
result = argOne + argTwo; // U色表示参数和返回类?/span>
println(" {argOne} + {argTwo} = {result} " );
return result;
}
一个类的实例:
其实有了JAVA的基Q类的概念还是比较好理解的。只是写法上不同而已
public class Address {
public var street;
public var city;
public var state;
public var zip;
}
// /在另一个类中的使用
def myAddress = Address {
street: " 1 Main Street " ;
city: " Santa Clara " ;
state: " CA " ;
zip: " 95050 " ;
}
var address;
address = Address{
street: " 1 Main Street " ;
city: " Santa Clara " ;
state: " CA " ;
zip: " 95050 " ;
}
数据cdQJavaFX Script ~程语言支持字符串类型、数值类型、布? (true/false)
cd。还支持Z旉Q持l时_的类型,以及用于指示函数不返回Q何值和指示~少正常值的Ҏcd
A:String
def name = ' Joe ' ;
var s = " Hello {name} " ; // s = 'Hello Joe'
def answer = true ;
var s = " The answer is {if (answer) " Yes " else " No " } " ; // s = 'The answer is Yes'
def one = " This example " ;
def two = " joins two strings. " ;
def three = " {one}{two} " ; // join string one and string two
println(three);
BQNumber and Integer
def numOne : Number = 1.0 ;
def numTwo : Integer = 1 ;
q两U类型之间的区别是,Number
表示点数字Q?Integer
仅表C整数。只有当您确实需要Q点精度时才应使用 Number
Q否则应首?Integer
注意 Q从 SDK 1.1 开始,该语aq包含与 Java ~程语言中的数值类型相一致的数值类型。因此,
数值类型的完整列表为:
Byte
?code>Short?code>Number?code>Integer?code>Long?code>Float?code>Double?Character
?br />
但以上给出的仍是正确的:大多数程序员在其~写的脚本中只需要? Integer
Q或Number
Q?br />
如果您在学习该语a时具?Java
~程语言背景q且需要完成一个必M用其他数值类型的dQ那么请C您的脚本现在可以使用q些附加cd?
DQ其?br />
function printMe() :Void{ ///注意V是大写的
println("I don't return anything!");
Duration
cd表示固定的时间单元(毫秒、秒、分钟或时Q?br />
null 是一个特D的|用来指示~少正常倹{null 与零或空字符串不同,因此 null
比较与零或空字符串比较不同?br />
]]>
վ֩ģ壺
ĻƵ |
պۺϾþþ |
Ʒҹ |
ѾþþƷ |
ձɫͼ߹ۿ |
456˳߲վ |
˳www |
һëƬ߹ۿ |
ŷۺһ |
AVƬһ |
ëƬ18ŮëƬѿ
|
3344߿Ƭ |
һâþ |
ɫƷvrһ |
ëƬƵ߿ѹۿ |
ƷһƵ߹ۿ
|
Ļ˾þþƷ |
Ƶѹۿ |
ҹƷ |
911Ʒձ |
mm1313Ʒ |
Ůվѿվ |
Ȱһ |
99aƷ |
ŷƵ |
߲ |
һƬaѲſ֮ |
þùѸ |
99re8оƷƵ |
˵avһ2 |
Ƶ߹ۿ |
һۿ |
xxxxx |
רAVվ
|
Ů18ëƬˮѿ |
99þþƷѾƷ |
ƷŮٸaѾþ |
MM1313Ʒþ |
ۺһ |
þĻƷѩ |
ҹƷţӰ |