При нажатии на кнопку "Работать" выдается сумма: начальная 1, после покупки сумма должна увеличится, но нет

Я попробовал самые разные варинаты, но ни один не подошёл. Нето что бы сильно глупый, и вообще 3 недели изучаю джаву. Позавчера решил познать себя в androidStudio, и понимаю что получилась ошибка которую я не могу убрать.

После покупки за клик должны давай +3 или взависимости от покупки, но после покупки деньги забирают, а вот бонус нет. Как и была. Так и есть..

Сам код:

package com.zeinc.weiss;

import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;

import java.util.ArrayList;
import java.util.Arrays;

public class MainActivity extends AppCompatActivity {

    private double balance = 100.0;
    private TextView balanceTextView;
    private Button interestingButton;
    private Button shopButton;
    private TextView Line;
    private TextView Proc;
    private TextView Mat;
    private TextView Vid;
    private ListView shopListView;
    private String[] shopItems = {"Процессор: Mentol R1 @1 | 350$", "Видеокарта: GIFarce Ni: Gs. R11 | 150$", "Процессор: Mentol Ciron 4 | 650$" };

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

        balanceTextView = findViewById(R.id.balanceTextView);
        interestingButton = findViewById(R.id.interestingButton);
        shopButton = findViewById(R.id.shopButton);
        Line = findViewById(R.id.Line);
        Proc = findViewById(R.id.Proc);
        Mat = findViewById(R.id.Mat);
        shopListView = findViewById(R.id.shopListView);
        Vid = findViewById(R.id.Vid);
        Shop();

        interestingButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                handleInterestingButtonClick();
            }
        });

        shopButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                toggleShopListViewVisibility();
            }
        });

        shopListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                handleShopItemClick(position);
            }
        });
    }

    private void toggleShopListViewVisibility() {
        if (shopListView.getVisibility() == View.VISIBLE) {
            shopListView.setVisibility(View.GONE);
        } else {
            shopListView.setVisibility(View.VISIBLE);
        }
    }

    private void Shop() {
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, shopItems);
        shopListView.setAdapter(adapter);
        shopListView.setVisibility(View.GONE);
    }

    private void handleInterestingButtonClick() {
        balance += 1.0;
        updateBalanceText();
        updateBackground();
    }

    private void handleShopItemClick(int position) {
        String selectedItem = shopItems[position];
        String[] itemInfo = selectedItem.split("\\|");
        String itemName = itemInfo[0].trim();
        String itemPriceString = itemInfo[1].trim();
        double itemPrice = Double.parseDouble(itemPriceString.replace("$", "").trim());

        if (balance >= itemPrice) {
            balance -= itemPrice;
            updateBalanceText();

            Toast.makeText(this, "Успешная покупка: " + itemName, Toast.LENGTH_SHORT).show();

            if (selectedItem.contains("Процессор")) {
                Proc.setText("" + itemName);
                handleIncomeFromProcessor(itemName);
            } else if (selectedItem.contains("Видеокарта")) {
                Vid.setText("" + itemName);
                handleIncomeFromGraphicsCard(itemName);
            }

            ArrayList<String> updatedShopItems = new ArrayList<>(Arrays.asList(shopItems));
            updatedShopItems.remove(position);
            shopItems = updatedShopItems.toArray(new String[0]);
            Shop();
        } else {
            Toast.makeText(this, "Тебе не хватает денег для покупки: " + itemName, Toast.LENGTH_SHORT).show();
        }
    }

    private void handleIncomeFromProcessor(String processorName) {
        // Логика для управления доходом от процессора
        if (processorName.equals("Mentol R1")) {
            balance += 5.0;  // Увеличиваем доход на 5
        } else if (processorName.equals("Mentol Ciron 4")) {
            balance += 10.0;  // Увеличиваем доход на 10
        }
        updateBalanceText();
    }

    private void handleIncomeFromGraphicsCard(String graphicsCardName) {
        // Логика для управления доходом от видеокарты
        if (graphicsCardName.equals("GIFarce Ni: Gs. R11")) {
            balance += 3.0;  // Увеличиваем доход на 3
        }
        updateBalanceText();
    }

    private void updateBalanceText() {
        balanceTextView.setText("Баланс: $" + String.format("%.2f", balance));
    }

    private void updateBackground() {
        findViewById(android.R.id.content).setBackgroundResource(R.drawable.dark_background);
    }
}

Ответы (1 шт):

Автор решения: Котлетка еее

В методе handleShopItemClick(int position) разделение идёт по символу |:

    String[] itemInfo = selectedItem.split("\\|");
    String itemName = itemInfo[0].trim();

Такой символ у вас в каждой строке продукта один, и разделяет он название продукта и его цену. Так что при покупке, например, процессора, у которого selectedItem был "Процессор: Mentol R1 @1 | 350$", itemInfo[0] будет равен "Процессор: Mentol R1 @1 ", а itemName будет равен "Процессор: Mentol R1 @1".

Поэтому у вас в методах handleIncomeFromProcessor(String processorName) и handleIncomeFromGraphicsCard(String graphicsCardName) не распознаются товары, и, следовательно, не начисляется бонус на баланс, так как проверка идёт без первого слова "Процессор:", а также без символа "@1":

if (processorName.equals("Mentol R1")) {
    balance += 5.0;  // Увеличиваем доход на 5
}

Вы можете заменить equals() на contains(), то есть не является ли строка такой же, а содержит ли в себе эту подстроку.

Такие проблемы легче решать и обнаруживать их причину, если запускать программу в режиме дебагера (Debug) и построчно смотреть, как выполняется программа, в каких переменных какие значения записаны.

→ Ссылка