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

В 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.

Intereting Posts
Есть ли какая-либо ссылка на временную сложность библиотеки коллекции Kotlin? Ошибка ввода типа. Ожидаемое несоответствие типа: требуется Строка найденная пара <String, String> в Котлине и Анко С плагином «kotlin-kapt», Android Studio не дает конкретных ошибок в отношении Dagger 2 Имеет ли Котлин функцию идентификации? Сделать элемент RecyclerView для полноэкранного просмотра с помощью перехода / анимации Почему моя установка RxJava блокирует мой поток пользовательского интерфейса? Работа с обратным вызовом BluetoothAdapter.startLeScan Просмотр Recycler не плавно прокручивается Android Studio и Kotlin – не загружать изменения Делегация класса в Котлине Котлин. Ожидается Любой полученный MyObject kotlin – автоматическое преобразование числовых типов Как добиться чистой функции с динамическим программированием в Котлине? Как создать экземпляр объекта с использованием значений параметров конструктора по умолчанию в Kotlin? Java 2-минутная задержка иногда при подключении сокета? Kotlin переопределяет абстрактное поведение val, объект vs class