Моя первая программа

Размещайте ссылки на ваши собственные приложения с целью пиара или для бета-тестирования.
Правила форума
О возможности разместить информацию о вашем приложении на главной странице сайта читайте здесь: http://startandroid.ru/ru/about/pomosch ... henii.html
Ответить
behzodbek
Сообщения: 58
Зарегистрирован: 23 дек 2012, 22:58
Откуда: UZB Namangan

Моя первая программа

Сообщение behzodbek » 26 дек 2012, 23:14

Как смог написал. Моя первая программа. Калькулятор. Код тоже выложу

Код: Выделить всё

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {
	double prev;
	TextView tv;
	boolean isEmpty;

	final int ADD = 1, REMOVE = 2, MULTI = 3, DIVIDE = 4, EQUALS = 5;
	int LAST_ACTION = 0;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		prev = 0;
		tv = (TextView) findViewById(R.id.TextView1);
		isEmpty = true;
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {

		// TODO Auto-generated method stub
		finish();
		return super.onOptionsItemSelected(item);
	}

	public void onclick(View v) {

		switch (v.getId()) {
		case R.id.ButtonClear:
			tv.setText("0.0");

			break;
		case R.id.Button01:
			if (isEmpty) {
				tv.setText("1");
				isEmpty = false;
			} else
				tv.setText(tv.getText().toString() + 1);
			break;
		case R.id.Button02:
			if (isEmpty) {
				tv.setText("2");
				isEmpty = false;
			} else
				tv.setText(tv.getText().toString() + 2);
			break;
		case R.id.Button03:
			if (isEmpty) {
				tv.setText("3");
				isEmpty = false;
			} else
				tv.setText(tv.getText().toString() + 3);
			break;
		case R.id.Button04:
			if (isEmpty) {
				tv.setText("4");
				isEmpty = false;
			} else

				tv.setText(tv.getText().toString() + 4);
			break;
		case R.id.Button05:
			if (isEmpty) {
				tv.setText("5");
				isEmpty = false;
			} else
				tv.setText(tv.getText().toString() + 5);
			break;
		case R.id.Button06:
			if (isEmpty) {
				tv.setText("6");
				isEmpty = false;
			} else

				tv.setText(tv.getText().toString() + 6);
			break;
		case R.id.Button07:
			if (isEmpty) {
				tv.setText("7");
				isEmpty = false;
			} else

				tv.setText(tv.getText().toString() + 7);
			break;
		case R.id.Button08:
			if (isEmpty) {
				tv.setText("8");
				isEmpty = false;
			} else

				tv.setText(tv.getText().toString() + 8);
			break;
		case R.id.Button09:
			if (isEmpty) {
				tv.setText("9");
				isEmpty = false;
			} else

				tv.setText(tv.getText().toString() + 9);
			break;
		case R.id.buttonDot:
			if (isEmpty) {
				tv.setText("0.");
				isEmpty = false;
			} else

				tv.setText(tv.getText().toString() + ".");
			break;
		case R.id.button0:
			if (isEmpty) {

			} else

				tv.setText(tv.getText().toString() + 0);
			break;
		case R.id.imageButtonDelete:
			if (isEmpty)
				;
			else if (tv.getText().toString().length() == 1) {
				tv.setText("0.0");
				isEmpty = true;
			} else

				tv.setText(tv.getText().toString()
						.substring(0, tv.getText().toString().length() - 1));
			break;
		case R.id.ButtonSqrt:
			double sqrt = Math
					.sqrt(Double.parseDouble(tv.getText().toString()));
			tv.setText(String.valueOf(sqrt));
			break;

		case R.id.imageButtonAdd:
			// Недоделанный код
			prev = Double.parseDouble(tv.getText().toString());
			LAST_ACTION = ADD;
			tv.setText("0.0");
			isEmpty = true;
			break;
		case R.id.imageButtonRemov:
			LAST_ACTION = REMOVE;
			prev = Double.parseDouble(tv.getText().toString());
			tv.setText("0.0");
			isEmpty = true;

			break;
		case R.id.imageButtonMultiplication:
			LAST_ACTION = MULTI;
			prev = Double.parseDouble(tv.getText().toString());
			tv.setText("0.0");
			isEmpty = true;
			break;
		case R.id.buttonDivide:
			LAST_ACTION = DIVIDE;
			prev = Double.parseDouble(tv.getText().toString());
			tv.setText("0.0");
			isEmpty = true;
			break;
		case R.id.imageButtonEquals:
			calc();
			break;
		case R.id.buttonAbs:
			tv.setText(String.valueOf(Double.parseDouble(tv.getText()
					.toString()) * -1));
			break;
		}
	}

	public void calc() {
		switch (LAST_ACTION) {
		case ADD:
			tv.setText(String.valueOf(prev
					+ Double.parseDouble(tv.getText().toString())));
			break;
		case REMOVE:
			tv.setText(String.valueOf(prev
					- Double.parseDouble(tv.getText().toString())));
			break;
		case MULTI:
			tv.setText(String.valueOf(prev
					* Double.parseDouble(tv.getText().toString())));
			break;
		case DIVIDE:
			tv.setText(String.valueOf(prev
					/ Double.parseDouble(tv.getText().toString())));
			break;

		}
	}
}
Вложения
Calculator.7z
Тут АПК
(160.03 КБ) 326 скачиваний
Изображение

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Моя первая программа

Сообщение rezak90 » 26 дек 2012, 23:52

Не качал но по коду пробежался. Первое, что попалось в глаза так это то что текст (нули, точки и т.д.) не вынесены в ресурсы или лучше даже сделать их константами. Второе, это наименование некоторых переменных оставляет желать лучшего. Третье, это константы пишутся в верхнем регистре, переменные в нижнем, у вас в коде не всегда это соответствует истине. Четвёртое, нету проверки на существующую точку, я могу жать на точку бесконечное число раз. Пятое, нету проверок деления на ноль и переполнения буфера.
R.id.team
Политика на форуме запрещена

behzodbek
Сообщения: 58
Зарегистрирован: 23 дек 2012, 22:58
Откуда: UZB Namangan

Re: Моя первая программа

Сообщение behzodbek » 27 дек 2012, 09:40

rezak90 писал(а):Не качал но по коду пробежался. Первое, что попалось в глаза так это то что текст (нули, точки и т.д.) не вынесены в ресурсы или лучше даже сделать их константами. Второе, это наименование некоторых переменных оставляет желать лучшего. Третье, это константы пишутся в верхнем регистре, переменные в нижнем, у вас в коде не всегда это соответствует истине. Четвёртое, нету проверки на существующую точку, я могу жать на точку бесконечное число раз. Пятое, нету проверок деления на ноль и переполнения буфера.
Спасибо вам большое. Вот таких и осуждении я ждал. Вопрос почему Тексты надо вынести на ресурсы? Почему так принято?
Изображение

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Моя первая программа

Сообщение rezak90 » 27 дек 2012, 10:51

выносят по двум причинам: 1) если понадобится локализация то нужно поменять только в одном месте и это удобно; 2) если нужно использовать "текст" более чем один раз, то его придётся писать заного к тому же заного инициализировать, а так есть уже константа под которую выделена память, к тому же менять только один раз придётся если понадобиться.
R.id.team
Политика на форуме запрещена

behzodbek
Сообщения: 58
Зарегистрирован: 23 дек 2012, 22:58
Откуда: UZB Namangan

Re: Моя первая программа

Сообщение behzodbek » 27 дек 2012, 17:19

Всё исправил. Работает на ура. Я собой горжусь.
Изображение

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Моя первая программа

Сообщение rezak90 » 27 дек 2012, 17:36

behzodbek писал(а):Всё исправил. Работает на ура. Я собой горжусь.
сделай больше операций, а то плюс, минус, делить и умножить как то мало... хотя бы корень, квадрат, синусы и косинусы, ну можно добавить ещё и перевод в двоичную и шестн. системы.
R.id.team
Политика на форуме запрещена

Аватара пользователя
Finch
Сообщения: 439
Зарегистрирован: 16 июл 2012, 21:37

Re: Моя первая программа

Сообщение Finch » 29 дек 2012, 11:20

God object =)
CEO of a company R.id.team

Ответить