Je ne sais pas si cela est possible en Java ou non; Je souhaite obtenir une entrée de l'utilisateur (à partir du système.in), puis lancer une erreur de compilée avec cette entrée. Je veux dire que si l'utilisateur entrait le texte "Hello", le programme doit lancer une erreur de compilation: Compiler erreur: Bonjour. Je souhaite une erreur qui rend le programme arrêter d'exécuter à ce stade avec ce message.
est-ce possible? Si oui, comment? P>
En fait, je veux faire une erreur de compilée pendant l'exécution! P>
Le code sera comme celui-ci: P>
public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String str = in.nextLine(); //compileError(str); this part must be completed } }
4 Réponses :
Vous ne pouvez pas lancer une erreur de compilation lorsque votre code est exécuté. Je pense que vous voulez dire une erreur d'exécution qui cadrer votre code échoue au moment de l'exécution.
Essayez quelque chose comme ceci: p> Vous pouvez aussi attraper cette "erreur" si vous entourez votre code avec les clauses try / attraper. p> runTimeException code> est l'exception la plus générale des erreurs au moment de l'exécution, vous pouvez utiliser d'autres exceptions, Liste des exceptions . P> P>
Ce que vous faites référence est exceptions em> pas une erreur de compilation. L'erreur de compilation est quand il y a quelque chose qui ne va pas dans la syntaxe de votre code et que le compilateur Java ne parvient pas à générer du code octet de votre programme pour l'exécution de JVM. Donc, cela arrive avant de pouvoir exécuter le programme. Vous pouvez donc utiliser une instance d'un RunTimeException code> ou de toute sous-classe de celui-ci dans Java pour terminer votre programme lorsque
"Bonjour" Code> est utilisé comme entrée, ici dans mon code d'exemple
INPUTMISMAtCHException code> est lancé si l'entrée est
"bonjour" code>, cette exception étant une catégorie de
RunTimeException < / code> ou non cochéra em> exception ne nécessite pas le programmateur d'ajouter un code> clause code> ou la gère explicitement: p>
Vous pouvez rendre votre programme arrêter d'exécuter à ce stade. Par exemple: Une autre façon de le faire est de lancer une exception ... Sauf que vous obtiendrez une exception StackTrace ainsi qu'un message. Dans le contexte, vous faites cela, cela n'a probablement pas d'importance. P> Notez qu'il existe des problèmes potentiels avec ceci: p> Si le juge intercepte toute sortie, il peut ne pas être possible de saisir les messages que votre application produit. p> li>
Le juge peut nourrir votre application Différentes entrées chaque fois qu'elle le juge. p> li>
ol> Cependant, ce n'est pas une vraie erreur de compilation. En effet, Les erreurs compilent se produisent lorsque le code est compilé et qu'ils sont émis par le compilateur. Mais une application Java ne peut pas lire l'entrée (de l'utilisateur ou du «juge») à l'heure de la compilation. Il peut lire l'entrée au moment de l'exécution ... mais il est alors trop tard pour une erreur de compilation. P> Vous semblez avoir votre terminologie confondue. Je vous suggère de lire ces articles pour comprendre ce que signifient les différents termes: p> Votre commenté ainsi: P> Pensez que vous avez un programme que vous ne savez pas ce que cela devrait faire et qu'il passe quelques tests sur un juge en ligne. Vous savez ce que l'entrée pourrait être mais ne sait pas dans quel ordre ils viennent et que vous devriez obtenir les cas de test sans accéder réellement aux cas de test du juge en ligne. Je veux faire mon programme me donner des erreurs pour savoir ce qui est dans chaque cas de test. P>
blockQuote> et p> J'ai juste un programme de travail et je veux extraire les commentaires du juge en ligne. P>
BlockQuote> Ce n'est pas une erreur de compilation dont vous parlez. C'est une erreur d'exécution, car vous voulez / besoin que cela se produise lorsque votre programme est exécuté. Veuillez vous reporter aux liens ci-dessus pour des explications de ces termes. P> p>
Si votre intention est d'imprimer un message et de quitter le programme, vous pouvez faire quelque chose comme suit alternativement, vous pouvez toujours lancer un objet d'exception (ou un objet d'une classe dérivé de celui-ci) et ne l'attrapez pas n'importe où dans votre programme lors de ses bulles, le programme se terminera. P> /* add throws Exception in your main method */
throw new Exception("Your input has resulted in an error, program will terminate")
Vous voulez dire une erreur de temps d'exécution (exceptions)? ... en tant que compilateur génère une erreur sur la syntaxe
Voulez-vous écrire votre propre compilateur?
Non, je pense que c'est vraiment impossible, mais je n'étais pas sûr. Je souhaite une erreur exacte de la compilation non des erreurs d'exécution ou une exception.
Vouloir quelque chose qui est impossible à obtenir conduira à la frustration et rien d'autre. Peut-être que votre question est une XY Problème déguisé et vous devriez nous dire la motivation derrière votre question et non la manière impossible que vous 'Essayez de l'atteindre.
@Aquestion pense que vous avez un programme que vous ne savez pas ce que cela devrait faire et qu'il passe quelques tests sur un juge en ligne. Vous savez ce que l'entrée pourrait être mais ne sait pas dans quel ordre ils viennent et que vous devriez obtenir les cas de test sans accéder réellement aux cas de test du juge en ligne. Je veux faire mon programme me donner des erreurs pour savoir ce qui est dans chaque cas de test.
@ Hovercaffulleels voient mon commentaire ci-dessus. Je veux obtenir des cas de test de juge en ligne qui n'est pas accessible. Mais j'ai un programme qui transmet tous les cas de test. Je ne suis même pas sûr de la question de la question. J'ai juste un programme de travail et je veux extraire les commentaires du juge en ligne. Le but est que si je fais des erreurs de compilation, le juge en ligne dira quelle erreur j'ai faite mais cela ne dit rien des erreurs de temps d'exécution.
Créez simplement une exception nommée CompileError et jetez-la: P
Vous ne pouvez pas causer d'erreur dans le temps de compilation par une entrée future!