Присвоить новое значение переменным с помощью метода в Котлин?

В 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); } } 

Однако, как я могу это сделать в Котлине? Я пытаюсь, но результат всегда равен 0 для переменных IntColumn и IntRow в коде ниже:

 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(); } 

В вашей main функции вы создаете 2 отдельных экземпляра класса drawTriangle , поэтому есть два набора переменных – один из них вы меняете, один из них вы печатаете. Краткое исправить:

 fun main(args: Array<String>){ val d = drawTriangle() d.inputRowandColumn() d.Printvalue() } 

PS Ваш код Kotlin сильно отличается от вашего Java-кода. В вашем фрагменте Java вы используете 2 static поля, принадлежащих классу. Но в фрагменте Kotlin вы используете 2 свойства-члена, которым нужны экземпляры для хранения.

PPS Ваш код Kotlin выглядит как C #. При изучении нового языка неплохо использовать соглашения об именах этого языка;)

Я не уверен, почему вы делаете то, что делаете. Согласно воддану, ваш код не эквивалентен. Java использует статику, которая связана с классом, а не с экземпляром, следовательно, ваша способность обращаться к ним напрямую из статического «основного» метода.

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.