簡體   English   中英

如果用戶輸入的字符不是整數,則顯示錯誤消息

[英]error message displays if the user enters a character that isn't an integer

我正在為我所在的班級編寫此程序,並且我已經能夠創建此代碼。 我知道這很亂,我深表歉意。 我需要找到一種方法讓程序阻止用戶輸入除整數之外的任何內容。 如果我有辦法檢查它,我將能夠自己制作一個新的舞台。 如果有任何想法,我很樂意聽到。 同樣,我不是要求任何人為我制作應用程序,我只需要一種方法來檢查是否有除整數以外的字符並在這種情況下做一些事情。 就像一個 for else 循環。 提前致謝。 (這是我第一次使用 JavaFX,所以放輕松:/

import java.util.InputMismatchException;

import org.omg.CORBA.portable.InputStream;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.layout.VBoxBuilder;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.event.*;
public class Lab9Test extends Application  {

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

//launch it all
launch(args);
    }
 @Override //create the grids scenes stages needed to run the program
    public void start(Stage primaryStage) throws Exception {
        // TODO Auto-generated method stub
     final Stage dialogStage = new Stage();
     Label Label1 = new Label ("ERROR! You cannot divide by zero!");
    Button Okay = new Button("Okay!"); 
    GridPane GPane2 = new GridPane();
     GPane2.setAlignment(Pos.TOP_LEFT);
     GPane2.setVgap(10);
        GPane2.setHgap(-32);
        GPane2.setPadding(new Insets(10,10,10,10));
        Scene scene2 = new Scene(GPane2, 222,300);
        GridPane.setConstraints(Okay,4,1);
        GridPane.setConstraints(Label1,0,2);


    VBox root = new VBox();

    dialogStage.setScene(scene2);

     dialogStage.getIcons().add(new 

     GPane2.getChildren().addAll(Label1, Okay);
     Okay.setOnAction(new EventHandler<ActionEvent>(){
            public void handle(ActionEvent event){
                dialogStage.close();    

            }
        });


     primaryStage.setTitle("JavaFX Arithmatic");

        GridPane GPane = new GridPane();

        GPane.setAlignment(Pos.TOP_LEFT);
        GPane.setVgap(10);
        GPane.setHgap(-75);
        GPane.setPadding(new Insets(10,10,10,10));
        Scene scene = new Scene(GPane, 325, 250);


        Button add = new Button();
        add.setText("+");
        Button multiply = new Button();
        multiply.setText("*");
        Button divide = new Button();
        divide.setText("/");
        Button subtract = new Button();
        subtract.setText("-");
        Button percent = new Button();
        percent.setText("%");
        Button clear = new Button();
        clear.setText("CLEAR");



        Text scenetitle = new Text("Enter two numbers and select an operation.");
        Text SecondNumber = new Text("Second Number:");
        Text FirstNumber = new Text("First Number:");
        Text Result = new Text("Result:");
        //create text fields
        final TextField TFFirstNumber = new TextField();
        final TextField TFSecondNumber = new TextField();
        final TextField TFResult = new TextField();

        //change position on grid
        GridPane.setConstraints(FirstNumber,0,1);
        GridPane.setConstraints(SecondNumber,0,2);
        GridPane.setConstraints(Result,0,3);
        GridPane.setConstraints(add,0,4);
        GridPane.setConstraints(multiply,0,5);
        GridPane.setConstraints(percent,0,6);
        GridPane.setConstraints(divide,1,5);
        GridPane.setConstraints(subtract,1,4);
        GridPane.setConstraints(clear,1,6);
        GridPane.setConstraints(scenetitle,0,0);
        GridPane.setConstraints(TFFirstNumber,1,1);
        GridPane.setConstraints(TFSecondNumber,1,2);
        GridPane.setConstraints(TFResult,1,3);

        GPane.getChildren().addAll(TFResult,TFFirstNumber,TFSecondNumber,add,FirstNumber,SecondNumber,Result,subtract,multiply,divide,percent,clear,scenetitle);
        //change size and alter the text fields 
        add.setMaxWidth(150);
        subtract.setMaxWidth(150);
        clear.setMaxWidth(150);
        divide.setMaxWidth(150);
        percent.setMaxWidth(150);
        multiply.setMaxWidth(150);
        TFFirstNumber.setMaxWidth(150);
        TFSecondNumber.setMaxWidth(150);
        TFResult.setMaxWidth(150);
        TFResult.setEditable(false);
        primaryStage.setScene(scene);
        primaryStage.getIcons().add(new 
        primaryStage.show();
        //give all of the buttons a purpose in life
        add.setOnAction(new EventHandler<ActionEvent>(){
            public void handle(ActionEvent event){

            Integer value1  = Integer.valueOf(TFFirstNumber.getText());
            Integer value2  = Integer.valueOf(TFSecondNumber.getText());
            Integer r = value1 + value2;
            TFResult.setText(r.toString());
            }
        });
        subtract.setOnAction(new EventHandler<ActionEvent>(){
            public void handle(ActionEvent event){

                Integer value1  = Integer.valueOf(TFFirstNumber.getText());
                Integer value2  = Integer.valueOf(TFSecondNumber.getText());
                Integer r = value1 - value2;
                TFResult.setText(r.toString());
            }
        });
        multiply.setOnAction(new EventHandler<ActionEvent>(){
            public void handle(ActionEvent event){
                Integer value1  = Integer.valueOf(TFFirstNumber.getText());
                Integer value2  = Integer.valueOf(TFSecondNumber.getText());
                Integer r = value1 * value2;
                TFResult.setText(r.toString());
            }
        });
        divide.setOnAction(new EventHandler<ActionEvent>(){
            public void handle(ActionEvent event){
                Integer value1  = Integer.valueOf(TFFirstNumber.getText());
                Integer value2  = Integer.valueOf(TFSecondNumber.getText());

                if(value2==0){
                    dialogStage.show();
                }
                else{
                    Integer r = value1 / value2;
                    TFResult.setText(r.toString());
                }
            }
        });
        percent.setOnAction(new EventHandler<ActionEvent>(){
            public void handle(ActionEvent event){
                Integer value1  = Integer.valueOf(TFFirstNumber.getText());
                Integer value2  = Integer.valueOf(TFSecondNumber.getText());
                Integer r = value1 % value2;
                TFResult.setText(r.toString());
            }
        });
        clear.setOnAction(new EventHandler<ActionEvent>(){
            public void handle(ActionEvent event){
            TFFirstNumber.clear();
            TFSecondNumber.clear();
            TFResult.clear();
            }
        });
 }





    }

重復提供了一個很好的解決方案,但還有另一種方法:

您可以將整數的解析包裝成這樣的:

public void handle(ActionEvent event) {
    Integer value1 = 0;
    Integer value2 = 0;
    try {
        value1  = Integer.valueOf(TFFirstNumber.getText());
        value2  = Integer.valueOf(TFSecondNumber.getText());
    } catch(Exception e) {
        System.err.println("Wrong input value: needs to be an integer");
        return; // i.e. do mothing more
    }
    Integer r = value1 + value2;
    TFResult.setText(r.toString());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM