При нажатии на кнопку "Работать" выдается сумма: начальная 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) и построчно смотреть, как выполняется программа, в каких переменных какие значения записаны.