Генератор случайных чисел - перенос переменных - PullRequest
0 голосов
/ 27 ноября 2018

Может ли кто-нибудь помочь?Я только начинаю с какой-то очень простой разработки для Android.Я разрабатываю первоначальное приложение, чтобы помочь моей дочери изучать ее временные таблицы.Идея (в своей первой версии) случайным образом генерирует 2 числа от 1 до 12. Затем нажмите кнопку расчета, которая даст ответ.У меня так, что он случайным образом генерирует 2 числа, однако, когда я нажимаю кнопку «Рассчитать», он не вычисляет, а просто показывает 0. Я считаю, что это как-то связано со значением переменных (digit1 & digit2), которые не видныследующий метод (рассчитать).Если я жестко закодирую 2 числа в методе вычисления, это работает.Я просто не могу рассчитать случайные числа.Любая помощь будет наиболее ценной.MainActivity.java:

package uk.co.myrayner.sophiestimestables;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;

import java.util.Random;


public class MainActivity extends AppCompatActivity {

    int digit1;
    int digit2;
    int show_answer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void randomise_digits(View view) {
        Random rand1 = new Random();
        int digit1 = rand1.nextInt(12) + 1;
        displaydigit1(digit1);
        Random rand2 = new Random();
        int digit2 = rand2.nextInt(12) + 1;
        displaydigit2(digit2);
    }

    public void calculate(View view) {
        show_answer = (digit1 * digit2);
        displayanswer(show_answer);
    }

    private void displaydigit1(int number) {
        TextView digit1TextView = (TextView) findViewById(R.id.digit1);
        digit1TextView.setText("" + number);
    }

    private void displaydigit2(int number) {
        TextView digit2TextView = (TextView) findViewById(R.id.digit2);
        digit2TextView.setText("" + number);
    }

    private void displayanswer(int number) {
        TextView answerTextView = (TextView) findViewById(R.id.show_answer);
        answerTextView.setText("" + number);

    }
}

Ответы [ 4 ]

0 голосов
/ 27 ноября 2018

Все, что вам нужно сделать, это удалить «int» перед тем, как вы определите digit1 и digit2, чтобы ваш код выглядел следующим образом:

package uk.co.myrayner.sophiestimestables;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import java.util.Random;

public class MainActivity extends AppCompatActivity {

    int digit1;
    int digit2;
    int show_answer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void randomise_digits(View view) {
        Random rand1 = new Random();
        digit1 = rand1.nextInt(12) + 1;
        displaydigit1(digit1);
        Random rand2 = new Random();
        digit2 = rand2.nextInt(12) + 1;
        displaydigit2(digit2);
    }

    public void calculate(View view) {
        show_answer = (digit1 * digit2);
        displayanswer(show_answer);
    }

    private void displaydigit1(int number) {
        TextView digit1TextView = (TextView) findViewById(R.id.digit1);
        digit1TextView.setText("" + number);
    }

    private void displaydigit2(int number) {
        TextView digit2TextView = (TextView) findViewById(R.id.digit2);
        digit2TextView.setText("" + number);
    }

    private void displayanswer(int number) {
        TextView answerTextView = (TextView) findViewById(R.id.show_answer);
        answerTextView.setText("" + number);

    }
}
0 голосов
/ 27 ноября 2018

Я не проверял ваш код на моей машине.Но я думаю, что это может быть вызвано тем, что вы не установили значение ваших глобальных переменных «digit1» и «digit2».В вашем методе randomise_digits вы просто создаете новые локальные переменные digit1 и digit2.

0 голосов
/ 27 ноября 2018

Ну, я не тестировал ваш код, но, очевидно, вы объявили digit1 и digit2 как глобальные переменные, но когда вы используете его, вы объявили его снова, так что теперь код будет генерировать случайное число и присваиватьлокальные digit1 и digit2, а не глобальные, и когда вы пытаетесь вызвать calculate(), глобальные digit1 и digit2 по-прежнему равны 0 (примитивное целое число равно нулю), поэтому в основном результат будет равен нулю.

Просто измените функцию randromise_digits на

public void randomise_digits(View view) {
    Random rand1 = new Random();
    digit1 = rand1.nextInt(12) + 1;
    displaydigit1(digit1);
    Random rand2 = new Random();
    digit2 = rand2.nextInt(12) + 1;
    displaydigit2(digit2);
}
0 голосов
/ 27 ноября 2018

Есть несколько проблем с вашей реализацией.

1) Внутри randomise_digits вы устанавливаете значения digit1 и digit2, но это локальные переменные , а не переменные экземпляра, объявленные внеметода.Таким образом, любые изменения в digit1 и digit2 внутри randomise_digits () не отражаются на digit1 и digit2 вашего объекта MainActivity.Вот почему вы получаете 0, потому что они фактически не установлены на какое-либо значение (поскольку вы ссылаетесь на переменные экземпляра digit1 и digit2 в вашем методе Calculate ()).Локальные digit1 и digit2 в вашем методе randomise_digits () теперь не входят в сферу действия / больше не существуют.

2) Измените имя вашего метода, чтобы лучше отражать его действия.Ваш метод Calculate (), вероятно, должен быть переименован в show ().Вам не нужно передавать View-объекты как параметры для всех ваших методов.Вы их не используете, так зачем их включать?

3) Вам не нужно создавать два случайных объекта для вычисления двух случайных чисел.Все будет хорошо.

Ваш класс, вероятно, должен выглядеть примерно так:

package uk.co.myrayner.sophiestimestables;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;

import java.util.Random;


public class MainActivity extends AppCompatActivity {

    int digit1;
    int digit2;
    int show_answer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button calculateButton = findViewById(R.id.your_calculate_button_id);

        calculateButton.setOnClickListener(new Button.OnClickListener() {

            public void onClick(View v) {
                randomise_digits();
                calculate();
            }

        });
    }

    public void randomise_digits() {
        Random rand1 = new Random();
        digit1 = rand1.nextInt(12) + 1;
        displaydigit1(digit1);
        digit2 = rand1.nextInt(12) + 1;
        displaydigit2(digit2);
    }

    public void calculate() {
        show_answer = (digit1 * digit2);
        displayanswer(show_answer);
    }

    private void displaydigit1(int number) {
        TextView digit1TextView = (TextView) findViewById(R.id.digit1);
        digit1TextView.setText("" + number);
    }

    private void displaydigit2(int number) {
        TextView digit2TextView = (TextView) findViewById(R.id.digit2);
        digit2TextView.setText("" + number);
    }

    private void displayanswer(int number) {
        TextView answerTextView = (TextView) findViewById(R.id.show_answer);
        answerTextView.setText("" + number);

    }
}

Убедитесь, что удалили все события onclick в XML-макете своей деятельности, если решили скопировать и вставитькод выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...