一つの面白いテーマ
7412 ワード
public class Test{
public static void main(String[] args){
try {
if(){
System.out.print("Hello ");
}else{
System.out.println("world!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
以上のプログラムは、カテゴリとメソッドを新規作成しない場合、if()にコードを入れてプログラムをコンパイルして実行させ、ハローワールドを出力します.解法1:
public class Test{
public static void main(String[] args){
try {
if(true)System.out.print("Hello "); if(false){
System.out.print("Hello ");
}else{
System.out.println("world!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
解法2: public class HelloWorld
{
public static void main(String[] args)
{
try {
if(true){
System.out.print("Hello ");
throw new Exception();
}else{
System.out.println("world!");
}
} catch (Exception e) {
System.out.println("World") ;
}
}
}
解法3:匿名クラスを使う
if (new Object() {
public boolean f() {
System.out.print("Hello ");
return false;
};
}.f()) {
System.out.print("Hello ");
} else {
System.out.println("world!");
}
解法4:自分で方法を書かなくても、新しいクラスや匿名クラスを使わずに、ダイナミックスクリプトを実行します.
if (
new ScriptEngineManager().getEngineByName("JavaScript").eval("print ('Hello ');")==null
) {
System.out.print("Hello ");
} else {
System.out.println("world!");
}
解法5:public class Test{
public static void main(String[] args){
try {
if(new java.io.FileFilter(){public boolean accept(java.io.File file){System.out.print("Hello ");return false;}}.accept(null)){
System.out.print("Hello ");
}else{
System.out.println("world!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
解法6:c++
#include <iostream>
int main(void){
if(((std::cout<<"Hello "),false)){
std::cout<<"Hello "<<std::endl;
}else{
std::cout<<"world!"<<std::endl;
}
return 0;
}
解法7:public class Test{
public static void main(String[] args){
try {
if(((System.out.printf("Hello "))==null)){
System.out.print("Hello ");
}else{
System.out.println("world!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
解法8:public class Hello {
public static void main(String[] args) {
try {
if (new Hello(){{System.out.print("Hello ");}}==null){
System.out.print("Hello ");
} else {
System.out.println("world!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
解法9:反射で反射する
if(System.out.getClass().getMethod("print",String.class).invoke(System.out, "Hello ")!=null){
System.out.print("Hello ");
} else {
System.out.println("world!");
}
解法10:if(args.length == 0 ? Test.class.getDeclaredMethod("main",args.getClass()).invoke(new Test(), new Object[]{new String[]{"a"}}) != null : true){
System.out.print("Hello ");
}else{
System.out.println("world!");
}
解法11:try {
if (args == null?true :((Test.class.getMethod("main", new String[1].getClass()).invoke(new Test(), new Object[1])) instanceof Void)
) {
System.out.print("Hello ");
} else {
System.out.println("world!");
}
} catch (Exception e) {
e.printStackTrace();
}
解法12public static void main(String args[]){
if(args.length == 0){ main(new String[1]); main(new String[2]);} else if(args.length == 1) {
System.out.print("Hello");
}
else{
System.out.print(" world!");
}
}
解法13:if (args.length == 0 ? new Object() {
boolean f() {
Test.main(new String[2]);
return false;
}
}.f() : true) {
System.out.print("Hello");
} else {
System.out.print(" world!");
}
解法14
public class Test{
public static void main(String[] args){
try {
if(args==null || new Object(){boolean n(){main(null);return false;}}.n()){
System.out.print("Hello ");
}else{
System.out.println("world!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
解法15 public static void main(String[] args){
try {
if(new Callable<Boolean>() {
public Boolean call() {
System.out.print("Hello ");
return false;
}
}.call()){
System.out.print("Hello ");
}else{
System.out.println("world!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
解法16:外層アークスの長さは0です. args.length==0Test.class.get DecleadMethod(「main」,args.get Class().invoke(new Test(),new Object[]{new String[]{「{a]}」)!null:true Test.class.get DecleadMethod(「main」,args.get Class().invoke(new Test(),new Object[]{new String[]{「{a]}」)!nullはfalseです この時は「world!」を打つべきです. その前に判定する Test.class.get DecleadMethod(「main」,args.get Class().invoke(new Test(),new Object[]{new String[]{「{a]}」)!nullはfalseです の過程で invokeの呼び出しパラメータargs="a"長さは1です. ですから、args.length==0の判断結果はtrueです. ここで「ハロー」を印刷します. 合わせて正解です.