Урок 19. Пишем простой калькулятор

Обсуждение уроков
G_O_R
Сообщения: 57
Зарегистрирован: 13 ноя 2012, 08:02

Re: Урок 19. Пишем простой калькулятор

Сообщение G_O_R » 18 ноя 2012, 08:31

Можно вопрос еще. подскажите как процедуру и функцию написать и в какой часть кода разместить. или дайте ссылку на материал где пример описания и вызова процедуры. в инете не нашел. и в книжках нет. слова procedure и function в эклипсе даже не распознается.

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

Re: Урок 19. Пишем простой калькулятор

Сообщение rezak90 » 19 ноя 2012, 10:45

G_O_R писал(а):Можно вопрос еще. подскажите как процедуру и функцию написать и в какой часть кода разместить. или дайте ссылку на материал где пример описания и вызова процедуры. в инете не нашел. и в книжках нет. слова procedure и function в эклипсе даже не распознается.
Я угараю :D :D :D . Я не злорадствую, не поймити, просто смешно. И так, что на счёт вопроса... я так понял вы переходите с делфи или с паскаля (или ещё с чего то древнего чего я не знаю)?! Начните читать что то про ООП, простейшая книга по джаве и всё проеснится. А на перёд скажу, что в джаве нету таких понятий как процедура или функция ;)
R.id.team
Политика на форуме запрещена

G_O_R
Сообщения: 57
Зарегистрирован: 13 ноя 2012, 08:02

Re: Урок 19. Пишем простой калькулятор

Сообщение G_O_R » 19 ноя 2012, 13:59

Да с дельфи) ну мне надо несколько кусков кода чтоб потом их вызвать. процедуры. ооп знаю. ну на джаве не писал вот и не знаю) мне нужен аналог какой нить чтоб не писать одно и тоже а только вызвать из разных мест. книги есть для андроид, но там нету. если знайте хотя бы скажите команду я поищу в инете.

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

Re: Урок 19. Пишем простой калькулятор

Сообщение rezak90 » 19 ноя 2012, 14:21

методы это и есть процедуры и функции. Процедура:

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

public void myMethod() {}
параметр void ничего не возвращает и по этому можно сравнить с процедурой.

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

public int myMethod() {... return 10;}
метод возвращает int, аналог функции
Методы прописываете в классе, например в классе Activity или же в отдельном, где душа пожелает.
R.id.team
Политика на форуме запрещена

G_O_R
Сообщения: 57
Зарегистрирован: 13 ноя 2012, 08:02

Re: Урок 19. Пишем простой калькулятор

Сообщение G_O_R » 19 ноя 2012, 15:08

Спасибо) а говорили нет тут процедур))) просто название другое)

nubodroid
Сообщения: 28
Зарегистрирован: 19 ноя 2012, 08:20

Re: Урок 19. Пишем простой калькулятор

Сообщение nubodroid » 20 ноя 2012, 11:53

Всем доброго времени суток!

Вопрос больше относится к EditText.
Мне нужно ввести в поле число с точностью до десятых. Проконтроллировать вывод на экрна я могу, а вот как проконтроллировать пользователя? Он ведь может и 100 знаков после запятой ввести.

Всем заранее спасибо!

G_O_R
Сообщения: 57
Зарегистрирован: 13 ноя 2012, 08:02

Re: Урок 19. Пишем простой калькулятор

Сообщение G_O_R » 20 ноя 2012, 20:36

Здравствуйте! искал по форумам и сайтам и опять не нашел(((и узнать команды как найти значение по таблице кодировки символов и обратно. в дельфи chr и ord. Резак может станем компаньонами?) есть идея и есть прога, надо перевести в андроид и улучшить)

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Урок 19. Пишем простой калькулятор

Сообщение AndreyI » 20 ноя 2012, 21:35

Android, как и JAVA работает со строками Unicode, все символы строк представлены в виде в виде двухбайтного char, в нем и хранится собственно значение Unicode данного символа. С ним можно работать как с числом (позволяет любые арифметические и логические операции, сравнения и т.п), фактически он соответствует беззнаковому short (других беззнаковых числовых типов в JAVA не существует).
Из типа String можно получить массив char[] каждый элемент которого и будет содержать код символа в Unicode

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

Re: Урок 19. Пишем простой калькулятор

Сообщение rezak90 » 20 ноя 2012, 21:43

всё правильно подмечено
G_O_R , с конкретными предложениями пиши в ЛС
R.id.team
Политика на форуме запрещена

nubodroid
Сообщения: 28
Зарегистрирован: 19 ноя 2012, 08:20

Re: Урок 19. Пишем простой калькулятор

Сообщение nubodroid » 20 ноя 2012, 22:20

Люди, а как можно сделать так чтобы при вводе текста в EditText он печатался справа налево?

З.Ы. По поводу кол-во знаков после запятой, никто ничего не знает? Просто спрашивал на 4pda... там тоже тишина....

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

Re: Урок 19. Пишем простой калькулятор

Сообщение rezak90 » 20 ноя 2012, 22:34

nubodroid писал(а):Люди, а как можно сделать так чтобы при вводе текста в EditText он печатался справа налево?

З.Ы. По поводу кол-во знаков после запятой, никто ничего не знает? Просто спрашивал на 4pda... там тоже тишина....
что бы справа на лево нужно в проперти добавить android:gravity="right"
по поводу форматирования то нужно использовать интерфейс InputFilter.
R.id.team
Политика на форуме запрещена

nubodroid
Сообщения: 28
Зарегистрирован: 19 ноя 2012, 08:20

Re: Урок 19. Пишем простой калькулятор

Сообщение nubodroid » 20 ноя 2012, 22:50

rezak90 писал(а):
nubodroid писал(а):Люди, а как можно сделать так чтобы при вводе текста в EditText он печатался справа налево?

З.Ы. По поводу кол-во знаков после запятой, никто ничего не знает? Просто спрашивал на 4pda... там тоже тишина....
что бы справа на лево нужно в проперти добавить android:gravity="right"
по поводу форматирования то нужно использовать интерфейс InputFilter.
Спасибо. Сейчас попробую... На счет форматирования... нашел на stackoverflow...

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

EditText txtInput = (EditText) findViewById(R.id.txtInput);
txtInput.addTextChangedListener(new TextWatcher() 
{
    public void afterTextChanged(Editable edt) 
    {
        String temp = edt.toString();
        int posDot = temp.indexOf(".");
        if (posDot <= 0) return;
        if (temp.length() - posDot - 1 > 2)
        {
            edt.delete(posDot + 3, posDot + 4);
        }
    }

    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {}

    public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {}
});

G_O_R
Сообщения: 57
Зарегистрирован: 13 ноя 2012, 08:02

Re: Урок 19. Пишем простой калькулятор

Сообщение G_O_R » 21 ноя 2012, 08:06

AndreyI писал(а):Android, как и JAVA работает со строками Unicode, все символы строк представлены в виде в виде двухбайтного char, в нем и хранится собственно значение Unicode данного символа. С ним можно работать как с числом (позволяет любые арифметические и логические операции, сравнения и т.п), фактически он соответствует беззнаковому short (других беззнаковых числовых типов в JAVA не существует).
Из типа String можно получить массив char[] каждый элемент которого и будет содержать код символа в Unicode

То что в юникоде я знаю. прочел уже. там представление вроде /u+число. значит я так понял мою строку типа string присвоить массиву типа char. потом сделать без знаковую переменную short и произвести арифметические действия и потом все обратно чтоб собрать строку

G_O_R
Сообщения: 57
Зарегистрирован: 13 ноя 2012, 08:02

Re: Урок 19. Пишем простой калькулятор

Сообщение G_O_R » 21 ноя 2012, 09:21

Что не так в этом коде. почему не выдает нечего. даже ошибку.

public void shifr1(int key){
char[] inf= new char[160];
short Ord;
String outf = "";
outf.isEmpty();

if (etText1.length()==0){
Toast.makeText(this, "Нет символов для шифрования", Toast.LENGTH_LONG).show();

}
else {
if(key==1){

for (int j = 0; j == etText1.length(); j++) {

//проверка
// if (inf[j]>='a' & inf[j]<='z' | inf[j]>='A' & inf[j]<='Z' | inf[j]>='а' & inf[j]<='я' | inf[j]>='А' & inf[j]<='Я' | inf[j]>='0' & inf[j]<='9') {
//узнаем код символа и добавляем ключ у нас он =7
Ord=(short) (inf[j]+7);
//обратно находим значение символьное из числа и пишет обратно в массив ну строку
inf[j]=(char) Ord;
//inf[j]=chr(t);
//тут счетчик собирает все символы уже шифрованные в строку
outf+=inf[j];

// etText1.setText(outf);
// }
}
}
}
etText1.setText(outf.toString());
}

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Урок 19. Пишем простой калькулятор

Сообщение AndreyI » 21 ноя 2012, 10:38

По образу и подобию написал, логику шифрования не менял :)

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

	public void shifr1(int key) {
		CharSequence inf; //Сюда будем получать входную строку
		StringBuffer stringbuff = new StringBuffer(); //А сюда выходную

		if (etText1.length() == 0) {
			Toast.makeText(this, "Нет символов для шифрования",
					Toast.LENGTH_LONG).show();
		} else {
			inf = etText1.getText(); //Считываем строку из текстового поля
			if (key == 1) {

				for (int j = 0; j < inf.length(); j++) {
					char chr = inf.charAt(j); //Считываем символ
					// проверка
					if ((chr >= 'a' && chr <= 'z' )|| (chr >= 'A' &&chr <= 'Z')
							||( chr >= 'а' && chr <= 'я' )|| (chr >= 'А' && chr <= 'Я')
							||( chr >= '0' && chr <= '9')) {
						// узнаем код символа и добавляем ключ у нас он =7
						// обратно находим значение символьное из числа и пишет
						// обратно в массив ну строку
						chr = (char) (chr + 7);

						// тут счетчик собирает все символы уже шифрованные в
						// строку
						stringbuff.append(chr);

					}
				}
				etText1.setText(stringbuff);
			}

		}
	}

G_O_R
Сообщения: 57
Зарегистрирован: 13 ноя 2012, 08:02

Re: Урок 19. Пишем простой калькулятор

Сообщение G_O_R » 21 ноя 2012, 13:24

у меня в начал было srtingbuff но ругался на него и предлагал менять. хотелось бы узнать всё таки в чем ошибка в моем коде?
Спасибо Андрей попробую сейчас твой вариант)

G_O_R
Сообщения: 57
Зарегистрирован: 13 ноя 2012, 08:02

Re: Урок 19. Пишем простой калькулятор

Сообщение G_O_R » 21 ноя 2012, 13:36

Спасибо Андрей)работает) не подскажите максимальное число знаков в юникоде?))) ну чтоб вдруг за рамки таблицы не вышло))))

G_O_R
Сообщения: 57
Зарегистрирован: 13 ноя 2012, 08:02

Re: Урок 19. Пишем простой калькулятор

Сообщение G_O_R » 02 дек 2012, 15:21

помогите еще раз с кодом))) она должна делать следующее, должна взять текст записать в массив. потом одномерный массив делить по 5 элементам и эти 5 элементов менять местами, если скажем 23 символа то отставшие 3 элемента должны записаться в обратном порядке, то есть алгоритм перестановки. у меня он не выдает нечего. при нажатии или не происходит нечего или пусто. несколько раз менял типы переменных и поменял циклы. не выводит все равно. Спасибо заранее.


public void perest (int s1, int s2, int s3, int s4, int s5, int key2Pos, int key3){
// String st="";
StringBuffer stringbuff = new StringBuffer(); //А сюда выходную
// String outf2=""; //А сюда выходную

int p,d,g;
g=5;
int ar [] = {s1,s2,s3,s4,s5}; //массив содержащий маску перестановок
char inf1 [] ; //Сюда будем получать входную строку
char inf2 [] ; //Сюда будем получать входную строку


if ((key2Pos==1) || (key2Pos==3) ||(key2Pos==4)){

if (etText1.length() == 0) {

Toast.makeText(this, "Нет символов для шифрования",

Toast.LENGTH_LONG).show();

} else {

int n= etText1.length();
inf1 = new char [n];
inf2 = new char [n];
p= (int) ( n / g);
d = (int) ( n % g);

for (int k = 0; k<n; k++){
inf1[k]= etText1.getText().charAt(k); //Считываем строку из текстового поля
}

for (int m = 0; m < p*g; m++) {
//цикл по количеству групп d-1 потому что изначально
//вот тут мы получаем некий индекс. Но нам нужно изначально, чтобы было с начала
// строки вот тут поэтому важно, чтобы вот эта часть начиналась с нуля
// так как в делфи все начинается с единицы, поставили -1.
for (int l=1; l==5; l++ ){
inf2[l] =inf1[m*g+ar[l]]; //в этой строчке вся сила алгоритма.
//мы берем данные по группно. m*g - это количество пройденных символов.
//они нам не нужны, поэтому мы их пропускаем. И нужно
//записать переставленные символы. Для этого и нужен был массив. То есть
//итый элемент массива - это не i, а то, что мы захотим))
stringbuff.append(inf2[l]);
}
//однако описанный алгоритм хорош когда длина строки делится нацело на длину
//группы. А если нет, то с оставшимися символами надо что-то делать
//вот я и делаю...записываю их в обратном порядке. Тут другую перестановку
//не придумать
}
if(p!=0) {
// st="";
for (int m = p*g; m == n; m++) {
for (int l=1; l == p; l++ ){
stringbuff.append(inf1[g*d+(p-l+1)]);
// st=st+inf1[g*d+(p-l+1)];
// outf2=outf2+st;
}
}
}

}

// etText1.getText().clear();
etText1.setText(stringbuff);

}

}

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Урок 19. Пишем простой калькулятор

Сообщение AndreyI » 03 дек 2012, 15:06

Такие коды лучше дебажить пошагово и смотреть значения переменных на каждом шаге, собственно, так делается в любом языке программирования, если код содержит вычисления.
Поставьте точку останова в начале метода и запустите программу в режиме отладки.

G_O_R
Сообщения: 57
Зарегистрирован: 13 ноя 2012, 08:02

Re: Урок 19. Пишем простой калькулятор

Сообщение G_O_R » 05 дек 2012, 10:13

Трудно от дельфи перейти на джава за неделю) всё время забываю что тут индексы начинаются с 0. но в общем хорошая вещь) сделал алгоритм записи в двумерный массив текста из едита( из одномерного массива). если кому надо выложу. Спасибо за совет)

Ответить