Как рассчитать это, используя целые числа или округляя в каждой скобке? - PullRequest
0 голосов
/ 25 марта 2020

Это закодировано в Java в android studio

Так что я полный нуб в кодировании и у меня проблема с этим калькулятором урона, который я пытаюсь создать для этого mmorpg Я играю на основе формулы расчета, которую разработчик поделился ...

Так вот, как я изначально написал программу:

double skill, bonus, level, attack, min, max, avg, min2, avg2, max2;

EditText txtskill;
EditText txtbonus;
EditText txtlevel;
EditText txtattack;
TextView resmin;
TextView resavg;
TextView resmax;
TextView resmin2;
TextView resavg2;
TextView resmax2;
Button btncalculate;


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

    txtskill = findViewById(R.id.txtskill);
    txtbonus = findViewById(R.id.txtbonus);
    txtlevel = findViewById(R.id.txtlevel);
    txtattack = findViewById(R.id.txtattack);
    resmin = findViewById(R.id.txtmin);
    resavg = findViewById(R.id.txtavg);
    resmax = findViewById(R.id.txtmax);
    resmin2 = findViewById(R.id.txtmin2);
    resavg2 = findViewById(R.id.txtavg2);
    resmax2 = findViewById(R.id.txtmax2);

    btncalculate = findViewById(R.id.btncalculate);
    btncalculate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            skill = Double.parseDouble(txtskill.getText().toString());
            bonus = Double.parseDouble(txtbonus.getText().toString());
            level = Double.parseDouble(txtlevel.getText().toString());
            attack = Double.parseDouble(txtattack.getText().toString());
            DecimalFormat df = new DecimalFormat("0.00");

            min = ((skill + bonus) / 2 + level / 4 + attack) * 0.9;
            max = ((skill + bonus) / 2 + level / 4 + attack) * 1.1;
             avg = (min + max) / 2;
             min2 = min * 1.05;
             max2 = max * 1.05;
             avg2 = avg * 1.05;



            resmin.setText(df.format(min));
            resavg.setText(df.format(avg));
            resmax.setText(df.format(max));
            resmin2.setText(df.format(min2));
            resavg2.setText(df.format(avg2));
            resmax2.setText(df.format(max2));

        }
    });

}

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

Вот как я пытался это исправить:

int skill, bonus, level, attack, min, max, avg, min2, avg2, max2;

EditText txtskill;
EditText txtbonus;
EditText txtlevel;
EditText txtattack;
TextView resmin;
TextView resavg;
TextView resmax;
TextView resmin2;
TextView resavg2;
TextView resmax2;
Button btncalculate;


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

    txtskill = findViewById(R.id.txtskill);
    txtbonus = findViewById(R.id.txtbonus);
    txtlevel = findViewById(R.id.txtlevel);
    txtattack = findViewById(R.id.txtattack);
    resmin = findViewById(R.id.txtmin);
    resavg = findViewById(R.id.txtavg);
    resmax = findViewById(R.id.txtmax);
    resmin2 = findViewById(R.id.txtmin2);
    resavg2 = findViewById(R.id.txtavg2);
    resmax2 = findViewById(R.id.txtmax2);

    btncalculate = findViewById(R.id.btncalculate);
    btncalculate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            skill = Integer.parseInt(txtskill.getText().toString());
            bonus = Integer.parseInt(txtbonus.getText().toString());
            level = Integer.parseInt(txtlevel.getText().toString());
            attack = Integer.parseInt(txtattack.getText().toString());


            min = ((skill + bonus) / 2 + level / 4 + attack) * 0.9;
            max = ((skill + bonus) / 2 + level / 4 + attack) * 1.1;
             avg = (min + max) / 2;
             min2 = min * 1.05;
             max2 = max * 1.05;
             avg2 = avg * 1.05;

// ^^ В этой части, где я начинаю использовать значения для выполнения вычислений, отладчик говорит мне, что ожидает двойной

            resmin.setText(min));
            resavg.setText(avg));
            resmax.setText(max));
            resmin2.setText(min2));
            resavg2.setText(avg2));
            resmax2.setText(max2));

        }
    });

}

Так что мой вопрос: как заставить эту программу использовать целые числа или, по крайней мере, округлить все внутри каждой скобки? Заранее спасибо за ответы!

1 Ответ

0 голосов
/ 25 марта 2020

начните с возврата к двойным значениям в вашем определении переменных от

int skill, bonus, level, attack, min, max, avg, min2, avg2, max2;

обратно к

double skill, bonus, level, attack, min, max, avg, min2, avg2, max2;

Затем на втором шаге будут округлены все числа, прежде чем вернуть их обратно в такие компоненты пользовательского интерфейса, как:

resmin.setText(Math.round(min));

et c.

...