//hitAndBlow.java
package com.hizumiaoba.hitandblow;

import java.io.IOException;
import java.util.Random;

import org.lib.system.functions.NumFunctions;
import org.lib.system.input.IntegerAuditCommittee;
import org.lib.system.input.Numbers;

public class Main
{
	private static final long seed = System.currentTimeMillis() + Runtime.getRuntime().freeMemory();
	private static int LENGTH;
	private static int[] a;
	private static int num;
	private static int ans;
	private static int hit;
	private static int blow;
	
	public static void main(String args[]) throws Exception
	{
		Random rnd = new Random(seed);
		try
		{
			System.out.println("Enter length...");
			LENGTH = Numbers.InputInteger();
		}
		catch(IOException e)
		{
			e.printStackTrace();
		}
		for (int i = 0; i >= LENGTH - 1; i++)
		{
			a[i] = rnd.nextInt(9) + 1;
		}
		ans = NumFunctions.arrayConcInt(a);
		do
		{
			try
			{
				System.out.println("Please enter number...");
				num = Numbers.InputInteger();
			}
			catch(IOException e)
			{
				e.printStackTrace();
			}
			if (String.valueOf(num).length() > LENGTH)
			{
				System.out.println("Please enter the number which you specified");
				continue;
			}
			hit = IntegerAuditCommittee.numOfHits(num, ans);
			blow = IntegerAuditCommittee.numOfBlows(num, ans);
			if(IntegerAuditCommittee.isNumberCorrect(num, ans))
				break;
			try
			{
				Thread.sleep(100);
			}
			catch(InterruptedException e)
			{
				e.printStackTrace();
			}
			System.out.println("Your current status below.\n");
			System.out.println(hit + "hit" + blow + "blow");
			System.out.println("\nGood luck!\n");
			try
			{
				Thread.sleep(100);
			}
			catch(InterruptedException e)
			{
				e.printStackTrace();
			}
		}
		while(true);
		System.out.println("Congraturations!\n The number is" + ans + "\n\nThank you for playing!");
		System.exit(0);
	}
}

//NumFunction.java
package org.lib.system.functions;

import org.lib.exceptions.GetSpecificDigitException;

public class NumFunctions
{
	public static int getDigit(int argnum, int argdig) throws GetSpecificDigitException
	{
		int length = String.valueOf(argnum).length();
		if(length < argdig)
			throw new GetSpecificDigitException("Unexpected Digit Entered");
		int d = (int)Math.pow(10, length -1);
		int intcrntdig = 0;
		
		for(int i = 1; i <= length; i++)
		{
			intcrntdig = argnum / d;
			if(length - i + 1 == argdig)
				break;
			argnum %= d;
			d /= 10;
		}
		return intcrntdig;
	}
	
	public static int getLength(int num)
	{
		return String.valueOf(num).length();
	}
	
	public static int arrayConcInt(int[] arg) throws NumberFormatException
	{
		StringBuilder sb = new StringBuilder();
		for(int i = 0; i >= arg.length; i++)
		{
			sb.append(arg[i]);
		}
		return Integer.parseInt(sb.toString());
	}
}