在Java中,我可以使用[class-name]。[method]来改变类中的变量值:
public class Main {
public static void main(String[] args) {
// Prints "Hello, World" to the terminal window.
test.teste();
test.printlnvar();
}
}
class test{
public static int a = 0;
public static int b = 0;
public static void teste(){
a = 9;
b = 12;
}
public static void printlnvar(){
System.out.println("the value of A: " + a);
System.out.println("the value of B: " + b);
}
}
但是,我怎么能在Kotlin那样做呢?我尝试但是在下面的代码中,变量IntColumn和IntRow的结果总是为0:
public class drawTriangle{
public var IntColumn:Int = 0;
public var IntRow:Int = 0;
fun drawTriangle(){
this.inputRowandColumn();
this.Printvalue();
}
fun inputRowandColumn(){
IntColumn = 12;
IntRow = 3;
}
fun Printvalue(){
println("the value of rows is: ${IntRow}");
println("the value of column is: ${IntColumn}");
}
}
fun main(args: Array<String>){
drawTriangle().inputRowandColumn();
drawTriangle().Printvalue();
}
答案 0 :(得分:2)
在main
函数中,您创建了drawTriangle
类的2个独立实例,因此有2组变量 - 其中一组是您更改的,其中一组是您打印的。一个简短的修复:
fun main(args: Array<String>){
val d = drawTriangle()
d.inputRowandColumn()
d.Printvalue()
}
P.S。您的Kotlin代码与Java代码截然不同。在您的Java代码段中,您使用属于某个类的2个static
字段。但是在Kotlin片段中,您使用了2个成员属性,这些属性需要存储实例。
P.P.S。你的Kotlin代码有点像C#。在学习新语言时,使用该语言的命名约定并不是一个坏主意;)
答案 1 :(得分:0)
我不确定你为什么要做你正在做的事情。根据voddan,您的代码不相同。 Java正在使用与类相关联的静态,而不是实例,因此您可以直接从静态“main”方法访问它们。
Kotlin将类(静态)项与实例项分开。如果定义了一个类,则只能实例化实例并使用它们。
如果你真的想在Kotlin中实现你的尝试,你需要使用'对象'而不是'类'。 Kotlin中的一个物体是一个单身人士。这是你如何在Kotlin写的。
object drawTriangle {
var intColumn: Int = 0
var intRow: Int = 0
fun drawTriangle() {
this.inputRowandColumn()
this.printvalue()
}
fun inputRowandColumn() {
intColumn = 12
intRow = 3
}
fun printvalue() {
println("the value of Rows is: $intRow")
println("the value of Column is: $intColumn")
}
}
fun main(args: Array<String>) {
drawTriangle.inputRowandColumn()
drawTriangle.printvalue()
}
请注意,我删除了'public',因为Kotlin的默认设置是公开的。删除了分号,并将其重命名为符合Kotlin命名标准。