Почему происходит ошибка "createDisableExceptionQarthFile method fail"?

Рейтинг: -1Ответов: 1Опубликовано: 06.02.2023

Я пишу своё приложение. Оно работало безошибочно, но после добавления новых функций появились проблемы. После нажатия клавиши происходит ошибка:

get PatchStore::createDisableExceptionQarthFile method fail.

Класс подсчёта:

package com.example.carapp;
import android.widget.TextView;
public class Calculate {
    static int[] benzmoney= {12,8,10};
    static float[] factor = {1F, 0.5F,1F};
    static int[][] carprice ={{1,2,3,4},{7,8,9,10}};

    public static float calculateresult(int position,float fresult,int carposition) {
        float alfa;
        if (fresult == 0) {
            return 0;
        } else if (fresult < 10000){
            return (0);
        } else{
            try {
                alfa = (fresult * factor[position]);
            } catch (){
                alfa = fresult * 1F;
            }
            float v = alfa / 10000 * carprice[carposition][0] + alfa / 40000 * carprice[position][1] + alfa / 80000 * carprice[position][2] + alfa / 150000 * carprice[position][3];
            return v;
        }
    }
    public static float calculatebenz(int position,float fresult,float cost){
        float a=(fresult/100)*cost*benzmoney[position];
        return a;
    }
}

В других частях ошибок нет, всё работает. Основной код приложения:

package com.example.carapp;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;

import java.text.NumberFormat;

public class carapp extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.carapp);
        Spinner typeofroad = (Spinner) findViewById(R.id.typeofroad);
        ArrayAdapter<CharSequence> typeofroadAdapter = ArrayAdapter
                .createFromResource(this,R.array.typesofroad, android.R.layout.simple_spinner_item);
        typeofroadAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        typeofroad.setAdapter(typeofroadAdapter);
        Spinner car = (Spinner) findViewById(R.id.cars);
        ArrayAdapter<CharSequence> carAdapter = ArrayAdapter.createFromResource(this,R.array.cars, android.R.layout.simple_spinner_item);
        carAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        car.setAdapter(carAdapter);
        final EditText probegavto = (EditText) findViewById(R.id.probeg);
        final EditText resultmoney = (EditText) findViewById(R.id.resultnumber);
        final EditText resultbenz = (EditText) findViewById(R.id.benz);
        final EditText benzcost = (EditText) findViewById(R.id.costofbenz);
        TextView itog = findViewById(R.id.inogogogog);

        probegavto.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                recalc();
            }

            @Override
            public void afterTextChanged(Editable editable) {
            }
            public void recalc(){
                float fresult;
                try {
                    fresult = Float.parseFloat(probegavto.getText().toString());
                } catch (NumberFormatException e) {
                    fresult=0;
                }
                int position = typeofroad.getSelectedItemPosition();
                int carposition = car.getSelectedItemPosition();
                float fotvet = Calculate.calculateresult(position,fresult,carposition);
                float cost;
                try {
                    cost = Float.parseFloat(benzcost.getText().toString());
                } catch (NumberFormatException e) {
                    cost = 0;
                }
                float fotvet1 = Calculate.calculatebenz(position,fresult,cost);
                if (fresult==0 || fresult>9999){
                    itog.setText(" ");
                } else{
                    itog.setText("Хватит на "+(int)(Math.floor(10000/fresult))+" раз(а)");
                }
                resultmoney.setText(NumberFormat.getInstance().format(fotvet)+" ₽");
                resultbenz.setText(NumberFormat.getInstance().format(fotvet1)+" ₽");
            }
            });
        typeofroad.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                recalc();
            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {

            }

            public void recalc(){
                float fresult;
                try {
                    fresult = Float.parseFloat(probegavto.getText().toString());
                } catch (NumberFormatException e) {
                    fresult=0;
                }
                int position = typeofroad.getSelectedItemPosition();
                int carposition = car.getSelectedItemPosition();
                float fotvet = Calculate.calculateresult(position,fresult,carposition);
                float cost;
                try {
                    cost = Float.parseFloat(benzcost.getText().toString());
                } catch (NumberFormatException e) {
                    cost = 0;
                }
                float fotvet1 = Calculate.calculatebenz(position,fresult,cost);
                if (fresult==0 || fresult>9999){
                    itog.setText(" ");
                } else{
                    itog.setText("Хватит на "+(int)(Math.floor(10000/fresult))+" раз(а)");
                }
                resultmoney.setText(NumberFormat.getInstance().format(fotvet)+" ₽");
                resultbenz.setText(NumberFormat.getInstance().format(fotvet1)+" ₽");
            }
        });
        car.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                recalc();
            }

            private void recalc(){
                float fresult;
                try {
                    fresult = Float.parseFloat(probegavto.getText().toString());
                } catch (NumberFormatException e) {
                    fresult=0;
                }
                int position = typeofroad.getSelectedItemPosition();
                int carposition = car.getSelectedItemPosition();
                float fotvet = Calculate.calculateresult(position,fresult,carposition);
                float cost;
                try {
                    cost = Float.parseFloat(benzcost.getText().toString());
                } catch (NumberFormatException e) {
                    cost = 0;
                }
                float fotvet1 = Calculate.calculatebenz(position,fresult,cost);
                if (fresult==0 || fresult>9999){
                    itog.setText(" ");
                } else{
                    itog.setText("Хватит на "+(int)(Math.floor(10000/fresult))+" раз(а)");
                }
                resultmoney.setText(NumberFormat.getInstance().format(fotvet)+" ₽");
                resultbenz.setText(NumberFormat.getInstance().format(fotvet1)+" ₽");
            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {

            }
        });
        benzcost.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                recalc();
            }

            @Override
            public void afterTextChanged(Editable editable) {
            }
            public void recalc(){
                float fresult;
                try {
                    fresult = Float.parseFloat(probegavto.getText().toString());
                } catch (NumberFormatException e) {
                    fresult=0;
                }
                int position = typeofroad.getSelectedItemPosition();
                int carposition = car.getSelectedItemPosition();
                float fotvet = Calculate.calculateresult(position,fresult,carposition);
                float cost;
                try {
                    cost = Float.parseFloat(benzcost.getText().toString());
                } catch (NumberFormatException e) {
                    cost = 0;
                }
                float fotvet1 = Calculate.calculatebenz(position,fresult,cost);
                if (fresult==0 || fresult>9999){
                    itog.setText(" ");
                } else{
                    itog.setText("Хватит на "+(int)(Math.floor(10000/fresult))+" раз(а)");
                }
                resultmoney.setText(NumberFormat.getInstance().format(fotvet)+" ₽");
                resultbenz.setText(NumberFormat.getInstance().format(fotvet1)+" ₽");
            }
        });
        }
    }

Приложение считало на статических данных. Я создал массив, carprice, из него оно будет брать значения, подставлять, и вроде бы всё работает. Но если переключить на другой тип дороги, изменится число на которое будет домножение (массив factor), на маленьких числах всё работает идеально, но если числа больше 10000, то приложение вылетает на главный экран, выдавая ошибку:

E/.example.carap: [qarth_debug:]  get PatchStore::createDisableExceptionQarthFile method fail.
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.carapp, PID: 22346
    java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
        at com.example.carapp.Calculate.calculateresult(Calculate.java:18)
        at com.example.carapp.carapp$2.recalc(carapp.java:97)
        at com.example.carapp.carapp$2.onItemSelected(carapp.java:80)
        at android.widget.AdapterView.fireOnSelected(AdapterView.java:947)
        at android.widget.AdapterView.dispatchOnItemSelected(AdapterView.java:936)
        at android.widget.AdapterView.access$300(AdapterView.java:56)
        at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:901)
        at android.os.Handler.handleCallback(Handler.java:907)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:216)
        at android.app.ActivityThread.main(ActivityThread.java:7625)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)

Ответы

▲ 0

Ошибка ArrayIndexOutOfBoundsException: length=2; index=2 , проверьте сколько элементов в вашем массиве при вызове и что возвращает car.getSelectedItemPosition(). Очевидно значение > 2