팝업 창에 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);
}
}
꽤 분명합니다. 'theInput.contains (s)'은''123 ".contains ("2 ")'이 될 것이므로 if 문은 실행되지 않습니다. 아마도'matches'를 정규 표현식으로 만들고 그 방법으로 유효성 검사를 할 것입니다. –