<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Статьи о программировании, все о программировании, исходники программ &#187; Java</title>
	<atom:link href="http://statprog.ru/category/java/feed" rel="self" type="application/rss+xml" />
	<link>http://statprog.ru</link>
	<description>Авторские статьи, исходники программ.</description>
	<lastBuildDate>Mon, 23 Jan 2012 08:02:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Поиск наибольшего общего делителя двух чисел (НОД)</title>
		<link>http://statprog.ru/2009/04/04/poisk-naibolshego-obshhego-delitelya-dvux-chisel</link>
		<comments>http://statprog.ru/2009/04/04/poisk-naibolshego-obshhego-delitelya-dvux-chisel#comments</comments>
		<pubDate>Sat, 04 Apr 2009 12:13:51 +0000</pubDate>
		<dc:creator>evteev</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://statprog.ru/?p=43</guid>
		<description><![CDATA[Если у вас возник вопрос, как найти наибольший общий делитель двух чисел (НОД), то эта статья именно для вас. Для решения этой задачи рассмотрим алгоритм Евклида для нахождения наибольшего общего делителя. Задача на самом деле очень простая, нужно только разобраться в этом алгоритме. Этим мы и займемся. Рассмотрим главный метод программы: Что же в нем [...]]]></description>
			<content:encoded><![CDATA[<p>Если у вас возник вопрос, как найти <strong>наибольший общий делитель</strong> двух чисел (<strong>НОД</strong>), то эта статья именно для вас. Для решения этой задачи рассмотрим <strong>алгоритм Евклида</strong> для нахождения наибольшего общего делителя.</p>
<p>Задача на самом деле очень простая, нужно только разобраться в этом алгоритме. Этим мы и займемся.<span id="more-43"></span></p>
<p>Рассмотрим главный метод программы:</p>
<pre class="brush: java; title: ; notranslate">public static void main(String[] args) throws IOException
{
	BufferedReader temp = new BufferedReader( new InputStreamReader(System.in));
	System.out.print(&quot;Введите первое число: &quot;);
	int n1 = Integer.decode(temp.readLine());

	System.out.print(&quot;Введите второе число: &quot;);
	int n2 = Integer.decode(temp.readLine());
	int n = 1;

	NOD(n1, n2, n);
}</pre>
<p>Что же в нем мы делаем? Создали буферную переменную “temp”, которая используется для ввода данных с клавиатуры. Используя объект “Integer.decode()”, декодируем строку в число и заносим эти данные в переменные “n1” и “n2” соответственно. Первая переменная это наше первое число, а вторая – второе число. </p>
<p>Дальше вызываем объект “<strong>NOD</strong>(n1, n2, n)”, куда передаем первое и второе число, а также переменную “n”, об этой переменной я расскажу чуть позже, а сначала программный код объекта “NOD(n1, n2, n)”:</p>
<pre class="brush: java; title: ; notranslate">static void NOD(int num1, int num2, int n) {
	n = num1 % num2;
	num1 = num2;
	num2 = n;

	if (n &gt; 0)
		NOD(num1, num2, n);
	else
		System.out.println(&quot;НОД равен &quot; + num1);
}</pre>
<p>Здесь и происходит поиск НОД’а. Вычисление наибольшего общего делителя реализовано рекурсивно, т.е. объект вызывает сам себя такое количество раз, которое необходимо для поиска НОД’а. Для этого и нужна переменная “n”, которая принимает значение путем деления 1-го числа на 2-е с остатком, т.е. равна остатку от деления двух чисел. А эти числа в свою очередь тоже изменяет свое значение, 1-му числу присваивается значение 2-го числа, а 2-е – принимает значение остатка от деления 1-го числа на 2-е. </p>
<p>Выполнение поиска максимального числа, на которое делятся и первое и второе числа, заканчивается, когда остаток от деления двух чисел равен 0 или меньше 0.</p>
<p>Я уверен, что эта статья поможет при вычислении наибольшего общего делителя двух чисел на языке <strong>Java</strong>.</p>
<blockquote><p><strong>Автор</strong>: Евтеев Евгений Александрович</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://statprog.ru/2009/04/04/poisk-naibolshego-obshhego-delitelya-dvux-chisel/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Вывод гистограммы распределения чисел от 0 до максимального по интервалам размером 10 на Java</title>
		<link>http://statprog.ru/2009/04/04/vyvod-gistogrammy-raspredeleniya-chisel-ot-do-max-po-intervalam-razmerom-10-na-java</link>
		<comments>http://statprog.ru/2009/04/04/vyvod-gistogrammy-raspredeleniya-chisel-ot-do-max-po-intervalam-razmerom-10-na-java#comments</comments>
		<pubDate>Fri, 03 Apr 2009 22:46:56 +0000</pubDate>
		<dc:creator>evteev</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://statprog.ru/?p=24</guid>
		<description><![CDATA[Я хочу рассмотреть приложение, которое выполняет следующие действия: Чтение из текстового файла набор целых чисел в интервале от 0 до максимального, найденного в файле; Вывод в текстовый файл гистограмму распределения этих чисел по интервалам размером 10; Выделение максимального числа в отдельный интервал. И так, приступим к написанию этой довольно простой программы. Нам нужно создать 2 [...]]]></description>
			<content:encoded><![CDATA[<p>Я хочу рассмотреть приложение, которое выполняет следующие действия:</p>
<ul>
<li><strong>Чтение из текстового файла</strong> набор целых чисел в интервале от 0 до максимального, найденного в файле;</li>
<li><strong>Вывод в текстовый файл</strong> гистограмму распределения этих чисел по интервалам размером 10;</li>
<li><strong>Выделение максимального числа</strong> в отдельный интервал.</li>
</ul>
<p>И так, приступим к написанию этой довольно простой программы. Нам нужно создать 2 файла: входной (“file1.txt”) и выходной(“file2.txt”). Во входной записываем числа от 0, пример  входного файла показан ниже.<span id="more-24"></span> В выходной файл будет выводиться результат работы нашей программы.</p>
<table style="padding: 2px; margin: 3px; border: 1px gray dashed;">
<tr>
<td width="270px">
<strong>Пример входного файла:</strong><br />
23<br />
45<br />
12<br />
26<br />
76<br />
89<br />
100<br />
26<br />
78<br />
54<br />
11<br />
16<br />
28<br />
41<br />
21
</td>
<td valign="top" align="left">
<strong>Пример выходного файла:</strong><br />
00-09:<br />
10-19: ***<br />
20-29: *****<br />
30-39:<br />
40-49: **<br />
50-59: *<br />
60-69:<br />
70-79: **<br />
80-89: *<br />
90-99:<br />
100: *
</td>
</tr>
</table>
<p>Для реализации программы мы используем 2 метода и 4 объекта. Давайте рассмотрим каждый из них. Методы:<br />
1.	“main(String[] args)” – главный метод, выполняющий все основные действия по работе программы, такие как чтение из файла, генерирование конечной строки и запись конечной строки в файл.</p>
<p>Главный метод:</p>
<pre class="brush: java; title: ; notranslate">public static void main(String[] args) {
	String file_enter = &quot;file1.txt&quot;, file_out = &quot;file2.txt&quot;;
	File file = new File(file_out);
	try {
		PrintWriter pw = new PrintWriter(file);
		String str;
		for(int i = 0, j = 9; i &lt; = getMax(file_enter); i += 10, j += 10) {
			str = i == 0 ? &quot;00-0&quot; + j + &quot;: &quot; : i == getMax(file_enter) ? i + &quot;: &quot; : i + &quot;-&quot; + j + &quot;: &quot;;
			pw.println(str + getNum(file_enter, i, j));
		}
		pw.close();
	} catch (IOException e) {
		e.printStackTrace();
	}
}</pre>
<p>2.	“PrintFile(String name)” – вывод содержимого файла, в котором находится гистограмма распределения чисел. Параметр “name”- это путь к выходному файлу.</p>
<p>Метод “PrintFile(String name)”</p>
<pre class="brush: java; title: ; notranslate">public void PrintFile(String name) {
	try {
		RandomAccessFile bstr =
		new RandomAccessFile(name, &quot;r&quot;);
		String s;
		while( (s = bstr.readLine()) != null )
			System.out.println(s);
		bstr.close();
	}
	catch (IOException e) {
		e.printStackTrace();
	}
}</pre>
<p>Теперь рассмотрим все объекты:<br />
1.	“getMax(String name)” – получает максимальное число, находящееся во входном файле. Параметр “name”- это путь к выходному файлу. Файл считывается построчно, по ходу чтения выполняется проверка на присутствие числа в данной строке. Далее, если число было найдено, добавляем это число в векторный массив “vec”, затем путем перехода по всему массиву находим максимальное число и используем “return” для передачи результата “главному методу”.<br />
<strong>Метод</strong> “getMax(String name)”</p>
<pre class="brush: java; title: ; notranslate">public int getMax(String name) {
	int max = 0;
	try	{
		RandomAccessFile br =
		new RandomAccessFile(name, &quot;r&quot;);
		String s;
		Vector vec = new Vector();

		while( (s = br.readLine()) != null )
			if( getNumber(s) != -1 )
				vec.add(getNumber(s));

		max = vec.get(0);
		for(int j = 0; j &lt; vec.size(); j++)
			if( vec.get(j) &gt; max )
				max = vec.get(j);

		vec.clear();
		br.close();
	}
	catch(Exception ex) {
		System.out.println(ex.toString());
	}
	return max;
}</pre>
<p>2.	“getNum(String name, int a, int b)” – строит гистограмму распределения чисел в виде “*” (звездочек), где “name”- это путь к выходному файлу, “a” и “b” – диапазон в виде от “a” до “b” для проверки вхождения числа в этот диапазон.</p>
<p>Метод “getNum(String name, int a, int b)”</p>
<pre class="brush: java; title: ; notranslate">public String getNum(String name, int a, int b) {
	int i = 0;
	String s2 = &quot;&quot;;
	try	{
		RandomAccessFile br =
		new RandomAccessFile(name, &quot;r&quot;);
		String s;
		Vector in = new Vector();

		while( (s = br.readLine()) != null ) {
			if( getNumber(s) != -1 ) {
				i = getNumber(s);
				in.addElement(i);
				if(i &gt;= a &amp;&amp; i &lt; = b)
					s2 = s2 + &quot;*&quot;;
			}
		}

		in.clear();
		br.close();
	}
	catch(Exception ex) {
		System.out.println(ex.toString());
	}
	return s2;
}</pre>
<p>3.	“getNumber(String str)” – декодирование строки в число. Параметр “str”- строка из входного файла. Также выполняет проверку на соответствующий тип данных, если “str” содержит символы вместо чисел, объект возвращает значение равное “-1”.</p>
<p>Метод “getNumber(String str)”</p>
<pre class="brush: java; title: ; notranslate">public int getNumber(String str) {
	if( isNumber(str) )	{
		Integer intVal = new Integer(str);
		return intVal.intValue();
	}
	return -1;
}</pre>
<p>4.	“isNumber(String str)” – собственно сам объект, который проверяет значение параметра “str”, если “str” содержит символы отличные от цифр, объект возвращает значение равное “false”.</p>
<p>Метод “isNumber(String str)”</p>
<pre class="brush: java; title: ; notranslate">public boolean isNumber(String str) {
	for(int i = 0; i &lt; str.length(); i++)
		if ( !Character.isDigit(str.charAt(i)) )
			return false;

	return true;
}</pre>
<p>Вот и всё, все необходимые для реализации методы и объекты написаны, программа готова к работы. Теперь мы можем получить гистограмму распределения чисел больше 0 по интервалам размером 10.</p>
<blockquote><p><strong>Автор</strong>: Евтеев Евгений Александрович</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://statprog.ru/2009/04/04/vyvod-gistogrammy-raspredeleniya-chisel-ot-do-max-po-intervalam-razmerom-10-na-java/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Вывод в текстовый файл только уникальные строки на Java</title>
		<link>http://statprog.ru/2009/04/04/vyvod-v-tekstovyj-fajl-tolko-unikalnye-stroki-na-java</link>
		<comments>http://statprog.ru/2009/04/04/vyvod-v-tekstovyj-fajl-tolko-unikalnye-stroki-na-java#comments</comments>
		<pubDate>Fri, 03 Apr 2009 22:00:01 +0000</pubDate>
		<dc:creator>evteev</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://statprog.ru/?p=11</guid>
		<description><![CDATA[Как получить из входного текстового файла набор строк и вывести во выходной только уникальные строки? В этой статье мы рассмотрим решение выше поставленной задачи. Для этого сначала нужно создать входной файл под именем “file_enter.txt”. В него необходимо занести соответствующие данные. Выходной будет называться “file_out.txt”. В этот файл нужно записать уникальные строки, т.е. должны отсутствовать повторяющиеся [...]]]></description>
			<content:encoded><![CDATA[<h3>Как получить из входного текстового файла набор строк и вывести во выходной только уникальные строки?</h3>
<p>В этой статье мы рассмотрим решение выше поставленной задачи. Для этого сначала нужно создать входной файл под именем “file_enter.txt”. В него необходимо занести соответствующие данные. Выходной будет называться “file_out.txt”. <span id="more-11"></span>В этот файл нужно записать уникальные строки, т.е. должны отсутствовать повторяющиеся строки.</p>
<table style="padding: 2px; margin: 3px; border: 1px gray dashed;">
<tr>
<td width="270px">
<em>Пример входного файла:</em></p>
<ul>
<li>abc</li>
<li>asd</li>
<li>qwerty</li>
<li>zxcv</li>
<li>asd</li>
<li>mnb</li>
<li>abc</li>
<li>zxc</li>
<li>abc</li>
</ul>
</td>
<td valign="top" align="left">
<ul>
<em>Пример выходного файла:</em></p>
<li>abc</li>
<li>asd</li>
<li>qwerty</li>
<li>zxcv</li>
<li>mnb</li>
<li>zxc</li>
</ul>
</td>
</tr>
</table>
<p>Подготовка завершена, теперь приступим непосредственно к реализации этой задачи. Нам необходимо читать входной файл и при каждом шаге выполнять запись текущей строки в выходной файл и в векторный массив “<em>inputs</em>”, выполняя при этом проверку на отсутствие текущей строки в нашем массиве “<em>inputs</em>”. Для удобства создадим объект (функцию) “<em>isnotStr(inputs, s)</em>” с входными параметрами “<em>inputs</em>” и “<em>s</em>”, где “<em>inputs</em>” &#8212; наш векторный массив, “<em>s</em>” – стока из входного файла. Реализуем наши действия в программный код:</p>
<p>Главный метод:</p>
<pre class="brush: java; title: ; notranslate">public static void main(String[] args) {
	String file_enter = &quot;file_enter.txt&quot;, file_out = &quot;file_out.txt&quot;;
	File fname = new File(file_out);
	try	{
		RandomAccessFile bstr =
		new RandomAccessFile(file_enter, &quot;r&quot;);
		PrintWriter bstr2 = new PrintWriter(fname);
		String s;
		Vector inputs = new Vector();
		while( (s = bstr.readLine()) != null )
			if( isnotStr(inputs, s) ) {
				inputs.addElement(s);
				bstr2.println(s);
			}
		bstr.close();
		bstr2.close();
		inputs.clear();
		System.out.println(&quot;&quot;);
	} catch (IOException e)	{
		e.printStackTrace();
	}

	PrintFile(file_out);
}</pre>
<p>Объект “isnotStr(Vector<string> inputs, String str)”</p>
<pre class="brush: java; title: ; notranslate">public boolean isnotStr(Vector inputs, String str) {
	for(int j = 0; j &lt; inputs.size(); j++)
		if(inputs.get(j).equals(str))
			return false;

	return true;
}</pre>
<p>На последнем этапе мы реализуем вывод на экран содержимое выходного файла. Там находятся, полученные в ходе выполнения программы, уникальные строки из входного файла. Здесь совсем все просто, читаем файл и построчно выводим данные на экран. Эти действия мы поместим в отдельный метод под названием “PrintFile(file_out)”, где “file_out” – наш выходной файл. Вот собственно этот метод:</p>
<p>Метод “PrintFile(String name)”</p>
<pre class="brush: java; title: ; notranslate">public void PrintFile(String name) {
	try {
		RandomAccessFile bstr =
		new RandomAccessFile(name, &quot;r&quot;);
		String s;
		while((s = bstr.readLine()) != null)
			System.out.println(s);
		bstr.close();
	}
	catch (IOException e) {
		e.printStackTrace();
	}
}</pre>
<p>Запустив наше приложение, выходной файл заполнится строками из входного файла, причем будут отсутствовать повторяющиеся строки. Наша задача решена.</p>
<blockquote><p><strong>Автор</strong>: Евтеев Евгений Александрович</p></blockquote>
<p></string></p>
]]></content:encoded>
			<wfw:commentRss>http://statprog.ru/2009/04/04/vyvod-v-tekstovyj-fajl-tolko-unikalnye-stroki-na-java/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

