Преобразование массива строк в int с помощью JOptionPane

avatar
marinated cucumber
1 июля 2021 в 16:11
94
1
1

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

напр.

String[] option_1 = {"location1","location2", "location3","location4","location5"};

где местоположение1 = 10 долларов США, местоположение2 = 23 доллара США и т. д.

все, что я знаю, это то, что я мог бы использовать Interger.parseInt или double, но я не знаю, что делать дальше. Должен ли я использовать цикл или создать совершенно новый массив и сделать его равным массиву строк. Мне интересно, есть ли более простой способ выполнить это.

код :

public static void main (String [] args) {
        String name;
                    
        String[] option_1 = {"North Avenue","Quezon Avenue", "Kamuning","Cubao","Santolan","Ortigas","Shaw","Boni","Guadalupe","Buendia","Ayala","Magallanes","Taft"};
        String[] option_2 = {"North Avenue","Quezon Avenue", "Kamuning","Cubao","Santolan","Ortigas","Shaw","Boni","Guadalupe","Buendia","Ayala","Magallanes","Taft"};
        
        name = JOptionPane.showInputDialog("Welcome to DME Ticketing System!\n\nEnter your name:");
        String leave = (String)JOptionPane.showInputDialog(null, "Leaving from", 
                "Train Station", JOptionPane.QUESTION_MESSAGE, null, option_1, option_1[0]);
        
        String  going = (String)JOptionPane.showInputDialog(null, "Leaving from", 
                "Train Station", JOptionPane.QUESTION_MESSAGE, null, option_2, option_2[0]);
       // int  pay = (Integer)JOptionPane.showInputDialog(null, "From: "+leave+"\nTo: "+going+"\nFare Price: "+"\n\nEnter your payment amount:", 
           // null, JOptionPane.PLAIN_MESSAGE, null, null,null);
   
       // int op1 = Integer.parseInt(going); 
       // int op2 = Integer.parseInt(leave);         
        

        JOptionPane.showMessageDialog(null, "DME Ticketing System\nMalolos, Bulacan\n\n"
                + "Name: "+name
                +"\nLocation: "+leave
                +"\nDestination: "+going
                +"\nFare: "
                +"\nPayment: "//+pay
                +"\nChange: "
                , "RECEIPT",JOptionPane.INFORMATION_MESSAGE);
    }

- Коды, которые я превратил в комментарии, выдают мне ошибки

Источник
Abra
1 июля 2021 в 18:26
1

Я считаю, что это поможет: Создание графического интерфейса с помощью JFC/Swing

gthanop
2 июля 2021 в 12:52
0

Вводит ли пользователь сумму платежа? Я спрашиваю об этом, потому что в ваших комментариях кажется, что JOptionPane запрашивает оплату у пользователя. Если, с другой стороны, вы пытаетесь сопоставить местоположения (Strings) с их значением (ints), тогда должно быть достаточно HashMap<String,Integer> (или, возможно, некоторых массивов или списков).

marinated cucumber
2 июля 2021 в 14:10
0

Да, пользователь будет вводить сумму платежа, потому что я буду рассчитывать сдачу в квитанции. И спасибо, я буду пробовать эти методы.

Ответы (1)

avatar
gthanop
4 июля 2021 в 13:38
1

showInputDialog всегда возвращает ввод пользователя как объект String, за исключением варианта, когда он возвращает выбранный Object из предоставленных. Я говорю для Java версии 8 для примера.

Основываясь на вашем вопросе и комментариях, вы в основном хотите:

  1. Сопоставьте String объектов (их имена) с целыми числами (их стоимость), чтобы вы могли рассчитать, сколько им придется заплатить, плюс сдачу после этого.
  2. Получить от пользователя сумму, которую он даст, чтобы рассчитать сдачу.

Если так, то:

  1. В первом случае вы можете использовать некоторые структуры данных, из которых вы сможете сопоставить местоположения с их значением. Например, HashMap<String, Integer> может сопоставлять местоположения с их значением, например:
  2. .
//Set up the origin options, along with their value:
HashMap<String, Integer> leavingOptions = new HashMap<>();
leavingOptions.put("North Avenue", 10);
leavingOptions.put("Quezon Avenue", 11);
leavingOptions.put("Kamuning", 12);
leavingOptions.put("Cubao", 13);
leavingOptions.put("Santolan", 14);
leavingOptions.put("Ortigas", 15);
leavingOptions.put("Shaw", 16);
leavingOptions.put("Boni", 17);
leavingOptions.put("Guadalupe", 18);
leavingOptions.put("Buendia", 19);
leavingOptions.put("Ayala", 20);
leavingOptions.put("Magallanes", 21);
leavingOptions.put("Taft", 22);

//Get user input for origin:
Object[] leavingOptionsArray = leavingOptions.keySet().toArray();
String leaving = (String) JOptionPane.showInputDialog(null, "Leaving from:", "Train Station", JOptionPane.QUESTION_MESSAGE, null, leavingOptionsArray, leavingOptionsArray[0]);

//Show output depending on user's input or cancel:
if (leaving != null)
    JOptionPane.showMessageDialog(null, "You shall pay: " + leavingOptions.get(leaving));
else
    JOptionPane.showMessageDialog(null, "Quiting...");

(здесь обратите внимание, что приведение возвращаемого значения showInputDialog к ссылке String безопасно только потому, что способ, которым мы настроили массив параметров, содержит только объекты String)

Или вы можете использовать массив String с местоположениями вместе с массивом int с соответствующими значениями, например:

//Set up the origin options, along with their price:
String[] leavingOptions2 = new String[]{"North Avenue","Quezon Avenue", "Kamuning","Cubao","Santolan","Ortigas","Shaw","Boni","Guadalupe","Buendia","Ayala","Magallanes","Taft"};
int[] price = new int[]{10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22};

//Get user input for origin:
Object leaving2 = JOptionPane.showInputDialog(null, "Leaving from:", "Train Station", JOptionPane.QUESTION_MESSAGE, null, leavingOptions2, leavingOptions2[0]);

//Show output depending on user's input or cancel:
if (leaving2 != null) {

    //Find the price of the selected location:
    int p = -1;
    for (int i = 0; i < price.length; ++i)
        if (leaving2.equals(leavingOptions2[i])) {
            p = price[i];
            break;
        }

    JOptionPane.showMessageDialog(null, "You shall pay: " + p);
}
else
    JOptionPane.showMessageDialog(null, "Quiting...");

Или, что еще лучше, вы можете использовать другой тип объекта, отличный от String для массива параметров, например, класс с именем Location, который будет иметь name и price в качестве свойств, toString метод которого вернет name.

  1. Для второй части получите ввод пользователя как String из JOptionPane и используйте метод Integer.parseInt(...) для ввода пользователя, чтобы иметь возможность впоследствии вычислить изменение, например:
String paymentString = JOptionPane.showInputDialog(null, "Enter payment amount:", "Payment", JOptionPane.QUESTION_MESSAGE);

if (paymentString != null) {
    try {
        int payment = Integer.parseInt(paymentString);
        JOptionPane.showMessageDialog(null, "You chose to pay: " + payment);
        //Calculate change here...
    }
    catch (final NumberFormatException exception) {
        JOptionPane.showMessageDialog(null, "The input was invalid (not an 'int').");
    }
}
else
    JOptionPane.showMessageDialog(null, "Quiting...");

Помните, что parseInt выдаст NumberFormatException (то есть RuntimeException), если его ввод String не является int, так что вам придется проверить это, используя <264792714>-364792614>-364792614>-364792614> catch> блок.