Finish Calc
This commit is contained in:
parent
940552ab62
commit
f59f4fb783
4 changed files with 102 additions and 6 deletions
|
@ -1,7 +1,104 @@
|
||||||
package uk.kagurach.android101
|
package uk.kagurach.android101
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import kotlin.math.pow
|
||||||
|
|
||||||
fun Kaculate(src: String,ctx :Context) : String{
|
fun Kaculate(src: String,ctx :Context) : String{
|
||||||
return ""
|
if (src.isBlank()){
|
||||||
|
return src
|
||||||
|
}
|
||||||
|
|
||||||
|
val OpList = charArrayOf('+','-','x','/','^')
|
||||||
|
var numStack = floatArrayOf()
|
||||||
|
var opStack = charArrayOf()
|
||||||
|
|
||||||
|
var _curnum = ""
|
||||||
|
|
||||||
|
var _immediatePop = false
|
||||||
|
for (i in 0..<src.length){
|
||||||
|
if (src[i] in '0'..'9' || src[i] == '.'){
|
||||||
|
_curnum += src[i]
|
||||||
|
}
|
||||||
|
else if (src[i] in OpList){
|
||||||
|
try {
|
||||||
|
numStack += _curnum.toFloat()
|
||||||
|
_curnum = ""
|
||||||
|
}catch (e:Exception){
|
||||||
|
ToastHelper.ShowToast(e.toString(),ctx)
|
||||||
|
return src
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_immediatePop){
|
||||||
|
try {
|
||||||
|
val exp = numStack.last()
|
||||||
|
numStack.dropLast(1)
|
||||||
|
val num = numStack.last()
|
||||||
|
numStack.dropLast(1)
|
||||||
|
|
||||||
|
numStack += num.pow(exp)
|
||||||
|
_immediatePop = false
|
||||||
|
}catch (e:Exception){
|
||||||
|
ToastHelper.ShowToast(e.toString(),ctx)
|
||||||
|
return src
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (src[i] == '^'){
|
||||||
|
_immediatePop = true
|
||||||
|
}else{
|
||||||
|
opStack += src[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
ToastHelper.ShowToast("Unknown input char:" + src[i].toString(),ctx);
|
||||||
|
return src
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_curnum.isNotEmpty()){
|
||||||
|
try {
|
||||||
|
numStack += _curnum.toFloat()
|
||||||
|
_curnum = ""
|
||||||
|
}catch (e:Exception){
|
||||||
|
ToastHelper.ShowToast(e.toString(),ctx)
|
||||||
|
return src
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (numStack.size != opStack.size+1 ){
|
||||||
|
ToastHelper.ShowToast("Ops and nums Not Match!",ctx)
|
||||||
|
return src
|
||||||
|
}
|
||||||
|
|
||||||
|
var intStackCurr = 0
|
||||||
|
for (i in 0..<opStack.size){
|
||||||
|
if (opStack[i] == 'x'){
|
||||||
|
val a = numStack[intStackCurr]
|
||||||
|
val b = numStack[intStackCurr+1]
|
||||||
|
numStack[intStackCurr] = a*b
|
||||||
|
numStack.drop(intStackCurr+1)
|
||||||
|
opStack.drop(i)
|
||||||
|
}else if (opStack[i] == '/'){
|
||||||
|
val a = numStack[intStackCurr]
|
||||||
|
val b = numStack[intStackCurr+1]
|
||||||
|
numStack[intStackCurr] = a/b
|
||||||
|
numStack.drop(intStackCurr+1)
|
||||||
|
opStack.drop(i)
|
||||||
|
}else{
|
||||||
|
intStackCurr ++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (opStack.size!=0) {
|
||||||
|
for (i in opStack) {
|
||||||
|
if (i == '+') {
|
||||||
|
numStack[0] += numStack[1]
|
||||||
|
numStack.drop(1)
|
||||||
|
} else {
|
||||||
|
numStack[0] -= numStack[1]
|
||||||
|
numStack.drop(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return numStack[0].toString()
|
||||||
}
|
}
|
|
@ -38,7 +38,7 @@ public class MainActivity extends AppCompatActivity {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
|
||||||
TextView tv = findViewById(R.id.tv_hello);
|
TextView tv = findViewById(R.id.tv_hello);
|
||||||
textViewAppendString(tv,"Starting Kagura Init");
|
textViewAppendString(tv,"Starting Initialize");
|
||||||
if (Build.VERSION.SDK_INT >= 33) {
|
if (Build.VERSION.SDK_INT >= 33) {
|
||||||
textViewAppendString(tv,"Find api > 33, checking permission");
|
textViewAppendString(tv,"Find api > 33, checking permission");
|
||||||
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
|
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
|
||||||
|
|
|
@ -13,7 +13,6 @@ import androidx.core.graphics.Insets;
|
||||||
import androidx.core.view.ViewCompat;
|
import androidx.core.view.ViewCompat;
|
||||||
import androidx.core.view.WindowInsetsCompat;
|
import androidx.core.view.WindowInsetsCompat;
|
||||||
|
|
||||||
import uk.kagurach.android101.KaculateKt;
|
|
||||||
public class Page3 extends AppCompatActivity {
|
public class Page3 extends AppCompatActivity {
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
@ -43,7 +42,7 @@ public class Page3 extends AppCompatActivity {
|
||||||
findViewById(R.id.P3Dot).setOnClickListener(new CalculateOnClickListener());
|
findViewById(R.id.P3Dot).setOnClickListener(new CalculateOnClickListener());
|
||||||
findViewById(R.id.P3CE).setOnClickListener(new CalculateOnClickListener());
|
findViewById(R.id.P3CE).setOnClickListener(new CalculateOnClickListener());
|
||||||
findViewById(R.id.P3ChengFang).setOnClickListener(new CalculateOnClickListener());
|
findViewById(R.id.P3ChengFang).setOnClickListener(new CalculateOnClickListener());
|
||||||
findViewById(R.id.P3Result).setOnClickListener(new CalculateOnClickListener());
|
findViewById(R.id.P3EqualButton).setOnClickListener(new CalculateOnClickListener());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -74,7 +73,7 @@ public class Page3 extends AppCompatActivity {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void calc(){
|
private void calc(){
|
||||||
TextView textView = findViewById(R.id.P3Result);
|
TextView textView = findViewById(R.id.P3CalcResult);
|
||||||
String result = Kaculate(textView.getText().toString(),this);
|
String result = Kaculate(textView.getText().toString(),this);
|
||||||
textView.setText(result);
|
textView.setText(result);
|
||||||
}
|
}
|
||||||
|
|
|
@ -189,7 +189,7 @@
|
||||||
android:text="." />
|
android:text="." />
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/P3Result"
|
android:id="@+id/P3EqualButton"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_row="4"
|
android:layout_row="4"
|
||||||
|
|
Loading…
Reference in a new issue