MainActivity.java

import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

private EditText etFrom, etTo, etDistance;
private Spinner spVehicle;
private Button btnCalculate;
private TextView tvResult;

private String selectedVehicle;
private String[] vehicles = {“Тягач”, “Фургон”, “Пикап”};

private double[] vehiclePrices = {15, 20, 10, 25, 30, 20, 10, 15, 5};

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

// Получение ссылок на элементы пользовательского интерфейса
etFrom = findViewById(R.id.et_from);
etTo = findViewById(R.id.et_to);
etDistance = findViewById(R.id.et_distance);
spVehicle = findViewById(R.id.sp_vehicle);
btnCalculate = findViewById(R.id.btn_calculate);
tvResult = findViewById(R.id.tv_result);

// Создание адаптера для спиннера
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, vehicles);

// Установка адаптера для спиннера
spVehicle.setAdapter(adapter);
spVehicle.setOnItemSelectedListener(this);

// Установка слушателя для кнопки “Рассчитать”
btnCalculate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calculate();
}
});
}

private void calculate() {

// Получение значений входных данных
String from = etFrom.getText().toString();
String to = etTo.getText().toString();
String distanceString = etDistance.getText().toString();

// Проверка наличия значений входных данных
if (from.length() == 0) {
Toast.makeText(this, R.string.error_from, Toast.LENGTH_SHORT).show();
return;
}
if (to.length() == 0) {
Toast.makeText(this, R.string.error_to, Toast.LENGTH_SHORT).show();
return;
}
if (distanceString.length() == 0) {
Toast.makeText(this, R.string.error_distance, Toast.LENGTH_SHORT).show();
return;
}

double distance = Double.parseDouble(distanceString);

// Расчет итоговой стоимости маршрута
double totalPrice = findPrice(selectedVehicle) * distance;

// Отображение результата
tvResult.setText(getString(R.string.result, selectedVehicle, from, to, distanceString, totalPrice));
}

private double findPrice(String vehicle) {

// Поиск стоимости автомобиля
int index = 0;

for (int i = 0; i < vehicles.length; i++) {
if (vehicles[i].equals(vehicle)) {
index = i;
break;
}
}

return vehiclePrices[index];
}

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// Получение выбранного автомобиля
selectedVehicle = (String) parent.getItemAtPosition(position);
}

@Override
public void onNothingSelected(AdapterView<?> parent) {
selectedVehicle = “Тягач”;
}

}


activity_main.xml

<RelativeLayout xmlns:android=“http://schemas.android.com/apk/res/android”
xmlns:tools=“http://schemas.android.com/tools” android:layout_width=“match_parent”
android:layout_height=“match_parent”
tools:context=“.MainActivity”>

<EditText
android:id=“@+id/et_from”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:hint=“@string/hint_from”
android:inputType=“textCapWords”
android:padding=“16dp”
android:textSize=“18sp”
android:layout_marginTop=“16dp”/>

<EditText
android:id=“@+id/et_to”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:hint=“@string/hint_to”
android:inputType=“textCapWords”
android:padding=“16dp”
android:textSize=“18sp”
android:layout_below=“@+id/et_from”/>

<EditText
android:id=“@+id/et_distance”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:hint=“@string/hint_distance”
android:inputType=“numberDecimal”
android:padding=“16dp”
android:textSize=“18sp”
android:layout_below=“@+id/et_to”/>

<Spinner
android:id=“@+id/sp_vehicle”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:layout_marginTop=“16dp”
android:prompt=“@string/prompt_vehicle”
android:padding=“16dp”
android:textSize=“18sp”
android:layout_below=“@+id/et_distance”/>

<Button
android:id=“@+id/btn_calculate”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:text=“@string/btn_calculate”
android:textSize=“18sp”
android:layout_marginTop=“16dp”
android:layout_below=“@+id/sp_vehicle”/>

<TextView
android:id=“@+id/tv_result”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:textSize=“18sp”
android:padding=“16dp”
android:layout_marginTop=“16dp”
android:text=“@string/result”
android:layout_below=“@+id/btn_calculate”/>

</RelativeLayout>


strings.xml

<resources>
<string name=“app_name”>Грузоперевозка</string>
<string name=“hint_from”>Откуда</string>
<string name=“hint_to”>Куда</string>
<string name=“hint_distance”>Расстояние (км)</string>
<string name=“prompt_vehicle”>Выберите автомобиль</string>
<string name=“btn_calculate”>Рассчитать</string>
<string name=“result”>Вы выбрали %1$s.\n\nМаршрут: от %2$s до %3$s, расстояние %4$s км.\n\nЦена: %.2f руб.</string>
<string name=“error_from”>Введите место отправления</string>
<string name=“error_to”>Введите место назначения</string>
<string name=“error_distance”>Введите расстояние</string>
</resources>
почему не работает