Регулярные выражения

FoxTrix
Сообщения: 16
Зарегистрирован: 10 июл 2013, 20:15

Регулярные выражения

Сообщение FoxTrix » 10 июл 2013, 20:30

Всем доброго времени суток!
Разбираться в создании приложений и соответственно языке начал всего несколько дней назад, поэтому код может быть абсурден)
Решил первым приложением сделать калькулятор, проблема вот в чём:
В textView пишем выражение, допустим 10+20, по нажатию = выполняется код ниже:
(если убрать все лишнее)(переменные int i, int[] a, int result и String res объявлены выше)
[syntax=java]
case R.id.equals:
String str = (String) text.getText(); //в str попадает 10+20
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(str);
i = 0;
while (matcher.find())
{
a = Integer.parseInt(matcher.group()); //в a[0] должно попасть 10, в a[1] соответственно 20
i++;
}
result = a[0] + a[1];
res = Integer.toString(result);
text.setText(text.getText()+ "=" + res);
break;
[/syntax]
но приложение вылетает с ошибкой при нажатии =, путем комментирования выяснил что вылетает из-за этой строки:
[syntax=java]
a = Integer.parseInt(matcher.group());
[/syntax]
подскажите что у меня не правильно? =)
Заранее спасибо!

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

Re: Регулярные выражения

Сообщение Finch » 10 июл 2013, 20:51

Велосипед конечно, но уж как просишь
"(\\d*)+(\\d*)"
matcher.group(1) - все числа до плюса
matcher.group(2) - все числа после плюса
CEO of a company R.id.team

FoxTrix
Сообщения: 16
Зарегистрирован: 10 июл 2013, 20:15

Re: Регулярные выражения

Сообщение FoxTrix » 10 июл 2013, 20:56

Finch писал(а):Велосипед конечно, но уж как просишь
"(\\d*)+(\\d*)"
matcher.group(1) - все числа до плюса
matcher.group(2) - все числа после плюса
тоесть если я оставлю ("\\d+")
и напишу

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

while (matcher.find())
{
       a[i] = Integer.parseInt(matcher.group(i+1));
       i++;
}
то сработает?
(просто вдруг будет не 10+20, а 10+10+20)

FoxTrix
Сообщения: 16
Зарегистрирован: 10 июл 2013, 20:15

Re: Регулярные выражения

Сообщение FoxTrix » 10 июл 2013, 21:53

попробовал как ты написал, всё равно вылетает =(

FoxTrix
Сообщения: 16
Зарегистрирован: 10 июл 2013, 20:15

Re: Регулярные выражения

Сообщение FoxTrix » 13 июл 2013, 16:09

краш вызывает почему-то банальная конвертация String->Int, если закоментировать эти строки

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

a[0] = Integer.parseInt("12");
a[1] = Integer.parseInt("23");
то приложение не вылетает, в чём здесь проблема?
я что-то не так конвертирую?

Аватара пользователя
anber
Сообщения: 584
Зарегистрирован: 10 июн 2013, 15:05
Откуда: UA

Re: Регулярные выражения

Сообщение anber » 13 июл 2013, 20:55

По твоему вопросу: там может быть много ошибок, массив не того типа, выход за пределы массива, итд, Какую ошибку пишет компилятор?
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.

FoxTrix
Сообщения: 16
Зарегистрирован: 10 июл 2013, 20:15

Re: Регулярные выражения

Сообщение FoxTrix » 13 июл 2013, 23:41

в том то и дело что нет ошибок, компилируется, а когда нажимаю кнопку приложение вылетает =(
массив объявлен int[] a;

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

Re: Регулярные выражения

Сообщение rezak90 » 14 июл 2013, 00:23

а может стоит взглянуть в лог?!
R.id.team
Политика на форуме запрещена

FoxTrix
Сообщения: 16
Зарегистрирован: 10 июл 2013, 20:15

Re: Регулярные выражения

Сообщение FoxTrix » 14 июл 2013, 01:19

Изображение

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

Re: Регулярные выражения

Сообщение rezak90 » 14 июл 2013, 02:15

ну вот нулл в onClick, смотри что там нуловое
R.id.team
Политика на форуме запрещена

FoxTrix
Сообщения: 16
Зарегистрирован: 10 июл 2013, 20:15

Re: Регулярные выражения

Сообщение FoxTrix » 14 июл 2013, 02:35

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

TextView text;
int result;
int a[];

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

case R.id.equals:
	a[0] = Integer.valueOf("12");
	a[1] = Integer.valueOf("23");
	result = a[0] + a[1];
	text.setText(text.getText()+ "=" + String.valueOf(result));
	break;
вот весь код кнопки, всё уже упростил для теста дальше некуда, я не представляю что тут может быть нулевого...

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

Re: Регулярные выражения

Сообщение rezak90 » 14 июл 2013, 03:18

text скорее всего нуловый
R.id.team
Политика на форуме запрещена

FoxTrix
Сообщения: 16
Зарегистрирован: 10 июл 2013, 20:15

Re: Регулярные выражения

Сообщение FoxTrix » 14 июл 2013, 03:23

нет, даже так

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

text.setText(String.valueOf(result));
всё равно та же ошибка

Аватара пользователя
anber
Сообщения: 584
Зарегистрирован: 10 июн 2013, 15:05
Откуда: UA

Re: Регулярные выражения

Сообщение anber » 14 июл 2013, 10:55

FoxTrix писал(а):нет, даже так

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

text.setText(String.valueOf(result));
всё равно та же ошибка
Да, как уже сказали text равен null.
Приведи весь текст файла.
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.

FoxTrix
Сообщения: 16
Зарегистрирован: 10 июл 2013, 20:15

Re: Регулярные выражения

Сообщение FoxTrix » 14 июл 2013, 12:57

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

package com.example.calc;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

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

public class MainActivity extends Activity {

	Button num0;
	Button num1;
	Button num2;
	Button num3;
	Button num4;
	Button num5;
	Button num6;
	Button num7;
	Button num8;
	Button num9;
	Button plus;
	Button minus;
	Button mult;
	Button degree;
	Button equals;
	Button reset;
	TextView text;
	int firstNum;
	int secondNum;
	int result;
	int i;
	int a[];
	String str;
	String buff;
	String res;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		plus = (Button) findViewById(R.id.plus);
		minus = (Button) findViewById(R.id.minus);
		mult = (Button) findViewById(R.id.mult);
		degree = (Button) findViewById(R.id.degree);
		equals = (Button) findViewById(R.id.equals);
		reset = (Button) findViewById(R.id.reset);
		num0 = (Button) findViewById(R.id.num0);
		num1 = (Button) findViewById(R.id.num1);
		num2 = (Button) findViewById(R.id.num2);
		num3 = (Button) findViewById(R.id.num3);
		num4 = (Button) findViewById(R.id.num4);
		num5 = (Button) findViewById(R.id.num5);
		num6 = (Button) findViewById(R.id.num6);
		num7 = (Button) findViewById(R.id.num7);
		num8 = (Button) findViewById(R.id.num8);
		num9 = (Button) findViewById(R.id.num9);
		text = (TextView) findViewById(R.id.text);
		OnClickListener num = new OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				switch(v.getId())
				{
					case R.id.reset:
						text.setText("");
						break;
					case R.id.plus:
						text.setText(text.getText() + "+");
						break;
					case R.id.equals:
						//String str = (String) text.getText();
						//Pattern pattern = Pattern.compile("\\d+");
						//Matcher matcher = pattern.matcher(str);
						//i = 0;
						a[0] = Integer.valueOf("12");
						a[1] = Integer.valueOf("23");
						/*while (matcher.find()) 
						{
							//a[i] = Integer.parseInt(matcher.group());
							i++;
				        }*/
						result = a[0] + a[1];
						text.setText(text.getText()+ "=" + String.valueOf(result));
						break;
					case R.id.num0:
						text.setText(text.getText() + "0");
						break;
					case R.id.num1:
						text.setText(text.getText() + "1");
						break;
					case R.id.num2:
						text.setText(text.getText() + "2");
						break;
					case R.id.num3:
						text.setText(text.getText() + "3");
						break;
					case R.id.num4:
						text.setText(text.getText() + "4");
						break;
					case R.id.num5:
						text.setText(text.getText() + "5");
						break;
					case R.id.num6:
						text.setText(text.getText() + "6");
						break;
					case R.id.num7:
						text.setText(text.getText() + "7");
						break;
					case R.id.num8:
						text.setText(text.getText() + "8");
						break;
					case R.id.num9:
						text.setText(text.getText() + "9");
						break;
				}
			}
		};
		reset.setOnClickListener(num);
		plus.setOnClickListener(num);
		minus.setOnClickListener(num);
		mult.setOnClickListener(num);
		degree.setOnClickListener(num);
		equals.setOnClickListener(num);
		num0.setOnClickListener(num);
		num1.setOnClickListener(num);
		num2.setOnClickListener(num);
		num3.setOnClickListener(num);
		num4.setOnClickListener(num);
		num5.setOnClickListener(num);
		num6.setOnClickListener(num);
		num7.setOnClickListener(num);
		num8.setOnClickListener(num);
		num9.setOnClickListener(num);
	}

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

}

Аватара пользователя
anber
Сообщения: 584
Зарегистрирован: 10 июн 2013, 15:05
Откуда: UA

Re: Регулярные выражения

Сообщение anber » 14 июл 2013, 20:53

А в файле main.xml есть элемент у которого id равен text?
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.

FoxTrix
Сообщения: 16
Зарегистрирован: 10 июл 2013, 20:15

Re: Регулярные выражения

Сообщение FoxTrix » 14 июл 2013, 21:21

да
Изображение

xr0m
Сообщения: 131
Зарегистрирован: 06 апр 2013, 14:01

Re: Регулярные выражения

Сообщение xr0m » 14 июл 2013, 21:33

Ты не объявил а

для двух чисел:
a = new int[2];

FoxTrix
Сообщения: 16
Зарегистрирован: 10 июл 2013, 20:15

Re: Регулярные выражения

Сообщение FoxTrix » 14 июл 2013, 21:46

у меня может быть больше 2 чисел, поэтому и не объявил

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Регулярные выражения

Сообщение Mikhail_dev » 14 июл 2013, 21:54

Сбрось весь проект. Так будет быстрее.

Ответить