All pastes #715852 Raw Edit

Anonymous

public java v1 · immutable
#715852 ·published 2007-09-26 14:57 UTC
rendered paste body
//johnaby g-6 o-2 k-inf1000/h07./* John Alexander Bye Obligatorisk Innlevering #2 INF1000		   12. September 07MNM5-INFPS 2007-HØST DSNGruppe 6 johnaby@ifi.uio.no*/class Oilfield{	//Coders conduct (private)	private String owner = "";	private int refined;		public Oilfield(String sOwner, int iRefined)	{		//Initialize		owner = sOwner;		refined = iRefined;	//Initialize to zero	}		//Return private members	String getOwner()	{		return owner;	}		int getRefined()	{		return refined;	}		void setOwner(String sOwner)	{		owner = sOwner;	}		void setRefined(int iRefined)	{		refined = iRefined;	}}//-- OILSYS.JAVA --////johnaby g-6 o-2 k-inf1000/h07./* John Alexander Bye Obligatorisk Innlevering #2 INF1000		   12. September 07MNM5-INFPS 2007-HØST DSNGruppe 6 johnaby@ifi.uio.no  TODO: List over oilcompanies .. Find out how many fields each company owns*/import easyIO.*;	//Inimport java.util.*;	//HashSetclass Oilsys{	//For printError	static final int ERROR_NORMAL = 0, ERROR_CRITICAL = 1;		//Global declaration of the Oilfield-classarray & In	static Oilfield database[][] = new Oilfield[16][22];	static In input = new In();		static public void totalRefined()	{		System.out.printf("\n-- Total Refined From All Oilfields --\n");				int totalRefined = 0, numFields = 0;				for(int row = 0; row < 16; row++)		{			for(int col = 0; col < 22; col++)			{				if(database[row][col] != null)				{					//Occupied so they're refining... No money-back guarantee!					totalRefined += database[row][col].getRefined();					numFields++;				}			}		}				System.out.printf("\nTotal Refined:\t" + totalRefined + " (Total Oilfields: " + numFields + ")");	}		static public void largestRefined()	{		int fieldX = 0, fieldY = 0, maxRefined = 0;		String sStatus;				System.out.printf("\n-- Largest Refined Value --\n");		//Loop through the array to find the largest refined and it's position for extra data				for(int row = 0; row < 16; row++)		{			for(int col = 0; col < 22; col++)			{				if(database[row][col] != null)				{					if(database[row][col].getRefined() > maxRefined)					{						maxRefined = database[row][col].getRefined();						fieldX = row;						fieldY = col;					}				}			}		}		if(maxRefined != 0)		{			if(database[fieldX][fieldY].getOwner() == null)				sStatus = "(Available)";			else				sStatus = "(Occupied by " + database[fieldX][fieldY].getOwner() + ")";			System.out.printf("Largest Refined Value:\t" + maxRefined + " at " + fieldX + "," + fieldY + ". STATUS: " + sStatus);		}		else		{			printError("The oilfields have not refined any oil yet!", ERROR_NORMAL);		}	}		static public void updateRefined()	{		int fieldX, fieldY;		System.out.printf("\n-- Updated Refined Values --\nField F(row,column):\t");				fieldX = input.inInt(" \n\rF(,)");	//Filter out chars		fieldY = input.inInt(" \n\rF(,)");		input.inChar();	//Read it all				if(!checkBounds(fieldX, fieldY))			printMenu();	//Jump to menu				if(!checkField(fieldX, fieldY))		{			//Occupied, so we can update its values			System.out.printf("\nCurrent Refined Value:\t" + database[fieldX][fieldY].getRefined());						System.out.printf("\nUpdate Refined with:\t");						int newRefined;			//Get user input			newRefined = input.inInt();						database[fieldX][fieldY].setRefined( database[fieldX][fieldY].getRefined() + newRefined );					System.out.printf("\nNew Refined Value:\t" + database[fieldX][fieldY].getRefined());		}		else		{			printError("Field is vacant. Unable to update!", ERROR_NORMAL);		}	}		static public void printRegistrants()	{		System.out.printf("\n-- List of Registrants --\n");				HashSet<String> hashSet = new HashSet<String>();				final int iTotalFields = 352; //16*22		int iOccupiedFields = 0;				for(int row = 0; row < 16; row++)		{			for(int col = 0; col < 22; col++)			{				if(!checkField(row, col))	//Field is occupied				{					hashSet.add( database[row][col].getOwner() ); //Add owner to our HashSet					iOccupiedFields++;				}			}		}				System.out.printf("\nRegistrants:\t");				String sFormattedRList = "", sTempRegistrant;		int iOccurences = 0;				Iterator hashIterator = hashSet.iterator();				while(hashIterator.hasNext())		{			sTempRegistrant = (String)hashIterator.next();						//Check occurences (Cheap Code-Hack) This could have been done differently -- Though this works so it's good enough for this cause ;)						for(int row = 0; row < 16; row++)			{				for(int col = 0; col < 22; col ++)				{					if(!checkField(row, col))	//Field is occupied, check for equals					{						if(sTempRegistrant.toLowerCase().equals(database[row][col].getOwner().toLowerCase()))						{							iOccurences++;						}					}				}			}			sFormattedRList += sTempRegistrant + " (" + iOccurences + "), ";			iOccurences = 0;		}				System.out.printf(sFormattedRList + "(Occupied\\Available: " + iOccupiedFields + "\\" + iTotalFields + ").\n");	}		static public void printMap()	{		System.out.printf("\n-- Map over Ruritania --\n");				//Print the header		System.out.printf("    0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21");				//For-loop to check for fields and generate row numbers		for(int row = 0; row < 16; row++)		{			if(row < 10) //Cosmetic hack ;) It's all about looks				System.out.printf("\n" + row + "   ");			else				System.out.printf("\n" + row + "  ");							for(int col = 0; col < 22; col++)	//Check for vacancies			{				if(checkField(row, col))					System.out.printf(".  ");				else					System.out.printf("x  ");			}		}	}		static public void purgeField()	{		int fieldX, fieldY;		String sRegistrant;				System.out.printf("\n-- Purge Oilfield --\nField F(row,column):\t");				//Read user input		fieldX = input.inInt(" \n\rF(,)"); //Filter out chars		fieldY = input.inInt(" \n\rF(,)");		input.inChar();	//Read it all				if(!checkBounds(fieldX, fieldY))			printMenu();	//Jump to menu					if(checkField(fieldX, fieldY))		{			//Available -- Can't purge an empty field			printError("Field is vacant. Unable to purge!", ERROR_NORMAL);			printMenu();		}				System.out.printf("\nRegistrant:\t");				//Check that it it's the actual owner of the field who wants to have it purged		sRegistrant = input.inLine();				if(sRegistrant.toLowerCase().equals(database[fieldX][fieldY].getOwner().toLowerCase()))		{			System.out.printf("\nRegistrant verified! Processing request...");		}		else		{			printError("Registrant could not be verified! Check spelling!", ERROR_NORMAL);			printMenu();		}						//We know its occupied. Lets set the owner-string to NULL		System.out.printf("\nPurging field " + fieldX + "," + fieldY + " registered to " + database[fieldX][fieldY].getOwner() + ".");		database[fieldX][fieldY].setOwner(null);	}		static public void buyField()	{		int fieldX, fieldY;		boolean fieldsAvailable = false;		System.out.printf("\n-- Buy Oilfield --\nField F(row,column):\t");				//Check if there are any fields available		for(int row = 0; row < 16; row++)		{			for(int col = 0; col < 22; col++)			{				if(checkField(row, col))				{					fieldsAvailable = true;					break;				}			}		}		if(!fieldsAvailable)		{			printError("No fields available. All are currently occupied!", ERROR_NORMAL);			printMenu();		}				//Read user input		fieldX = input.inInt(" \n\rF(,)");	//Filter out chars		fieldY = input.inInt(" \n\rF(,)");		input.inChar();	//Read it all				if(!checkBounds(fieldX, fieldY))			printMenu();	//Jump to menu				if(!checkField(fieldX, fieldY))		{			//Occupied			printError("Field is already occupied!", ERROR_NORMAL);		}		else		{			//Available -- CaChing!			System.out.printf("\nRegistrant:\t");			String sRegistrant;			int	iOldRefined = 0; //Initialize to zero, passing to constructor later on						//Check if it has been constructed, then see if they have refined any oil			if(database[fieldX][fieldY] != null)			{				if(database[fieldX][fieldY].getRefined() > 0)					iOldRefined = database[fieldX][fieldY].getRefined();			}						sRegistrant = input.inLine();	//Allow whitespaces			database[fieldX][fieldY] = new Oilfield(sRegistrant, iOldRefined);						System.out.printf("\nField " + fieldX + "," + fieldY + " sold to " + sRegistrant + ".");		}	}		static public boolean checkBounds(int fieldX, int fieldY)	{		if((fieldX > 15) || (fieldY > 21))		{			printError("Field was out of bounds. Check that the field you specified does not exceed F(15,21)!\n",ERROR_CRITICAL);			return false;	//Out of bounds -- Let the user pick again		}				return true;	//In bounds	}		static public boolean checkField(int fieldX, int fieldY)	{		if((database[fieldX][fieldY] == null) || (database[fieldX][fieldY].getOwner() == null))			return true;	//Available					return false;	//Field is Occupied	}		static public void printError(String sErrorMessage, int type)	{		switch(type)		{			case ERROR_NORMAL:				System.out.printf("\n** ERROR:\t" + sErrorMessage);				break;			case ERROR_CRITICAL:				System.out.printf("\n** CRITICAL ERROR:\t" + sErrorMessage);		}	}		static public void printMenu()	{		System.out.printf("\n\n\n-- OilSystem by John A Bye --\n"					+	"1. Buy Oilfield\n"					+	"2. Purge Oilfield\n"					+	"3. Map Oilfields\n"					+	"4. List Owners\n"					+	"5. Update Refined Values\n"					+	"6. Largest Refined Value\n"					+	"7. Total Refined (All Oilfields)\n"					+	"8. Exit\n"					+	"Choice:\t");					//Get user input		int iChoice;		iChoice = input.inInt();			//Execute input		switch(iChoice)		{		case 1:			buyField();			break;		case 2:			purgeField();			break;		case 3:			printMap();			break;		case 4:			printRegistrants();			break;		case 5:			updateRefined();			break;		case 6:			largestRefined();			break;		case 7:			totalRefined();			break;		case 8:			System.exit(1);	//Exit 		default:			printError("Invalid choice!", ERROR_NORMAL);		}		printMenu();	}		static public void main(String[] args)	{		printMenu();	}}