마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 스튜디오에서 입력값 (실수) 2개를 받아 계산값을 출력하는 과정 문의

0 추천
반갑습니다. 안드로이드로 간단한 앱을 만들고 싶어서 오늘부터 주섬주섬 실습 위주로 코딩을 해보고 있습니다.

 

해 볼려는 예시는,

회전체의 선속도를 구하는 공식을 APP으로 구현 해 보고자,

RPM과 회전반경을 입력받아, 속도를 계산 (3.1416 * RPM * Dia / 60000) 후 출력하는 간단한 예제를 하고 있는데요,

Plain Text 창을 두 개 만들고 각각 id를 num1 / num2

Button 창을 만들고 id를 bt1

TextView 출력창을 하나 마들고 id를 result로 잡았습니다.

그리고 아래와 같이 java로 작성을 했는데,

 

==========================================================

package com.example.myapplication220321;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate( Bundle savedInstanceState ) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button calc = (Button) findViewById(R.id.bt1);

        //버튼 클릭시 실행
        calc.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EditText num1 = (EditText) findViewById(R.id.num1);
                EditText num2 = (EditText) findViewById(R.id.num2);
                

                TextView result = (TextView) findViewById(R.id.Te1);
                                

                int n1 = Integer.parseInt(num1.getText().toString());
                int n2 = Integer.parseInt(num2.getText().toString());
                int Velo = (int) ((3.142 * n1 * n2) / 60000);
                int Velo1 = Integer.parseInt(Velo);

                result.setText(Velo1);
            }
        });

   }
}

 

TEST 진행시, 아래와 같은 에러가 뜹니다.

C:\Users\hyeon\AndroidStudioProjects\MyApplication220321\app\src\main\java\com\example\myapplication220321\MainActivity.java:33: error: incompatible types: int cannot be converted to String
                int Velo1 = Integer.parseInt(Velo);

 

아무래도 출력값에 대한 문자 설정 관련 에러가 아닐까 하는데

이 부분 해결방법이 어떤게 있을까요..
우라에누스 (290 포인트) 님이 2022년 3월 21일 질문

1개의 답변

0 추천

숫자형태의 문자열을 숫자로 변환할 때, 숫자로 변환할 수 없는 문자열이기 때문에 생기는 에러입니다. 에를 들어 null, "", " ", "a", "a123" 등은 숫자형태의 문자열이 아니므로 변환을 하게되면 에러가 납니다.

실용적인 해결방법은 두가지 방향이 있을 것 같습니다.

사용자의 입력을 제한해서 숫자형태의 문자열만 입력받도록 하는 겁니다.

두번째는, 입력한 문자열을 숫자로 변환할 때 에러가 발생하면 에러를 잡아서 에러시에 메세지를 보여주던가 기본 숫자값을 사용하도록 하는 방법입니다.

첫번째 방법은 아래와 같은 형태로 사용할 수 있을 것 같습니다.

public Integer stringToInt(String s) {
      try {
          return Integer.valueOf(s);
      } catch (NumberFormatException e) {
          return null;
      }
}

private String getNum1() {
  return num1.geText().toString());
}


private String getNum2() {
   return num2.geText().toString());
}

int num1 = stringToInt(getNum1();
int num2 = stringToInt(getNum2();

// 숫자1이나 숫자2가 숫자형 문자열이 아니므로, 에러임.
if (num1 == null || num2 == null) {
    // 에러메시지 출력 같은 에러 핸들링
    return;
}

// 여기는 에러가 아니므로, 정상적인 루틴을 진행.

참고로 float나 double같은 primtive 타입을 floating point의 정확도를 다루는데 문제점이 있을 수 있으니 이 부분이 중요하다면BigInteger나 BigDecimal같은 클래스를 사용하시길 권장합니다. 

spark (227,830 포인트) 님이 2022년 3월 21일 답변
spark님이 2022년 3월 22일 수정
...