2013-12-01 3 views
0

В методе askCarType() и askSolarPanel() входной диалог запускается два раза, один раз в собственном методе и еще раз в конечном методе PrintOptions().Стоп-метод от запуска дважды

Мне нужно, чтобы они запускались только один раз, и это в конечном методе PrintOptions().

Как я могу это сделать?

import javax.swing.*; 

public class short7 { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     PrintOptions(); 

    }// ends main 

    public static String askCarType() { 
     String typeOfCar; 
     typeOfCar = JOptionPane.showInputDialog("Electric or Hybrid?"); 
     if (!typeOfCar.equals("Electric") 
       && (!typeOfCar.equals("electric") && (!typeOfCar 
         .equals("Hybrid") && (!typeOfCar.equals("hybrid"))))) { 
      JOptionPane 
        .showMessageDialog(null, 
          "You have to choose either an Electric or Hybrid type of car."); 
      typeOfCar = JOptionPane.showInputDialog("Electric or Hybrid?"); 
     } 
     return typeOfCar; 
    }// ends askCarType 

    public static String askSolarPanel() { 
     String wantSolarPanel; 
     wantSolarPanel = JOptionPane 
       .showInputDialog("Do you want a Solar Panel?"); 
     if (!wantSolarPanel.equals("Yes") 
       && (!wantSolarPanel.equals("yes") && (!wantSolarPanel 
         .equals("No") && (!wantSolarPanel.equals("no"))))) { 
      JOptionPane.showMessageDialog(null, 
        "You have to enter either Yes or No"); 
      wantSolarPanel = JOptionPane 
        .showInputDialog("Do you want a Solar Panel?"); 
     } 
     return wantSolarPanel; 
    }// ends askSolarPanel 

    public static int calculateDiscount() { 
     String typeOfCarSelected = askCarType(); 
     String SolarPanelSelected = askSolarPanel(); 
     int Discount = 0; 
     if ((typeOfCarSelected.equals("Electric") || typeOfCarSelected 
       .equals("electric")) 
       && ((SolarPanelSelected.equals("Yes") || SolarPanelSelected 
         .equals("yes")))) { 
      Discount = 500; 
     } else { 
      Discount = 0; 
     } 
     return Discount; 
    }// ends calculateDiscount 

    public static int CalculateCost() { 
     String typeOfCarCost = askCarType(); 
     String SolarPanelCost = askSolarPanel(); 
     final int basicPrice = 20000; 
     final int ElectricModel = 2000; 
     final int SolarPanel = 5000; 
     final int Discount = calculateDiscount(); 
     int total = 0; 

     if ((typeOfCarCost.equals("Electric") || typeOfCarCost 
       .equals("electric")) 
       && ((SolarPanelCost.equals("No") || SolarPanelCost.equals("no")))) { 
      total = basicPrice + ElectricModel; 
      System.out.println("Basic Price:" + basicPrice); 
      System.out.println("Electric Model:" + ElectricModel); 
      System.out.println("Total:" + total); 

     } else if ((typeOfCarCost.equals("Electric") || typeOfCarCost 
       .equals("electric")) 
       && ((SolarPanelCost.equals("Yes") || SolarPanelCost 
         .equals("yes")))) { 
      total = basicPrice + ElectricModel + SolarPanel - Discount; 
      System.out.println("Basic Price:" + basicPrice); 
      System.out.println("Electric Model:" + ElectricModel); 
      System.out.println("Solar Panel:" + SolarPanel); 
      System.out.println("Discount:" + Discount); 
      System.out.println("Total:" + total); 
     } else { 
      total += basicPrice; 
      System.out.println("Basic Price:" + basicPrice); 
      System.out.println("Total:" + total); 
     } 
     return total; 
    }// ends CalculateCost 

    public static void PrintOptions() { 
     CalculateCost(); 
    }// ends PrintOptions 

}// ends class short7 
+1

Я бы порекомендовал вам посетить http://codereview.stackexchange.com/, так как эта программа содержит много проблем: http://stackoverflow.com/questions/20291656/if-statement-operator-being-ignored –

+0

Если вы дважды вызывают 'JOptionPane.showInputDialog', тогда он будет отображаться дважды. Это выглядит очевидно. Что вы пытались сделать, дважды позвонив? – LaurentG

+0

Er, трудно сказать, каким будет подходящий способ для рефакторинга. Но что-то, что может быть разумным, - передать 'typeOfCarCost' и' SolarPanelCost' в 'calculateDiscount()'. Очевидно, вам нужно будет изменить подпись 'calculateDiscount' соответственно. – rliu

ответ

1

вы звоните askCarType() и askSolarPanel() дважды, и то, что вам нужно это назвать их один раз, поэтому их называют в CalculateCost() и послал две строки typeOfCarCost и SolarPanelCost к методу calculateDiscount как это:!

public static int calculateDiscount(String typeOfCarSelected, String SolarPanelSelected) { 
     int Discount = 0; 
     if ((typeOfCarSelected.equals("Electric") || typeOfCarSelected.equals("electric")) && ((SolarPanelSelected.equals("Yes") || SolarPanelSelected.equals("yes")))) { 
      Discount = 500; 
     } else { 
      Discount = 0; 
     } 
     return Discount; 
    }//ends calculateDiscount 

и CalculateCost()

public static int CalculateCost() { 
     String typeOfCarCost = askCarType(); 
     String SolarPanelCost = askSolarPanel(); 
     final int basicPrice = 20000; 
     final int ElectricModel = 2000; 
     final int SolarPanel = 5000; 
     final int Discount = calculateDiscount(typeOfCarCost, SolarPanelCost);/////here you send the input fromthe user to this method without needing to call it again 
     int total = 0; 
     .... 
    } 
+1

Я пытался понять, где я его дважды звонил, но не понял, что это было. И я не знал о том, чтобы отправлять строки таким же методам. Отличное объяснение. – AbbenGabben

0

Вы можете объявить две переменные класса.

String typeOfCar;

String wantSolarPanel;

А в askCarType() метод назначения

typeOfCar = ................

и в askSolarPanel() метод присвойте

wantSolarPanel = .....................

Затем используйте эти переменные из CalculateCost() и calculateDiscount(), а не снова вызовите метод askCarType() и askSolarPanel().

Смежные вопросы