public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("Enter A to Add Customer\nEnter V to View Customers"); System.out.print("Enter Your Option : "); String option = input.next(); getInput(option); Application.launch(args); } public void start(Stage stage) { stage.setTitle("Train Booking System"); Scene window = makeButtons(); stage.setScene(window); stage.show(); } public static String getInput(String Input){ return Input; } public static Scene makeButtons() { GridPane layout = new GridPane(); Scene window = new Scene(layout, 1366, 768); for (int column = 1; column <= 10; column++) { Button btn = new Button(); layout.add(btn, column, column); btn.setId("btn"); Button finalBtn = btn; if (getInput().equals("A")) btn.setOnAction(e -> { finalBtn.setStyle("-fx-background-color: #FF3EA5FF"); }); } return window; } I am making a software like to add a booking and I should store it (which I have to do still) , also I have the option to view bookings so in this case I dont want to be able to click the button.How do I set the buttons' action in the if condition without getting the input again as the input will be asked again
4 Réponses :
Est-ce ce que vous recherchez?
public static void main(String[] args) { showInput(getInput()); } public static int getInput(){ Scanner sc = new Scanner(System.in); int num = sc.nextInt(); return num; } public static void showInput(int input){ System.out.println(input); }
Comment renvoyer une entrée d'une méthode à l'autre sans utiliser de variable globale et sans que l'entrée soit à nouveau demandée en java
Procédez comme suit:
Enter an integer: 10 The input is 10Un exemple d'exécution:
import java.util.Scanner; public class Main { public static void main(String[] args) { System.out.print("Enter an integer: "); int n = getInput(); showInput(n); } public static int getInput() { Scanner sc = new Scanner(System.in); int num = sc.nextInt(); return num; } public static void showInput(int n) { System.out.println("The input is " + n); } }
Comment cela aiderait-il? Vous ne pouvez pas passer un paramètre int
à la méthode start (Stage)
.
@James_D - quand j'ai écrit cette réponse, elle correspondait à la question qui était spécifique au titre, Comment renvoyer une entrée d'une méthode à l'autre sans utiliser de variable globale et sans que l'entrée soit à nouveau demandée en java < / code>. Maintenant, je peux voir que la question a été modifiée. Je dois parcourir la question mise à jour et je mettrai à jour ma réponse en conséquence.
Ah, OK, excuses; Je n'avais pas regardé l'historique d'édition de la question.
@James_D - pas de problème. Merci quand même pour votre commentaire car maintenant je peux passer en revue la question mise à jour et voir comment je peux aider OP.
La question n'a pas vraiment de sens, à mon humble avis; s'il s'agit d'une application JavaFX (GUI), pourquoi l'OP demanderait-il une entrée utilisateur à partir de la ligne de commande, plutôt que dans l'interface graphique elle-même. Mais si vous pensez que cela vaut la peine d'y répondre ... n'hésitez pas.
Aucune raison comme si j'avais un cours et mon conférencier a fait des restrictions, il était comme aucune variable globale et le menu est dans la console si vous pouviez aider, j'apprécierai
Il a également dit que le générateur de scènes ne pouvait pas être utilisé, donc j'étais un peu confus et je suis toujours dans ma première année pour que le cours soit vraiment difficile
@James_D - Je peux voir que quelqu'un a voté contre ma réponse et c'est d'ailleurs au moment où vous avez publié votre commentaire. Si c'est vous qui l'avez décliné, je vous demande d'annuler votre vote défavorable car vous savez pourquoi j'ai répondu ainsi.
Je l'ai annulé après votre réponse à mon commentaire. Je ne sais pas s'il y a eu un autre vote défavorable.
@James_D - Merci. Passe une bonne journée!
Passez-le simplement comme paramètre:
public static void main(String[] args) { try(Scanner sc=getScanner()){ int in=getInput(sc); showInput(i); } } public static Scanner getScanner(){ return new Scanner(System.in); } public static int getInput(Scanner sc){ int num = sc.nextInt(); return num; } public static void showInput(int i){ System.out.println(i); }
Cela enregistre l'entrée dans une variable locale qui n'est valide que dans la méthode main
.
De plus, la méthode showInput
obtient une valeur int
en tant que paramètre afin qu'elle n'ait pas besoin de la charger elle-même.
Ou, vous pouvez passer la valeur de retour directement:
public static void main(String[] args) { try(Scanner sc=new Scanner(System.in)){ int in=getInput(sc); showInput(i); } } public static int getInput(Scanner sc){ int num = sc.nextInt(); return num; } public static void showInput(int i){ System.out.println(i); }
Cela ignore l'enregistrement de l'entrée dans une variable et la transmet directement.
Notez que les deux manières sont essentiellement les mêmes.
Notez également que vous devez fermer ()
le Scanner
lorsque vous n'en avez plus besoin. Cela sera important si vous gérez des flux autres que System.in
.
Fermer signifie dire que vous n'aurez plus besoin d'une ressource et la donner au système d'exploitation.
Mais si vous fermez ()
un Scanner
, la ressource sur laquelle il est construit sera également fermée.
Cela signifie, vous ne pourrez plus utiliser System.in
après cela. Vous voudrez peut-être avoir un Scanner
instancié et fermé dans la méthode main
et passé à la méthode getInput ()
.
public static void main(String[] args) { Scanner sc=new Scanner(System.in); int in=getInput(sc); showInput(i); sc.close(); } public static int getInput(Scanner sc){ int num = sc.nextInt(); return num; } public static void showInput(int i){ System.out.println(i); }
Ou (encore mieux mais vous qui êtes plus avancé) avec un essai avec des ressources:
public static void main(String[] args) { showInput(getInput()); }
Si vous ne le faites pas souhaitez que le Scanner
soit instancié dans la méthode main, vous pouvez créer une nouvelle méthode pour cela:
public static void main(String[] args) { int in=getInput(); showInput(i); } public static int getInput(){ Scanner sc = new Scanner(System.in); int num = sc.nextInt(); return num; } public static void showInput(int i){ System.out.println(i); }
**Sure do this** public class Test { public static int getInput(){ System.out.println("enter a number"); return new Scanner(System.in).nextInt(); } public static void showInput(int number){ System.out.println(number); } public static void main(String[] args) { showInput(getInput()); } }
Les gars, je suis désolé, j'ai fait une erreur, je vais éditer ce code, c'est comme ça que c'est censé être
Juste pourquoi? Si vous écrivez une application basée sur l'interface graphique, pourquoi demanderiez-vous l'entrée utilisateur à partir de la console, au lieu de l'interface graphique elle-même?
Sa cause des cours que je reçois, mon conférencier a mentionné que le menu devrait être dans la console et qu'il existe des options pour ajouter et afficher la réservation dans l'interface graphique. En plus de cela, les variables globales et le générateur de scènes ne peuvent pas être utilisés :(
Ne pas utiliser de variables «globales» a du sens, et d'un point de vue pédagogique, je vois que ne pas utiliser de Scenebuilder n'a de sens, mais utiliser une console pour l'entrée dans un programme GUI n'a aucun sens. Êtes-vous sûr que vous avez bien compris cela et que vous n'êtes pas censé utiliser un menu (en haut de la fenêtre, etc.)? Mais de toute façon, la manière la plus évidente de le faire serait simplement de déplacer le code de la console au début de la méthode
start ()
.Je suppose que vous pouvez également passer l'option dans le cadre du tableau
args
, mais cela n'a toujours aucun sens.attendez comment puis-je le passer en option dans le tableau args. désolé si je vous dérange je suis assez nouveau sur java
Intégrez-le simplement au tableau que vous passez à
launch ()
. Vous pouvez le récupérer dansstart ()
, voir la documentationMerci beaucoup mec et à tous ceux qui m'ont aidé. Merci pour les réponses rapides.
@LuqmanRumaiz - Si l'une des réponses a résolu votre problème, vous pouvez aider la communauté en la marquant comme acceptée. Une réponse acceptée aide les futurs visiteurs à utiliser la solution en toute confiance. Vérifiez meta.stackexchange.com/questions / 5234 /… pour savoir comment procéder.