Cały kod klasy WorldString dla zainteresowanych (studenci PJWSTK którzy tu trafią z google). Tylko nie kopiować, bo ja oddaje tydzień (od tego posta) :)
Ktoś kto lepiej ogarnia operacje na bitach i Jave mógłby poprawić funkcje 'hasFlag'.
public class WorldString
{
// Autor: Jerzy Skalski
public static final byte UP = 1; // 2 ^ 0
public static final byte DOWN = 2; // 2 ^ 1
public static final byte LEFT = 4; // 2 ^ 2
public static final byte RIGHT = 8; // 2 ^ 3
private static final byte[] positions = {0,0,1,0,2,0,0,0,3};
private String word = "";
private int flags = 0;
public WorldString(String word)
{
this.word = word;
}
public WorldString(String word, int flags)
{
this.word = word;
this.flags = flags;
}
public void setFlags(int flags)
{
this.flags = flags;
}
public boolean hasFlag(int flag)
{
return this.hasFlag(this.flags, flag);
}
public boolean hasFlag(int flags, int flag)
{
return (flags & (1 << WorldString.positions[flag])) != 0;
}
public byte countFlags(int flags)
{
byte count = 0;
if(this.hasFlag(flags, WorldString.UP))
count++;
if(this.hasFlag(flags, WorldString.DOWN))
count++;
if(this.hasFlag(flags, WorldString.LEFT))
count++;
if(this.hasFlag(flags, WorldString.RIGHT))
count++;
return count;
}
public void println(int flags)
{
if(this.countFlags(flags) > 2)
{
System.out.println("Err: too many parameters");
return;
}
int tmpFlags = this.flags;
this.flags = flags;
System.out.println(this.getAsString());
this.flags = tmpFlags;
}
public String toString()
{
return this.getAsString();
}
private String getAsString()
{
String ret = "";
if(this.hasFlag(WorldString.UP))
{
if(this.hasFlag(WorldString.RIGHT))
{
String tmpWord = this.revertLetters(this.word);
for(int i = 0; i < this.word.length() ; i++)
{
for(int spacje = 0; spacje < i; spacje++)
{
ret += " ";
}
ret += tmpWord.charAt(i) + "\n";
}
}
else if(this.hasFlag(WorldString.LEFT))
{
for(int i = this.word.length() - 1; i >= 0; i--)
{
for(int spacje = 0; spacje < i; spacje++)
{
ret += " ";
}
ret += this.word.charAt(i) + "\n";
}
}
else
{
for(int i = this.word.length() - 1; i >= 0; i--)
{
ret += this.word.charAt(i) + "\n";
}
}
}
else if(this.hasFlag(WorldString.DOWN))
{
if(this.hasFlag(WorldString.RIGHT))
{
String tmpWord = this.revertLetters(this.word);
for(int i = this.word.length() - 1; i >= 0; i--)
{
for(int spacje = 0; spacje < i; spacje++)
{
ret += " ";
}
ret += tmpWord.charAt(i) + "\n";
}
}
else if(this.hasFlag(WorldString.LEFT))
{
for(int i = 0; i < this.word.length() ; i++)
{
for(int spacje = 0; spacje < i; spacje++)
{
ret += " ";
}
ret += this.word.charAt(i) + "\n";
}
}
else
{
for(int i = 0; i < this.word.length(); i++)
{
ret += this.word.charAt(i) + "\n";
}
}
}
else if(this.hasFlag(WorldString.RIGHT))
{
ret = this.revertLetters(this.word);
}
else
{
ret = this.word;
}
return ret;
}
private String revertLetters(String text)
{
StringBuilder ret = new StringBuilder();
for(int i = text.length() - 1; i >= 0 ; i--)
{
ret.append(text.charAt(i));
}
return ret.toString();
}
}