Регулярные выражения
Регулярные выражения
Всем доброго времени суток!
Разбираться в создании приложений и соответственно языке начал всего несколько дней назад, поэтому код может быть абсурден)
Решил первым приложением сделать калькулятор, проблема вот в чём:
В 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]
подскажите что у меня не правильно? =)
Заранее спасибо!
Разбираться в создании приложений и соответственно языке начал всего несколько дней назад, поэтому код может быть абсурден)
Решил первым приложением сделать калькулятор, проблема вот в чём:
В 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]
подскажите что у меня не правильно? =)
Заранее спасибо!
Re: Регулярные выражения
Велосипед конечно, но уж как просишь
"(\\d*)+(\\d*)"
matcher.group(1) - все числа до плюса
matcher.group(2) - все числа после плюса
"(\\d*)+(\\d*)"
matcher.group(1) - все числа до плюса
matcher.group(2) - все числа после плюса
CEO of a company R.id.team
Re: Регулярные выражения
тоесть если я оставлю ("\\d+")Finch писал(а):Велосипед конечно, но уж как просишь
"(\\d*)+(\\d*)"
matcher.group(1) - все числа до плюса
matcher.group(2) - все числа после плюса
и напишу
Код: Выделить всё
while (matcher.find())
{
a[i] = Integer.parseInt(matcher.group(i+1));
i++;
}
(просто вдруг будет не 10+20, а 10+10+20)
Re: Регулярные выражения
попробовал как ты написал, всё равно вылетает =(
Re: Регулярные выражения
краш вызывает почему-то банальная конвертация String->Int, если закоментировать эти строки
то приложение не вылетает, в чём здесь проблема?
я что-то не так конвертирую?
Код: Выделить всё
a[0] = Integer.parseInt("12");
a[1] = Integer.parseInt("23");
я что-то не так конвертирую?
Re: Регулярные выражения
По твоему вопросу: там может быть много ошибок, массив не того типа, выход за пределы массива, итд, Какую ошибку пишет компилятор?
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
Re: Регулярные выражения
в том то и дело что нет ошибок, компилируется, а когда нажимаю кнопку приложение вылетает =(
массив объявлен int[] a;
массив объявлен int[] a;
Re: Регулярные выражения
ну вот нулл в onClick, смотри что там нуловое
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Регулярные выражения
Код: Выделить всё
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;
Re: Регулярные выражения
нет, даже так
всё равно та же ошибка
Код: Выделить всё
text.setText(String.valueOf(result));
Re: Регулярные выражения
Да, как уже сказали text равен null.FoxTrix писал(а):нет, даже таквсё равно та же ошибкаКод: Выделить всё
text.setText(String.valueOf(result));
Приведи весь текст файла.
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
Re: Регулярные выражения
Код: Выделить всё
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;
}
}
Re: Регулярные выражения
А в файле main.xml есть элемент у которого id равен text?
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
Re: Регулярные выражения
Ты не объявил а
для двух чисел:
a = new int[2];
для двух чисел:
a = new int[2];
Re: Регулярные выражения
у меня может быть больше 2 чисел, поэтому и не объявил
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Регулярные выражения
Сбрось весь проект. Так будет быстрее.