java强制编译通过_强制java使用用户输入作为消息进行编译错误
我不知道在Java中是否可行; 我想從用戶(從System.in)獲得輸入,然后使用該輸入引發編譯錯誤。 我的意思是,如果用戶輸入了文本" HELLO",則程序應引發編譯錯誤:編譯錯誤:HELLO。 我想要一個錯誤,該錯誤實際上使程序在該點處停止執行該消息。
這可能嗎? 如果是,如何?
實際上,我想在運行時犯一個編譯錯誤!
代碼將如下所示:
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
}
}
這可能嗎?
您的意思是運行時錯誤(異常)? ...由于編譯器生成語法錯誤
您想編寫自己的編譯器嗎?
不。我認為這實際上是不可能的,但我不我想要一個確切的編譯錯誤,而不是運行時錯誤或Exception。
想要一些不可能得到的東西會導致沮喪和其他。也許您的問題是變相的XY問題,您應該告訴我們您問題背后的動機,而不是您試圖解決這一問題的不可能方法。
@aquestion認為您得到的程序不知道應該做什么,并且通過了在線法官的一些測試。您知道輸入的內容可能是什么,但不知道輸入順序是什么,因此您應該在不實際訪問在線法官測試用例的情況下獲得測試用例。我想讓我的程序給我一些錯誤,以找出每個測試用例中的內容。
@HovercraftFullOfEels參見上面的評論。我想獲得無法訪問的在線法官測試案例。但是我有一個可以通過所有測試用例的程序。我什至不確定問題到底是什么。我只有一個工作程序,想從在線裁判中提取輸入。關鍵是,如果我犯了編譯錯誤,那么在線法官會說出我犯了什么錯誤,但是卻沒有說明運行時錯誤。
只需創建一個名為CompileError的異常并將其拋出:p
以后的輸入不會導致編譯時間錯誤!
您指的是異常,不是編譯錯誤。編譯錯誤是指代碼的語法中有錯誤,并且Java編譯器無法為您的程序生成字節代碼以使JVM執行該錯誤。這樣就可以在運行程序之前發生。
因此,當使用"HELLO"作為輸入時,可以在Java中使用RuntimeException或其任何子類的實例來終止程序,如果輸入為"HELLO",則會在此示例代碼中拋出InputMismatchException ,此異常是RuntimeException的子類或未經檢查的異常,不需要程序員添加throws子句或顯式處理它:
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.nextLine();
if("HELLO".equals(str)){
throw new InputMismatchException("This input is not allowed");
}
}
如果您打算打印一條消息并退出程序,則可以執行以下操作
...
System.err.println("Your input has resulted in an error, program will terminate");
/* You can change the above text with whatever you want */
System.exit(1);
或者,您總是可以拋出Exception對象(或從其派生的類的對象),并且當氣泡冒泡時,不要在程序中的任何位置捕獲它,程序將終止。
/* add throws Exception in your main method */
throw new Exception("Your input has resulted in an error, program will terminate")
但是,尚不清楚為什么您會特別希望拋出Compile錯誤。編譯程序時,編譯器會拋出編譯時錯誤。在執行期間,您既不會期望它們,也不會嘗試將它們扔掉。
您可以在此時停止程序執行。例如:
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.nextLine();
if (str.equals("HELLO")) {
System.out.println("Compile Error:" + str);
System.exit(1);
}
// Do something else.
}
}
另一種方法是拋出一個異常...,除了您將獲得異常堆棧跟蹤以及一條消息。在您執行此操作的情況下,可能沒有關系。
請注意,這存在一些潛在的問題:
如果法官攔截所有輸出,則可能無法掌握應用程序生成的消息。
法官每次做出判斷時,可能會向您的應用程序提供不同的輸入。
但是,這不是真正的編譯錯誤。確實,對于您的程序來說,生成真正的編譯錯誤沒有任何意義。
編譯錯誤發生在編譯代碼時,由編譯器輸出。但是Java應用程序在編譯時無法讀取輸入(來自用戶或"法官")。它可以在運行時讀取輸入...但是對于編譯錯誤來說為時已晚。
您似乎對術語感到困惑。我建議您閱讀這些文章,以了解各種術語的含義:
編譯錯誤或編譯器錯誤-https://en.wikipedia.org/wiki/Compilation_error
運行時錯誤-https://techterms.com/definition/runtime_error
例外-https://techterms.com/definition/exception
您對此發表了評論:
Think that you are given a program that you don't know what it should do and it pass some tests on an online judge. You know what the input could be but don't know in which order they come and you should get the test cases without actually accessing the online judge's test cases. I want to make my program give me some errors to find out what is in each test case.
和
I just have a working program and want to extract the input from online judge.
那不是您在談論的編譯錯誤。那是一個運行時錯誤,因為您希望/需要在程序運行時發生它。請參考上面的鏈接以獲取這些術語的解釋。
您的代碼正在執行時,您不能引發編譯錯誤。我認為您的意思是運行時錯誤,導致您的代碼在運行時失敗。
嘗試這樣的事情:
如果將代碼包含在try / catch子句中,則也可以捕獲此"錯誤"。
try {
// get the input
throw new RuntimeException(str);
} catch (RuntimeException ex) {
// ex contains the error details
// ex.getMessage() will give you the user's input
}
RuntimeException是運行時錯誤的最一般的例外,您可以使用其他例外,例外列表。
總結
以上是生活随笔為你收集整理的java强制编译通过_强制java使用用户输入作为消息进行编译错误的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java事务过大影响系统性能吗_Java
- 下一篇: java 读文件夹_java怎么读取读