Как правильно сгенерировать случайное целое число на основе определенного начального / конечного числа в Android / Java? - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь создать приложение для Android, которое принимает введенный пользователем номер «от» и «до» (диапазон), а затем генерирует случайное целое число из этого диапазона.Я использую 2 EditTexts с number inputType, чтобы пользователь мог ввести свои уникальные значения, а затем я попытался поработать с EditTexts в соответствующих файлах Java (оба файла прилагаются ниже).

Я посмотрел здесь и здесь и здесь .

Тем не менее, Android Studio может создавать (компилировать) мое приложение, но когда я запускаю приложение в эмуляторе (который работал до того, как я добавил эту логику), оно отказывается даже загружать Activity и вместо этого говорит "К сожалению, [приложение] остановилось ".Я думаю, что это как-то связано с тем, что некоторые части кода addTextChangedListener оставлены пустыми, но я не знаю, что именно поместить туда (я взял это из примеров, на которые я ссылался выше).

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

Спасибо!

Вот мой код активности XML:

    <EditText
        android:id="@+id/editText_from"
        android:ems="10"
        android:gravity="center"
        android:hint="@string/string_from"
        android:importantForAutofill="no"
        android:inputType="number" />

    <EditText
        android:id="@+id/editText_to"
        android:ems="10"
        android:gravity="center"
        android:hint="@string/string_to"
        android:importantForAutofill="no"
        android:inputType="number" />

Вот мойJava-код:

package com.example.appname;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;

public class NumberActivity extends AppCompatActivity {
    private EditText editTextFrom;
    private EditText editTextTo;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_number);
        editTextFrom = (EditText) findViewById(R.id.editText_from);
        editTextTo = (EditText) findViewById(R.id.editText_to);
        editTextFrom.setText(editTextFrom.getEditableText());
        editTextTo.setText(editTextTo.getEditableText());
        final int fromValue = 0;
        editTextFrom.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                // What do I put here?
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                // What do I put here?
            }

            @Override
            public void afterTextChanged(Editable s) {
                editTextFrom.setText(fromValue);
            }
        });
        final int toValue = 0;
        editTextTo.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                // What do I put here?
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                // What do I put here?
            }

            @Override
            public void afterTextChanged(Editable s) {
                editTextFrom.setText(toValue);
            }
        });
        int randomNum = ThreadLocalRandom.current().nextInt(fromValue, toValue);
        return;
    }
}

Ответы [ 2 ]

1 голос
/ 03 июня 2019

Итак, вам нужно сгенерировать случайное число между определенным диапазоном.У вас есть кнопка, при нажатии которой вам нужно генерировать это случайное число.Так что это значит?Это означает, что вам не нужно добавлять editText.addTextChangedListener для непрерывного прослушивания изменений текста.

Шаг 1. Создайте метод generateRandomNumber.

private int generateRandomNumberBetweenRange(int from, int to){
    return ThreadLocalRandom.current().nextInt(fromValue, toValue);
}

Шаг 2: Установите для onClickListener значениекнопка, которая есть в вашем XML и в onClick этой кнопки, получить значения из EditText и передать эти значения в функцию, созданную в шаге 1.

button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
              int fromValue = Integer.parseInt(fromValueEditText.getText().toString());
              int toValue = Integer.parseInt(toValueEditText.getText().toString());
              int randomNumber = generateRandomNumberBetweenRange(fromValue, toValue);
              //Your random Number is generated, you can now do whatever you want with it.
              }
          });
0 голосов
/ 03 июня 2019

Я не уверен, что это именно ваша проблема, но кажется, что fromValue и toValue оба установлены как final, что означает, что они не могут измениться после того, как оба были установлены в 0. Это означает, что ваш int randomNum = ThreadLocalRandom.current().nextInt(fromValue, toValue);всегда пытается вызвать nextInt(0,0), который в соответствии с javadocs здесь выдаст IllegalArgumentException.

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