2017-02-22 29 views
-2
import javax.swing.*; 
public class CarCareChoice2 
{ 
    public static void main(String[] args) 
    { 
    final int NUM_OF_ITEMS = 8; 
    String[] validChoices = {"oil change", "tire rotation", "battery check", "brake inspection"}; 
    int[] prices = {25, 22, 15, 5}; 
    String strOptions; 
    String careChoice; 
    double choicePrice = 0.0; 
    boolean validChoice = false; 
    strOptions = JOptionPane.showInputDialog(null, "Please enter one of the following care options: oil change, tire rotation, battery check, or brake inspection"); 
    careChoice = strOptions; 
    for(int x = 0; x < NUM_OF_ITEMS; ++x) 
    { 
     if(careChoice.equals(validChoices[x])) 
     { 
      validChoice = true; 
      choicePrice = prices[x]; 
     } 
    } 
    if(validChoice) 
     JOptionPane.showMessageDialog(null, "The price of a(an) " + careChoice + " is $" + choicePrice); 
    else 
     JOptionPane.showMessageDialog(null, "Sorry - invalid entry"); 

    } 
} 

Пользователь должен только ввести первые 3 буквы услуги и получить услугу, которую они ввели, и соответствующую цену. Вот мой код до сих пор.Выходное слово с запрошенной частью

+2

В чем ваша проблема –

+0

Пользователь должен только вводить первые 3 буквы услуги и получать услугу, которую они ввели, и соответствующую цену. – Jokes

+0

вы не объясните свою проблему. –

ответ

0

Пользователь должен ввести только первые 3 буквы сервиса и получить услугу они вошли и его соответствие цена

Это не выглядит как подход я использовал бы, это не пользователь дружеский (ИМХО), есть и другие способы ее решения (заказанные в том, как я думаю, что бы решить это лучший)

  1. Используя showInputDialog с заранее определенными параметрами, которые будут выглядеть как JComboBox

    enter image description here

  2. Использование пользовательских JPanel, который будет принят в качестве сообщения и использовать JRadioButton сек так что пользователь может выбрать один из них (конечно, вы можете изменить layout manager выглядеть иначе

    enter image description here

  3. И, наконец, уродливый способ попросить пользователя написать его и сравнить с использованием .toLowerCase() как с переменной services, так и с переменной userInput, используя .startsWith() метод (который является то, что вы пытаетесь достичь):

    enter image description here

Где все они производят подобный вывод такой:

enter image description here

Комментарий/раскомментировать каждый из методов, чтобы увидеть, как они себя ведут, и, соответственно, выбирать код, который производит каждый из вышеперечисленных выходов:

import java.awt.Component; 

import javax.swing.ButtonGroup; 
import javax.swing.JFrame; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.JRadioButton; 
import javax.swing.SwingUtilities; 

public class CarCareChoice { 

    private JFrame frame; 
    private String[] services = {"Oil change", "Tire rotation", "Battery check", "Brake inspection"}; 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       CarCareChoice carCareChoice = new CarCareChoice(); 
//    carCareChoice.comboWay(); 
//    carCareChoice.radioWay(); 
       carCareChoice.textUglyWay(); 
      } 
     }); 
    } 

    public void comboWay() { 
     frame = new JFrame(); 

     String userSelection = (String) JOptionPane.showInputDialog(frame, "Please select one of the following", "Service selection", 
       JOptionPane.PLAIN_MESSAGE, null, services, services[0]); 

     if (userSelection != null) { 
      JOptionPane.showMessageDialog(frame, "The service selected was: " + userSelection); 
     } 
    } 

    public void radioWay() { 
     frame = new JFrame(); 
     JPanel pane = new JPanel(); 
     JRadioButton[] buttons = new JRadioButton[services.length]; 
     ButtonGroup group = new ButtonGroup(); 

     for (int i = 0; i < buttons.length; i++) { 
      buttons[i] = new JRadioButton(services[i]); 
      group.add(buttons[i]); 
      pane.add(buttons[i]); 
     } 

     int option = JOptionPane.showConfirmDialog(frame, pane, "Service selection", JOptionPane.PLAIN_MESSAGE, JOptionPane.YES_NO_OPTION); 

     JRadioButton userSelection = null; 

     if (option == JOptionPane.YES_OPTION) { 
      for (Component c : pane.getComponents()) { 
       if (c instanceof JRadioButton) { 
        if (((JRadioButton) c).isSelected()) { 
         userSelection = (JRadioButton) c; 
         break; 
        } 
       } 
      } 
      if (userSelection != null) { 
       JOptionPane.showMessageDialog(frame, "Service selected: " + userSelection.getText()); 
      } else { 
       JOptionPane.showMessageDialog(frame, "C'mon man! Select something"); 
      } 
     } 
    } 

    public void textUglyWay() { 
     frame = new JFrame(); 

     String userSelection = (String) JOptionPane.showInputDialog(frame, "Please select one of the following", "Service selection", 
       JOptionPane.PLAIN_MESSAGE); 

     if (userSelection != null && !userSelection.equals("")) { 
      for (String s : services) { 
       if (s.toLowerCase().startsWith(userSelection.toLowerCase())) { 
        userSelection = s; 
        break; 
       } 
      } 
      JOptionPane.showMessageDialog(frame, "The service selected was: " + userSelection); 
     } 
    } 
} 

Важное примечание:

Ваша программа также не помещается на Event Dispatch Thread (EDT), которые могли бы вызвать некоторые вопросы многопоточности в будущем, так что не забудьте разместить все свои программы в нем, как я сделал с:

public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      //Your constructor here 
     } 
    }); 
}