- 1
while (c.charAt(0)==' ') c = c.substring(1,c.length);
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
Всего: 150
+183
while (c.charAt(0)==' ') c = c.substring(1,c.length);
Особый ltrim
+97
Integer [] jh = new Integer [1];
Integer j0 = new Integer(17);
jh[0]= j0;
Заполняем массив.
+75
echo( TRUE ? "1" : TRUE ? "2":"3");
//2
http://ideone.com/UBg3T2
В ответ на это:
http://govnokod.ru/12268#comment163978
+119
public static Tuple<t1, t2,="" t3,="" t4,="" t5,="" t6,="" t7,="" tuple=""><t8>> Create<t1, t2,="" t3,="" t4,="" t5,="" t6,="" t7,="" t8="">(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, T8 item8) {
return new Tuple<t1, t2,="" t3,="" t4,="" t5,="" t6,="" t7,="" tuple=""><t8>>(item1, item2, item3, item4, item5, item6, item7, new Tuple<t8>(item8));
Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer) {
// We want to have a limited hash in this case. We'll use the last 8 elements of the tuple
ITuple t = (ITuple) m_Rest;
if(t.Size >= 8) { return t.GetHashCode(comparer); }
// In this case, the rest memeber has less than 8 elements so we need to combine some our elements with the elements in rest
int k = 8 - t.Size;
switch(k) {
case 1:
return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
case 2:
return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
case 3:
return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
case 4:
return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
case 5:
return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
case 6:
return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item2), comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
case 7:
return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1), comparer.GetHashCode(m_Item2), comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
}
Contract.Assert(false, "Missed all cases for computing Tuple hash code");
return -1;
}
Int32 ITuple.GetHashCode(IEqualityComparer comparer) {
return ((IStructuralEquatable) this).GetHashCode(comparer);
}
public override string ToString() {
StringBuilder sb = new StringBuilder();
sb.Append("(");
return ((ITuple)this).ToString(sb);
}
string ITuple.ToString(StringBuilder sb) {
sb.Append(m_Item1);
sb.Append(", ");
sb.Append(m_Item2);
sb.Append(", ");
sb.Append(m_Item3);
sb.Append(", ");
sb.Append(m_Item4);
sb.Append(", ");
sb.Append(m_Item5);
sb.Append(", ");
sb.Append(m_Item6);
sb.Append(", ");
sb.Append(m_Item7);
sb.Append(", ");
return ((ITuple)m_Rest).ToString(sb);
}
Давно заприметил в C# кортежи. За них отвечаёт чудесный класс System.Tuple
http://msdn.microsoft.com/en-us/library/system.tuple.aspx
Вот стало интересно - как они там это дело реализовали, ведь постоянно вводит новые плюшки в язык.
Посмотрел и ужаснулся - решили "в лоб" и кортежи обошлись в 1000 строк.
http://reflector.webtropy.com/default.aspx/4@0/4@0/untmp/DEVDIV_TFS/Dev10/Releases/RTMRel/ndp/clr/src/BCL/System/Tuple@cs/1305376/Tuple@cs
Хотел запостить в #12129. Но он утонул.
+98
public String toString() {
return new String(body.toString());
}
Но зачем?
+93
Float nan=Float.NaN;
new Float(10).compareTo(nan);
//-1
nan.compareTo(nan);
//0
new Float(Float.POSITIVE_INFINITY).compareTo(nan);
//-1. POSITIVE_INFINITY<NAN. LoL
http://ideone.com/9WIo16
Тут некоторые товарищи в соседнем треде предлагали сравнивать объекты через compareTo()==0, если возможно.
Ну и беречься от equals как от огня, если есть Comparable.
А вот к чему это приводит.
+94
String s="a, b, c, d,,,";
String[] spl=s.split ( "," );
o.println(spl.length);
for (String s1: spl)
o.print(s1+";");
//4
//a; b; c; d;
StringTokenizer st=new StringTokenizer(s);
o.println("\n"+st.countTokens ());
while (st.hasMoreElements ()){
o.print(
st.nextToken ()+";"
);
}
//4
//a,;b,;c,;d,,,;
st=new StringTokenizer(s,",");
o.println("\n"+st.countTokens ());
while (st.hasMoreElements ()){
o.print(
st.nextToken ()+";"
);
}
//4
//a; b; c; d;
http://ideone.com/zh0paB
Очередной сюжет из серии JavaGovno.
+95
import java.io.PrintStream;
import java.util.concurrent.atomic.AtomicBoolean;
public final class ShredingerCat
extends AtomicBoolean
{
static final PrintStream o=System.out;
static final long initMsec=System.currentTimeMillis ();
public static final ShredingerCat INSTANCE = new ShredingerCat();
private ShredingerCat ()
{
set ( false );
o.println ( "Construct SingleBool" );
}
public final
void criticalSection(){
synchronized (this) {
pr ( "Enter critical section" );
ShredingerCat.sl ( 5 );
pr ( "Cat is " +(
get()
? "dead"
: "alive"
)
);
sl(100);
pr ( "Exit critical section" );
}
}
// ===================== HELPER STUFF ========================
static void pr(String s){
o.println ( s+(
System.currentTimeMillis ()- initMsec
));
}
static void sl(long l){
try {
Thread.sleep ( l );
}catch (InterruptedException e) {
}
}
}
Обсуждение #11989 безопасных публикаций, конструкторов и синглтонов вдохновило меня на создание этого примера.
Суть: есть кот-синглтон. Он как вы видите защищен со всех сторон finalами, приправленое к тому же Atomicом.
Задание на серебряную медаль - сделать так чтобы 2 последовательных вызова toString() вывели Dead и Alive. Объект не должен меняться.
Задание на золотую медаль: необходимо получить примерно такой вывод:
Enter critical section0
Enter critical section0
Cat is alive16
Cat is dead16
Exit critical section110
Exit critical section110
За использование рефлексии и прочих unsafe - немедленная дисквалификация и бан модератором.
Решение будет чуть позже. Отдельным постом.
+175
public static IEnumerable<float> Single(float from, float to, float step)
{
if (step <= 0.0f) step = (step == 0.0f) ? 1.0f : -step;
if (from <= to)
{
for (float f = from; f <= to; f += step) yield return f;
}
else
{
for (float f = from; f >= to; f -= step) yield return f;
}
}
public static IEnumerable<double> Double(double from, double to, double step)
{
if (step <= 0.0) step = (step == 0.0) ? 1.0 : -step;
if (from <= to)
{
for (double d = from; d <= to; d += step) yield return d;
}
else
{
for (double d = from; d >= to; d -= step) yield return d;
}
}
Такие методы накопированы для всех типов данных, которые известны поциенту.
Но особо интересны эти джва метода
Unlike some other programmimg languages (notably F#), C# doesn't have any built-in support for dealing with ranges of numbers. The .NET Framework does have the Enumerable.Range() method.
- It can only deal with Int32's.
- You can't specify a 'step' from one element of the range to the next. In effect, the step is always one. In this article, I'd therefore like to present a static Range class to deal with these deficiencies.
http://www.c-sharpcorner.com/uploadfile/b942f9/dealing-with-ranges-of-numbers-in-C-Sharp
+95
println (13.0 to 14.0 by 0.1);
println (1.3 to 1.4 by 0.01);
println (7.0 to 8.2 by 0.3);
//Output:
NumericRange(13.0, 13.1, 13.2, 13.3, 13.4, 13.5, 13.6, 13.7, 13.8, 13.9, 14.0)
NumericRange(1.3, 1.31, 1.32, 1.33, 1.34, 1.35, 1.36, 1.37, 1.38, 1.39)
java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
at java.math.BigDecimal.divide(BigDecimal.java:1616)
Скала - говно. Вернее даже говнище. И это достойно отдельного поста.
Консолька для запуска тут:
http://www.simplyscala.com/