기본 앱을 만듦에 이어 직접 이클립스를 열고 숫자를 입력하는 프로그램은 복잡하고 손이 많이 간다.
따라서 입출력 프로그램을 추가하여 숫자를 입력하기만 하면 출력값을 보여주는 간단한 프로그램을 만들 차례이다.
1.
public class AccountingApp {
public static void main(String[] args) {
double valueOfSupply =args[0]; //args는 string 형식의 배열이기 때문에 숫자 형식(double)은 에러남.
double vatRate = 0.1;
double expenseRate = 0.3;
double VAT = valueOfSupply*vatRate;
double total = valueOfSupply + VAT;
double expense = valueOfSupply*expenseRate;
double income = valueOfSupply - expense;
double dividend1 = (income)*0.5;
//double dividend1 = (valueOfSupply - valueOfSupply*0.3)*0.5;
//valueOfSupply*0.3 = valueOfSupply*expenseRate
double dividend2 = (income)*0.3;
//double dividend2 = (valueOfSupply - expense)*0.3;
//valueOfSupply - expense = income
double dividend3 = (income)*0.2;
System.out.println("Value of supply : "+valueOfSupply);
System.out.println("VAT : "+VAT); //VAT 10%
System.out.println("Total : "+total); //소비자가 판매자에게 지불해야 하는 값
System.out.println("Expense : "+expense); //물건 원가
System.out.println("Income : "+income); //순익
System.out.println("Dividend 1 : "+dividend1); // 1 배당금
//배당금 -> 5 : 3 : 2 비율로 나눠갖기로 합의.
System.out.println("Dividend 2 : "+dividend2); // 2 배당금
System.out.println("Dividend 3 : "+dividend3); // 3 배당금
}
}
-> 에러를 제거하기 위해 string 형식을 double 형식으로 바꿀 필요가 있다.
google 검색 엔진에서 string to double java 를 검색하면 stack overflow 사이트 내 코드가 있다.
public class AccountingApp {
public static void main(String[] args) {
double valueOfSupply =Double.parseDouble(args[0]); //string to double
double vatRate = 0.1;
double expenseRate = 0.3;
double VAT = valueOfSupply*vatRate;
double total = valueOfSupply + VAT;
double expense = valueOfSupply*expenseRate;
double income = valueOfSupply - expense;
double dividend1 = (income)*0.5;
//double dividend1 = (valueOfSupply - valueOfSupply*0.3)*0.5;
//valueOfSupply*0.3 = valueOfSupply*expenseRate
double dividend2 = (income)*0.3;
//double dividend2 = (valueOfSupply - expense)*0.3;
//valueOfSupply - expense = income
double dividend3 = (income)*0.2;
System.out.println("Value of supply : "+valueOfSupply);
System.out.println("VAT : "+VAT); //VAT 10%
System.out.println("Total : "+total); //소비자가 판매자에게 지불해야 하는 값
System.out.println("Expense : "+expense); //물건 원가
System.out.println("Income : "+income); //순익
System.out.println("Dividend 1 : "+dividend1); // 1 배당금
//배당금 -> 5 : 3 : 2 비율로 나눠갖기로 합의.
System.out.println("Dividend 2 : "+dividend2); // 2 배당금
System.out.println("Dividend 3 : "+dividend3); // 3 배당금
}
}
💡 parse : 분석하다
-> double.parsedouble()로 해당 문제가 해결이 되었다.
실행 시켜보면 20000.0을 기준으로 output이 나온다.
이유는 run configurations 내 Arguments - input 부분에서 20000.0 값을 입력했기 때문이다.
실행할 때마다 이클립스를 실행하는 것은 복잡하다.
이클립스 없이 해당 자바 프로그램을 실행시키는 것이 목적이다.
경로를 설정하기 위해 해당 맨 상위 프로젝트 내 Properties click
cd /Users/soheepark/eclipse-workspace/MyApp
-> 아까 복사한 주소로 현재 터미널 위치를 변경한다.
ls -al
-> 현재 위치에 있는 파일들 목록을 보여준다.
AccountingApp.class
-> 이클립스가 해당 파일을 컴파일 시킨 것이다.
👉🏻 AccountingApp.class 파일이 존재하지 않을 때
rm AccountingApp.class
ls -al
javac AccountingApp.java //자바 컴파일러를 통해서 실행 시킨다.
ls -al
결과로 class 파일이 생길 것이다.
클래스 파일을 실행할 때는 자바에게 java AccountingApp 명령을 내려 실행하게 한다.
👉🏻 java AccountingApp 명령 후 에러 원인
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at AccountingApp.main(AccountingApp.java:6)
AccountingApp.java의 6번째 줄에서 에러가 난 것을 알 수 있는데,
값을 입력하지 않았기 때문에 output이 나오지 않았다.
자바 프로그램을 실행하기 위해 코드를 입력해야 하는데, 공급가를 3333.0원으로 설정하고 실행시키면
3333.0에 대한 값이 나온다.
java AccountingApp 3333.0
그렇다면 다른 컴퓨터에서는 이 프로그램을 실행할 수는 없는 걸까?
소스코드까지 가져가고 싶다면 AccountingApp.java만 가져가면 되지만
class 실행파일만 다른 pc로 보내 실행시키면 된다.
-> 그 컴퓨터에 java run time&환경, java virtual machine만큼은 설치가 되어 있어야
이 프로그램을 실행시킬 수 있다.
java vritual machine이 설치되어 있지 않은 pc에 해당 프로그램을 실행시키고 싶다면
https://sourceforge.net/projects/launch4j/
launch4j 프로그램을 설치하면 내가 짠 class 파일을 java virtual machine 없이도 실행 가능하다.
👉🏻대략적인 원리
launch4j는 AccountingApp.class 파일을 감싸주어 내부에 java virtual machine 까지 설치를 해주기 때문에 실행 가능하다.
'[Language] > Java | Spring | JSP' 카테고리의 다른 글
[백준]10718:We love kriii (0) | 2022.04.13 |
---|---|
[백준]2557: Hello World (0) | 2022.04.13 |
[생활코딩]회계 앱 만들기_기본 (0) | 2022.04.12 |
[생활 코딩]자바 입문 (0) | 2022.04.09 |
(Java) localhost:53124 error (0) | 2022.04.09 |