2015-06-02 3 views
0

У меня есть два класса.Возврат 2 целых числа в функции int

В первом классе необходимы целые числа low и high.

Во втором классе Хочу объявить и обменивать low и high.

public class DisplayMessageActivity extends ActionBarActivity { 
    int low = 0; 
    int high = 101; 

Это прекрасно работает, но после выполнения следующей функции целые числа не меняются.

public int close (View v) { 

    EditText low2 = (EditText) findViewById(R.id.editText2); 
    EditText high2 = (EditText) findViewById(R.id.editText3); 

    int low = Integer.parseInt(low2.getText().toString()); 
    int high = Integer.parseInt(high2.getText().toString()); 
    high ++; 

    Toast.makeText(getApplicationContext(), "Low: " + low +" High: "+high, Toast.LENGTH_SHORT).show(); 

    if (low > high) { //you can ignore it 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("False Numbers"); 
     builder.setMessage("You set the lower number higher than the higher one."); 
     builder.show(); 
    } else { 
     this.finish(); 
    } 

    return low; //I want to return low AND high - but this command will not change low or high! 
} 

EDITED КОД:

public class HighAndLow{ 
    int high= 0; 
    int low = 101; 
} 



public int[] close(View v){ 


    EditText low2 = (EditText) findViewById(R.id.editText2); 
    EditText high2 = (EditText) findViewById(R.id.editText3); 

     low = Integer.parseInt(low2.getText().toString()); //cant find low now 
     high = Integer.parseInt(high2.getText().toString()); //cant find high now 
     high ++; 

    Toast.makeText(getApplicationContext(), "Low: " + low +" High: "+high, 
      Toast.LENGTH_SHORT).show(); 





    if (low > high) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("False Numbers"); 
     builder.setMessage("You set the lower number higher than the higher one."); 
     builder.show(); 
    } 
     else{ 

      this.finish(); 
     } 




    return HighAndLow; //DONT WORK 


} 

ответ

1

Почему бы не создавать высокие и низкие целые числа как свойства вашего класса? Затем внедряйте обычные ролики/сеттеры. Установите их с помощью метода close и получите их из своего второго класса, когда это необходимо, из вашего первого экземпляра класса.

+0

Мой первый класс не может видеть высоким и низким - поэтому программа не запустится. – user1796692

+0

Я бы предложил добавить методы getter в ваш класс. Метод getter просто возвращает свойство этого класса. Напишите один для каждого из ваших свойств. Затем, когда вам нужно просто вызвать int low = MyClass.GetLow() .. или что-то в этом роде. –

+0

Ох, это очень легко с геттером и сеттером! СПАСИБО! – user1796692

2

В Java (и Android) вы не можете вернуть несколько значений из функции. Вы можете вернуть только одно значение. Однако это единственное значение может быть объектом, который содержит несколько полей.

Возможно, вы захотите создать новый класс, содержащий оба значения. Что-то вроде этого:

public class HighAndLow{ 
    int high; 
    int low; 
} 

Затем вы можете вернуть экземпляр этого класса из метода, и вызывающий код может получить доступ к высокому и низкому значению таким образом.

На самом деле, Android уже есть класс, который делает это: Range

+0

Я понимаю ваше мышление, но я не знаю, как это написать. Я создаю класс HighAndLow - но как мне нужно изменить int «high» и «low» в моем закрытом коде и вернуть их в HighAndLow? im imired ... Я пытаюсь найти решение с утра. – user1796692

+0

@ user1796692 Вы создаете экземпляр HighAndLow (или, еще лучше, Range), как и любой другой экземпляр. Если у вас возникли проблемы с этим подходом, отредактируйте свой вопрос, чтобы включить обновленный код. –

+0

отредактировал ... я думаю, я должен спать и попробовать это завтра, может быть, у меня есть понимание для вашего объяснения ... – user1796692

-1

Это не рекомендуется и объектно-ориентированный путь, но если предыдущие ответы не удовлетворяют вы можете сделать это следующим образом:

public int[] close (View v) { 

    EditText low2 = (EditText) findViewById(R.id.editText2); 
    EditText high2 = (EditText) findViewById(R.id.editText3); 

    int low = Integer.parseInt(low2.getText().toString()); 
    int high = Integer.parseInt(high2.getText().toString()); 
    high ++; 

    Toast.makeText(getApplicationContext(), "Low: " + low +" High: "+high, Toast.LENGTH_SHORT).show(); 

    if (low > high) { //you can ignore it 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("False Numbers"); 
     builder.setMessage("You set the lower number higher than the higher one."); 
     builder.show(); 
    } else { 
     this.finish(); 
    } 
    int[] values = {high,low}; 
    return values; //I want to return low AND high - but this command will not change low or high! 
} 

позже

int[] myHighAndLow = close(someView); 

//you need to remember what came first(First In First Out) 
int high = myHighAndLow[0]; 
int low = myHighAndLow[1]; 
+0

Я не понимаю голосов. Он просит решения, так что здесь он один. Я сделал отказ от ответственности, это не рекомендуется. – Tomasz

Смежные вопросы