przekazywanie argumentów a operator alternatywy

0

Witam, mam do zrobienia pewne zadanie : polega na wypisywaniu podanych wyrazów w różny, podany sposób, tj : od lewej do prawej, od dolu do gory, na krzyz itp.....czesc kodu ma wygladac tak:
WorldString w1 = new WorldString("Eukaliptus");
WorldString w2 = new WorldString("Yuka",
WorldString.LEFT|WorldString.DOWN
);

Wyswietlony pozniej tekst powinien wygladac tak:
Eukaliptus

Y
u
k
a

A problem mam taki: w jaki sposob przekazywac drugi argument do konstruktora (WorldString.LEFT|WorldString.DOWN) ? Przeciez | to operator bitowy, tutaj raczej nie ma mozliwosci zeby to wykorzystac, a zmiennej nie nazwe tez LEFT|WorldString.DOWN............ :-|

0

hm LEFT i DOWN to zmienne statyczne typu byte w klasie WorldString, a konstruktor przyjmuje Object...da Ci to cokolwiek?:)

0

Jak to nie ma możliwości, żeby to wykorzystać?
powiedzmy, że LEFT = 1, DOWN = 2 i już jest...
LEFT | DOWN = 3

((LEFT | DOWN) & LEFT != 0) prawda, więc idziemy w lewo...
((LEFT | DOWN) & DOWN != 0) prawda, więc idziemy w dół...</quote>

0

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();
	}
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1