2017-11-02 1 views
1

팝업 창에 3 자리 전화 번호를 입력 할 때 문자가 3 개인 모든 가능한 조합의 목록을 사용자에게 반환하는 프로그램을 작성 중입니다. 알고리즘 코드가 완벽하고 도움이 필요하지 않습니다. 유일한 문제는 오류 메시지와 함께 사용자를 반환하는 것입니다. 빈 입력에 대한 오류 메시지를 반환하는 코드가 정상입니다. 사용자가 잘못된 문자 (2, 3, 4, 5, 6, 7, 8 또는 9 이외의 문자)를 입력하면 은 전체 입력이 잘못된 문자가 아닌 한 오류 메시지를 반환하지 않습니다. 예를 들어, 123을 입력하면 문자열의 유일한 문자가 "1"일 때 오류 창이 팝업되지 않습니다. 그러나 "111"(모든 문자가 유효하지 않음)을 입력하면 오류 메시지가 나타납니다. 모든 문자가 유효하지 않은 상황에서 잘못된 문자가 입력 된 경우 오류 창을 반환하고 싶습니다. 예 : 123을 입력하면 사용자에게 오류 창이 발생합니다.이 상황에서이 Java 오류 창을 어떻게 인쇄합니까?

import javafx.application.Application; 
import javafx.geometry.Pos; 
import javafx.geometry.HPos; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 
import javafx.scene.control.TextField; 
import javafx.scene.layout.GridPane; 
import javafx.stage.Stage; 
import javafx.scene.text.*; 
import javafx.scene.control.Alert; 
import javafx.scene.control.Alert.AlertType; 

public class Runner extends Application 
{ 

    private TextField input = new TextField(); 

    private Button outputButton = new Button("Get all possible mnemonics"); 

    @Override 
    public void start(Stage primaryStage) 
    { 

    GridPane gridPane = new GridPane(); 
    gridPane.setHgap(5); 
    gridPane.setVgap(5); 

    Text sceneMenu = new Text("Phone digits:\n" + "----------\n" + "0: No letters\n" + "1: No letters\n" + 
       "2: ABC\n" + "3: DEF\n" + "4: GHI\n" + "5: JKL\n" + "6: MNO\n" + "7: PQRS\n" + 
       "8: TUV\n" + "9: WXYZ\n"); 
    sceneMenu.setFont(Font.font("Arial", FontWeight.BOLD, 16)); 
    gridPane.add(sceneMenu, 5, 0, 1, 10);      
    gridPane.add(new Label("Enter your three digit phone number:"), 0, 0); 
    gridPane.add(input, 1, 0); 
    gridPane.add(outputButton, 1, 7); 


    gridPane.setAlignment(Pos.CENTER); 
    input.setAlignment(Pos.BOTTOM_RIGHT); Textbox. 
    GridPane.setHalignment(outputButton, HPos.RIGHT); 




    outputButton.setOnAction(e -> { 


    String theInput = input.getText(); 



     if (theInput.isEmpty()) 
     { 
     Alert error1 = new Alert(AlertType.ERROR); 
     error1.setTitle("Blank input"); 
     error1.setHeaderText("BLANK INPUT!"); 
     error1.setContentText("Please enter a three digit number."); 
     error1.showAndWait(); 

     } 

     else 
     { 

     String [] matches = new String[]{"2", "3", "4", "5", "6", "7", "8", "9"}; 

     for (String s : matches) 
     { 
      if (theInput.contains(s)== false) 
      { 
       Alert error2 = new Alert(AlertType.ERROR); 
       error2.setTitle("Invalid digit"); 
       error2.setHeaderText("INVALID DIGIT!"); 
       error2.setContentText("Please enter three digits ranging from 2 through 9"); 
       error2.showAndWait(); 
       break; 
      } 

      else 
      { 
       calculateMnemonics(); 
       break; 
      } 


     }   
     } 

    }); 


    Scene scene = new Scene(gridPane, 700, 600); 
    primaryStage.setTitle("Customer order"); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 

    } 

    private void calculateMnemonics() 
    { 

    String theInput = input.getText(); 


    Calculator calc = new Calculator(theInput); 

    Alert outputWindow = new Alert(AlertType.INFORMATION); 
    outputWindow.setTitle("Mnemonic list"); 
    outputWindow.setHeaderText("Your mnemonic list for your numbers"); 
    outputWindow.setContentText(calc.printMnemonics()); 

    outputWindow.showAndWait(); 

    } 


    public static void main(String[]args) 
    { 
    launch(args); 
    } 
} 

import java.util.List; 
import java.util.LinkedList; 
import java.util.Arrays; 
public class Calculator 
{ 
    private String inputtedNumbers; 


    public Calculator() 
    { 
     this(""); 
    } 


    public Calculator(String inputtedNumbers) 
    { 
     this.inputtedNumbers = inputtedNumbers; 
    } 

    public String getInputtedNumbers() 
    { 
     return inputtedNumbers; 
    } 
    public void setInputtedNumbers(String inputtedNumbers) 
    { 
     this.inputtedNumbers = inputtedNumbers; 
    } 

    public List<String> listMnemonics(String digits) 
    { 
     String[] letters = {"ABC", "DEF", "GHI", "JKL", "MNO", "PQRS", "TUV", "WXYZ"}; 
     List<String> rec = new LinkedList<>(); 
     StringBuilder string = new StringBuilder(); 
     listMnemonics(digits, 0, letters, string, rec); 
     return rec; 
    } 

    private void listMnemonics(String digits, int number, String[] letters, StringBuilder string, List<String> rec) 
{ 
     if (digits.length() == number) 
     { 
      rec.add(string.toString()); 
      return; 
     } 
     String letter = letters[digits.charAt(number) - '2']; 
     for (int i = 0; i < letter.length(); i++) 
     { 
      string.append(letter.charAt(i)); 
      listMnemonics(digits, number + 1, letters, string, rec); 
      string.deleteCharAt(string.length() - 1); 
     } 


    } 


    public String printMnemonics() 
    { 
      Calculator o = new Calculator(); 
      List<String> list1 = o.listMnemonics(inputtedNumbers); 
      String [] stringArray = list1.toArray(new String[0]); 
      return Arrays.toString(stringArray);  
    } 
} 
+0

꽤 분명합니다. 'theInput.contains (s)'은''123 ".contains ("2 ")'이 될 것이므로 if 문은 실행되지 않습니다. 아마도'matches'를 정규 표현식으로 만들고 그 방법으로 유효성 검사를 할 것입니다. –

답변

0

다음은 트릭

if (!theInput.matches("[2-9]+")) 
{ 
    Alert error2 = new Alert(AlertType.ERROR); 
    error2.setTitle("Invalid digit"); 
    error2.setHeaderText("INVALID DIGIT!"); 
    error2.setContentText("Please enter three digits ranging from 2 through 9"); 
    error2.showAndWait(); 
} 
else 
{ 
    calculateMnemonics(); 
} 

이 솔루션은 (짧은에 대한 정규식) Regular Expressions를 사용합니다에게해야 할 다음과 같습니다. 제공된 String2에서 모든 문자를 일치하는 경우는 테스트 - 9 한 번 이상 (즉, +가하고있는거야)

입력이 비어있는 경우도 확인합니다, 그래서 당신이 원하는 경우에 대한 별도의 검사를 도랑 수 공. 이 방법으로 공백을 검사하지 않으려면 !theInput.matches("[2-9]*")*으로 사용할 수 있습니다. 이전 부분이 0 번 이상 있는지 확인합니다.

+0

감사합니다. 이것은 완전히 내 문제를 해결하고 내 프로그램이 끝나고 실행됩니다. – potanta

관련 문제