cv1
Fevereiro 5, 2004, 6:50pm
#1
Sem mudar nada no código da main(), mas podendo mudar qualquer coisa na classe, ou criar outras classes, faça o código abaixo imprimir “1,2,3” :twisted:
public class Foo {
public static void main(String[] args) {
System.out.println("a,b,c");
}
}
public class Foo {
static {
System.out.println("1,2,3");
System.exit(0);
}
public static void main(String[] args) {
System.out.println("a,b,c");
}
}
Rafael
hhmm… da pra fazer um aspecto tambem :mrgreen:
Rafael
cv1
Fevereiro 5, 2004, 7:02pm
#4
Hmm, legal, mas tem mil maneiras de se fazer Neston. Eu encontrei pelo menos 4 jeitos de fazer além do que o Rafael mostrou. Vamo lá galera, criatividade!
[code]public class Foo {
public static void main(String[] args) {
System.out.println("a,b,c");
}
}
class System {
static Out out = new Out();
}
class Out {
public void println(String abc){
java.lang.System.out.println("1,2,3");
}
}[/code]
Vale?
FLC
Fevereiro 5, 2004, 8:11pm
#6
minha tentativa:
import java.io.OutputStream;
import java.io.PrintStream;
public class Foo{
static{
System.setOut(new MyPrintStream(System.out));
}
private static class MyPrintStream extends PrintStream{
PrintStream out;
public MyPrintStream(OutputStream out) {
super(out);
this.out = (PrintStream)out;
}
public void println(String s){
out.println("1,2,3");
}
}
public static void main(String [] args){
System.out.println("a,b,c");
}
}
cv1
Fevereiro 5, 2004, 8:11pm
#7
Claro, André!
A minha melhor solução até agora foi parecida:
[code]public class Foo {
static Foo System = new Foo();
static Foo out = new Foo();
void println(String b) {
java.lang.System.out.println("1, 2, 3");
}
public static void main(String[] args) {
System.out.println("a, b, c");
}
}[/code]
…mas ela usa duas classes a menos
Na verdade onde vc está imprimindo “c” vai “1,2,3”, neh, cv?
Bem, a regra básica é que a linha de comando seja obrigatoriamente “java Foo”, neh?
FLC
Fevereiro 6, 2004, 12:47am
#9
reformulei a minha tentativa, acho q ficou mais elegante agora (antes tava meio esquisito…)
import java.io.OutputStream;
import java.io.PrintStream;
public class Foo{
static{
System.setOut(new MyPrintStream(System.out));
}
private static class MyPrintStream extends PrintStream{
public MyPrintStream(OutputStream out) {
super(out);
}
public void println(String s){
super.println("1,2,3");
}
}
public static void main(String [] args){
System.out.println("a,b,c");
}
}
deixando a do FLC mais bacana ainda.
import java.io.PrintStream;
public class Foo{
static{
System.setOut(new PrintStream(System.out) {
public void println(String s) {
String temp = s;
temp = temp.replaceAll("a","1");
temp = temp.replaceAll("b","2");
temp = temp.replaceAll("c","3");
super.println(temp);
}
});
}
public static void main(String [] args){
System.out.println("a,b,c");
}
}
sem contar que poderia ahver um crypto.properties com os replaces:
a=1
b=2
c=3
louds
Fevereiro 7, 2004, 7:13pm
#11
que tal:
public class Foo {
static {
System.out.println("1,2,3");
System.exit(0);
}
public static void main(String[] args) {
System.out.println("a,b,c");
}
}
Tipo, vale mexer em tudo menos no main ne? Vale em volta? hehehehe
public class Foo {
public static void main(String[] args) {
System.out.println("1,2,3");
}
static class x {
public static void main(String[] args) {
System.out.println("a,b,c");
}
}
}
cancao
Fevereiro 10, 2004, 6:55pm
#12
Esse post acabou me fazendo lembrar de uma das coisas mais estranhas que eu já vi em Java.
http://www.artima.com/weblogs/viewpost.jsp?thread=4864
Acho que deve ser tambem a maneira menos usual de fazer isso que o cv falou. Haja reflection!
Até.
Afe… com base nisso da pra incluir mais um entao:
class Teste
{
private static Field value;
static {
try {
value = String.class.getDeclaredField("value");
value.setAccessible(true);
value.set("a,b,c", "1,2,3".toCharArray());
}
catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args)
{
System.out.println("a,b,c");
}
}
Rafael
Luca
Fevereiro 10, 2004, 11:28pm
#14
Olá
Esta pasta acabou ficando du caramba! Já reli umas 3 vezes pelo menos.
As soluções todas foram muito legais. Foi o máximo de deliciosa cultura inútil sobre linguagem Java. Mas a última do Rafael é a chamada “côdiloko”. Outro maluco que usou isto está em 2001-03-21 The Java Specialists’ Newsletter [Issue 014] - Insane Strings .
[]s
Luca
A última solução do Rafael faz um belo par com a assinatura…
Luca
Fevereiro 10, 2004, 11:48pm
#16
Olá
Ei, desculpe Cancao. Só agora que reparei que o artigo do Artima é o Heinz Kabutz. É o cara do JavaSpecialists do link que citei. Seu link é mais legal e mais completo.
Tudo que li nesta pasta espero esquecer na hora que for escrever algum código sério. Se um programador comum escrevesse um negócio do tipo do Heinz Kabutz levaria 80 chibatadas em praça pública.
[]s
Luca