All pastes #55804 Raw Edit

Stuff

public java v1 · immutable
#55804 ·published 2006-05-14 15:15 UTC
rendered paste body
/* 33 Îøèáêè, èëè êàê íå íàäî ïðîãðàììèðîâàòü ÍÈ-ÊÎ-ÃÄÀ! *//* (1): Èñïîëüçóåòñÿ ñàìûé ñòàðûé è ñàìûé ñòðàøíûéJava GUI Toolkit èç âñåõ êîòîðûå åñòü íà ñâåòå */import java.awt.*;/* (2): Ïëîäèòñÿ ëèøíèé êëàññ âñåãî ëèøü ñ îäíèì ìåòîäîì */public class FibArray {	public static void main(String args[]) {		new MenuFib("MenuFib").menu();	}}class MenuFib extends Frame {	/* (3): È çà÷åì ñþäà ïåðåäàâàòü title? Ýòî ëèøíåå */	public MenuFib(String title) {		super(title);	}	public void menu() {		MenuBar menuBar = new MenuBar();		Menu data = new Menu("Data");		menuBar.add(data);		/* (4): Âûíåñòè íàçâàíèÿ ïóíêòîâ ìåíþ â ìàññèâ,		   è ïîñëå ýòîãî äîáàâèòü èõ â öèêëå?				   BTW, òðîåòî÷èå ïîëàãàåòñÿ ñòàâèòü òîëüêî ïîñëå		   òåõ ïóíêòîâ ìåíþ, êîòîðûå ïðåäïîëîãàþò 		   ââîä êàêîé-íèáóäü èíôîðìàöèè ïîëüçîâàòåëåì.		   Íàì æå áûëî ñêàçàíî, ÷òî èõ ñòàâèòü íàäî ïîñëå		   **ÊÀÆÄÎÃÎ** ïóíêòà ìåíþ */		data.add(new MenuItem("Input data..."));		data.add(new MenuItem("-"));		data.add(new MenuItem("Exit..."));		setMenuBar(menuBar);		/* (5):  îðèãèíàëå èñîëüçîâàëñÿ âûçîâ resize(),		   êîòîðûé óæå äàâíî ÿâëÿåòñÿ deprecated */		setSize(150,150);		show();	}	public boolean action(Event evt, Object arg) {		if (evt.target instanceof MenuItem) {			/* (6): Ïðîñòî êîøìàð -- èñïîëüçîâàòü îäèíàêîâûå ñòðîêè 			   â ðàçíûõ ìåñòàõ. ßâíîå íàðóøåíèÿ ïðàâèëà DRY */			if (arg.equals("Input data...")) {				new DialogFib(this, "Input Data", true).dialog();			}			/* (6): Îïÿòü! Îí ñäåëàë ýòî ñíîâà! */			else if (arg.equals("Exit...")) {				System.exit(0);				return true;			}		}		/* (7):  îðèãèíàëå âîçâðàùàëñÿ îáû÷íûé "false", ÷òî		   ÿ ñ÷èòàþ íåâåðíûì ïî ïðè÷èíå òîãî, ÷òî ðîäèòåëüñêèé		   êëàññ ìîã äåëàòü ÷òî-òî ïîëåçíîå â ñâîåì îáðàáîò÷èêå */		return super.action(evt, arg);	}	/* (8): Ýòà ôóíêöèÿ âñòðå÷àåòñÿ â ïðîãðåììå â ñîâåðøåííî íåèçìåííîì	   âèäå àæ ÷åòûðå ðàçà */	public boolean handleEvent(Event evt) {		if (evt.id == Event.WINDOW_DESTROY) {			dispose();			return true;		}		/* (9): Ñìîòðè ïóíêò (7) */		return super.handleEvent(evt);	}}/* (10): Ñîâåðøåííî íåíóæíûé äèàëîã, êîòîðûé ñëóæèò òîëüêî äëÿ    ââîäà åäèíñòâåííîãî ÷èñëà. Ëó÷øå áû äîáàâèòü ïîëå äëÿ ââîäà   ÷èñëà íà ãëàâíóþ ôîðìó. */class DialogFib extends Dialog {	/* Èíòóèòèâíî ïîíÿòíûå íàçâàíèÿ ïåðåìåííûõ -- çàëîã óñïåõà */	int nf;	static String temp;	TextField tf;	/* (11): Ýòè òðè ñòðî÷êè -- àáñîëþòíî ëèøíèå è íèêîìó íå íóæíûå */	public DialogFib(Frame parent, String title, boolean isModal) {		super(parent, title, isModal);	}	public void dialog() {		/* (12): Îáúÿâëÿåì ïåðåìåííóþ, êîòîðàÿ èñïîëüçóåòñÿ òîëüêî 		   îäíàæäû */		int m = 3;		setLayout(new GridLayout(2, 1));		Panel panel = new Panel();		panel.add(new Label("Number fib"));		tf = new TextField(m);		tf.setText(temp);		panel.add(tf);		add(panel);		Panel okPanel = new Panel();		okPanel.add(new Button("OK"));		add(okPanel);		pack();		show();	}	public boolean action(Event evt, Object arg) {		if (evt.target instanceof Button) {			temp = tf.getText();			nf = new Integer(temp).intValue();			/* (13): Íàñëàäèòåñü ìîìåíòîì. Ýòî î÷åíü ÷óäíûé êîä.						   Ìû ñíà÷àëà ïðÿ÷åì ñåáÿ. Åñëè áûëî ââåäåíî ñëèøêîì			   áîëüøîå ÷èñëî (äëÿ êîòîðîãî ÷èñëî Ôèááîíà÷÷è			   íå âëåçåò â ñòàíäàðòíûé long -- îíî áûëî âû÷èñëåíî			   ýêñïåðèìåíòàëüíûì ïóòåì), òî ïîêàçûâàåì åùå îäèí			   äèàëîã ñ ñîîáùåíèåì îá îøèáêå, ïðè÷åì äëÿ ýòîãî			   èñïîëüçóåòñÿ íå ñòàíäàðòíûé MessageBox, à 			   îêîøêî ñîáñòâåííîãî ïðîèçâîäñòâà */			hide();			if (nf > 92) {				temp = "";				new Corr("Corr number fib").corr();			}			else {				/* (14): Íàâåðíîå ëó÷øå ýòîò óæàñ áóäåò ïîêàçûâàòü				   â ãëàâíîì îêîøêå, à íå ïëîäèòü êó÷ó îêîøåê íà				   ýêðàíå */				new Fib(nf).fibo();				return true;			}                		}		/* (15): Ñìîòðè ïóíêò (7) */		return super.action(evt, arg);	}	/* (16): ßâíîå íàðóøåíèÿ ïðàâèëà DRY */	public boolean handleEvent(Event evt) {		if (evt.id == Event.WINDOW_DESTROY) {			dispose();			return true;		}		return super.handleEvent(evt);	}}/* (17): Îïÿòü ïëîäèòñÿ ëèøíÿÿ ñóùíîñòü, âìåñòî èñïîëüçîâàíèÿ   ñòàíäàðòíîãî MessageBox */class Corr extends Frame {	/* (18): Ýòî — ëèøíåå */	public Corr(String title) {		super(title);	}	public void corr() {		Label label = new Label("Number fib < 93");		add(label);		pack();		show();		/* (19): Ïîçèöèîíèðîâàíèå îêîøêà â êàêóþ-òî çàðàíåå 		   çàäàííóþ êîîðäèíàòó. Evil, pure evil. */		move(300,0);		/* (20): ß òóò ÷óòü íå ïîìåð îò óæàñà. Òóò ïðîèñõîäÿò		   ñëåäóþùèå íåõîðîøèøèå âåùè:				   1. Íàðóøåíèå ïðàâèëà DRY		   2. Ïîâòîðíî âûçûâàåòñÿ îêîøêî äëÿ ââîäà öèôåðêè.		      Åñëè ïîñòîÿííî ââîäèòü ñëèøêîì áîëüøèå ÷èñëà, òî		      ÷èñëî îêîøåê íà ýêðàíå ñòàíåò ïðîñòî îãðîìíûì */		new DialogFib(this, "Input Data", true).dialog();	}	/* (21): handleEvent âîçâðàùàåòñÿ â òðåòèé ðàç! */	public boolean handleEvent(Event evt) {		if (evt.id == Event.WINDOW_DESTROY) {			dispose();			return true;		}		return super.handleEvent(evt);	}}/* (22): Ïðîñòî ëèøíèé êëàññ. Õîòÿ â ïðèíöèïå åãî ñóùåñòâîâàíèå   ìîæíî áûëî áû îïðàâäàòü, íàõîäèñü îí â êàêîé-íèáóäü generic   áèáëèîòåêå àëãîðèòìîâ */class Fib {	/* (23): Predefined ðàçìåðàì ìàññèâîâ -- ïèîíåðñêèé ïðèâåò!	   È îïÿòü èíòóèòèâíî ïîíÿòíûå íàçâàíèÿ ïåðåìåííûõ */	int nf;	long fib[] = new long[100];	String fibs[] = new String[100];	Fib(int nf) {		this.nf = nf;	}	public void fibo() {		fib[0] = fib[1] = 1;		for (int i = 0; i < nf; i++) {			fib[i+2] = fib[i] + fib[i+1];			/* (24): Êîíöåïòóàëüíûé ìåòîä êîíâåðòàöèè â ñòðîêó,			   ÷òîáû íå ïå÷àòàòü .toString() ðó÷êàìè */			fibs[i] = "" + fib[i];		}		new TableFib(fibs, nf).table();	}}/* (23): È åùå îäíî ëèøíåå îêîøêî. Ìîãó îáðàäîâàòü -- áîëüøå    íîâûå êëàññû ïëîäèòüñÿ íå áóäóò */class TableFib extends Frame {	/* (24): È ñíîâà èíòóèòèâíî ïîíÿòíî çà÷åì íóæíà êàæäàÿ 	   ïåðåìåííàÿ */	String fibs[] = new String[100];	int nf;	TextArea tt;	/* (25): Ëèøíèå òðè ñòðî÷êè */	public TableFib(String title) {		super(title);	}	/* (26): OMG! Âòîðîé êîíñòðóêòîð! */	public TableFib(String fibs[], int nf) {		/* (27): OMG! Âûçîâ ïåðâîãî êîíñòðóêòîðà èç âòîðîãî! */		this("Fibonacci table");		this.nf = nf;		/* (28): Êîïèðóåì âñå â ñåáÿ, ìàëî ëè ïðèãîäèòñÿ		   åùå êîãäà-íèáóäü (à ïðèãîäèòñÿ îíî òîëüêî îäèí		   ðàç) */		for (int i = 0; i < nf; i++)			this.fibs[i] = fibs[i];	}	public void table() {		/* (29): Òóò ïðåäïîëàãàëîñü ÷òî íàäî âñòàâèòü íóæíîå		   ÷èñëî ïðîáåëîâ, ÷òîáû ïîëó÷èëñÿ êðàñèâûé ôîðìàòíûé		   âûâîä */		String str, Zagstr = "Number"+" Fibonacci"+"\n";		/* (30): Ìàêñèìàëüíîå ÷èñëî ñòðî÷åê çàäàåòñÿ â ÿâíîì		   âèäå, à íå ïîëó÷àåòñÿ àëãîðèòìè÷åñêè èëè èç 		   êîíñòàíòû. EVIL. */		tt = new TextArea(Zagstr, 92, 30);		add(tt);		for (int i = 0; i < nf; i++) {			/* (31): Çàìåòòüòå, ñêîëüêî ëèøíåãî êîäà òîëüêî äëÿ			   òîãî, ÷òîáû ó ïåðâûõ äåâÿòè ñòðî÷åê â íà÷àëå ñòîÿë			   íóëèê */			if (i < 9)				str = "0" + (i+1) + " " + fibs[i] + "\n";			else				str = (i+1) + " " + fibs[i] + "\n";			tt.append(str);		}		pack();		/* (32): Îïÿòü äâèãàåì íåïîíÿòíî êóäà */		move(300,0);		show();	}	/* (33): Íàø ñòàðûé çíàêîìûé -- handleEvent! */	public boolean handleEvent(Event evt) {		if (evt.id == Event.WINDOW_DESTROY) {			dispose();			return true;		}		return super.handleEvent(evt);	}}/* Âñå, êîíåö, à êòî ñëóøàë -- ìîëîäåö. */