이번 시간에는 소수를 구하는 프로그램을 보겠습니다.

잠시동안 잊고있던 티스토리 포스팅을 다시 하게 되었네요.. 그건 그렇고 제목처럼 소수를 구하는 프로그램을 만들었는데요, 원리를 보시죠.


소수는 본래 1과 자기 자신 말고는 약수가 없는, 즉 나누어 떨어지게 하는 수는 1과 자기 자신밖에 없다는 말 입니다. 그래서 저는 곰곰히 생각해보다 핵심 포인트를 찾았습니다.


약수를 구하는 방법으로 소수를 판별해 내는 것 이었습니다.

약수를 구하는 방법이란, 예를 들어 6 같은 경우 약수는 1,2,3,6 이 있고, 15같은 경우 1,3,5,15 가 있습니다. 또한 24도 1,2,3,4,6,8,12가 있고요. 공통점을 찾으셨나요? 바로 자기 자신과 자기 자신의 반 이하에 약수가 있다는 것 입니다. 그러므로 코드는 아래와 같습니다.


public static boolean getPrime(int num){//특정 수를 집어넣었을때 소수인지 아닌지 판별
  for (int i = 2; i <= num / 2; i++) {
   if (num % i == 0) {
    return false;
   }
  }
  return true;
 }


이제 아시겠나요? 제가 어떻게 소수를 구했는지? 

그럼 저는 다음 포스팅 시간때 돌아와 보겠습니다.

'JAVA' 카테고리의 다른 글

[자바] 100!값을 기존 변수형으로 계산하기  (0) 2018.10.21
자바 외전, 삼항연산자  (0) 2018.04.11
자바 세번째-반복문  (0) 2018.04.08
엘리베이터 프로그램  (0) 2018.03.30
자브아 두번째, 변수  (0) 2018.03.25

원래 자바에는 아주 큰 정수를 계산하는 Big Integer라는 것이 있지만, 나는 그냥 기존의 변수형으로 해결하기로 했다.


그리고 어떻게 할지 생각하던중... 스치는 생각이 바로!


사람들이 계산하는 방법으로 계산하자!

였다. 이 말은 바로 기존의 계산방법인 i x j 의 방식이 아니라, 각 자릿수를 곱하고 앞의 자릿수에다가 더하고... 이러는 과정을 반복하는 것 이다.

그래서 나온 코드가 


package math;

public class bigNums {
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  bigNums bn = new bigNums();
  bn.calculate();
 }
 public void calculate() {
  int save = 0;
  int cal = 0;
  String print = "";
  String str = "1";
  for (int j = 1; j < 101; j++) {
   for (int i = str.length(); i > 0; --i) {
    save = (j * Integer.parseInt(str.substring(i - 1,i)));
    save += cal;
    if (save > 9) {
     cal = (save / 10);
     save = (i == 1)? save : (save % 10);
    } else {
     cal = 0;
    }
    print = Integer.toString(save) + print;
   }
   str = print;
   cal = 0;
   System.out.println(print);
   print = "";
  }
 }
}

이다. 한번 실행해보고 안돼는 것은 댓글로...

'JAVA' 카테고리의 다른 글

[자바] 소수를 구하는 프로그램 만들기  (0) 2018.11.13
자바 외전, 삼항연산자  (0) 2018.04.11
자바 세번째-반복문  (0) 2018.04.08
엘리베이터 프로그램  (0) 2018.03.30
자브아 두번째, 변수  (0) 2018.03.25

이번 시간에는 여러가지 위젯들을 다루어 볼겁니다.


안드로이드 스튜디오의 위젯은 여러가지 뜻이 있으나, 저는 오늘 버튼, 텍스트뷰 등의 위젯들을 다루어 볼 겁니다.


왼쪽 상단에 보시면 여러가지 위젯들을 보실 수 있는데요, 먼저 버튼부터 해보겠습니다.


소개해드리기 전에, 먼저 말씀드릴것이 있는데요,

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
tools:layout_editor_absoluteX="103dp"
tools:layout_editor_absoluteY="146dp" />

위와 같은 상태에서는 constraint 하지 않아서 강제로 위젯의 위치를 (0,0) 으로 옮긴다고 합니다. 이를 막기 위해서는 

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
tools:layout_editor_absoluteX="103dp"
tools:layout_editor_absoluteY="146dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>

위와 같은 코드가 필요합니다. 그럼 다시 본론으로 돌아가서 버튼을 한번 살펴봅시다.

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
tools:layout_editor_absoluteX="103dp"
tools:layout_editor_absoluteY="146dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>


이 xml 코드에서 우리는 onclick을 설정해 줄 필요가 있습니다. 이때 onclick 이란 만일 버튼이 눌렸을때 무엇을 해야 하는지 메소드를 지정해 주는 것 입니다. 그렇게 되면 

android:onClick="onclick"

코드를 추가해준 상태에서 자바 파일에서는

public void onclick(View v){

}

이러한 메소드를 코딩해 버튼이 터치되었을 시의 이벤트에 대비합니다.


또 다른 내용으로는 텍스트 뷰가 있는데요, 텍스트 뷰의 xml코드 또한 버튼의 코드와 다른점이 거의 없습니다.

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />

보시면 두 위젯의 공통점을 아시겠나요? 사실 말하자면 텍스트 뷰도 버튼이 될 수 있습니다. 모든 안드로이드 위젯들이 그러합니다. 

onclick 을 설정해주는 것만으로도 이미 그 위젯을 터치했을때의 이벤트를 만들어놓은것과 같습니다. 또 텍스트를 설정하는 방법 또한 같습니다. 그렇기 때문에 버튼의 텍스트를 설정하는 방식으로 xml파일에서 텍스트 뷰의 텍스트도 설정할 수 있습니다.


여기서 제가 말하고자 함은 안드로이드 스튜디오에서 버튼만 버튼 이벤트 형성이 되는것이 아니라, 텍스트 뷰만 텍스트를 보여줄수 있는 것이 아니라는 겁니다. 그래서 필요한곳에다가 유용하게 사용할 수 있습니다.



그럼 다음시간에...

삼항연산자란?

삼항연산자는 간단하게 봤을때 if-else문을 압축한 연산자 입니다. 예를 들어,

     if (a<b) {
a = 0;
}else{
b = 0;
}

라는 코드가 있으면, 삼항연산자를 이용했을때 

a = a<b ? 0 : 0; 

라고 할 수 있겠습니다. 간단하죠? 그럼 전 가보겠습니다.



public class formoon {


public static void main(String[] args) {

// TODO Auto-generated method stub

for (int i =1; i<10; i++) {

System.out.println(" i = " + i);

}

}


}


이 코드가 오늘 제가 말씀드릴 내용이 함축적으로 들어간 코드입니다.
 

for 문이란 무엇일까?

여러분, 스크래치 아십니까? 스크래치에서 많이 쓰이는 단골 블럭이 있지요. 바로 "~번 반복하기" 입니다. 네, for 문은 반복하는 것 입니다. 코드를 살펴보면
 

for (int i =1; i<10; i++)  이란 부분이 나오는 데요, 이 부분이 가장 중요한 부분입니다.


먼저, 정수형 변수 i를 선언해주고, 값을 1으로 설정해줍니다. 그리고, i에다가 제한을 둡니다. 10 미만일 때면 계속 하라는 뜻입니다.(10 미만이면 부등식이 참이기 때문에 반복문 안의 것들{ } 을 실행시키고, 10 초과면 부등식이 거짓이니 실행 안함) 그리고 마지막으로는 i++이라는 기호가 있는데요, 이것은 i의 값을 계산 뒤 1 더하라는 뜻 입니다.


그래서, System.out.println("" i =  + i); 의 결과로 1,2,3,4,5,6,7,8,9 가 나오겠군요.


이상, 간단한 반복문이었습니다. 

'JAVA' 카테고리의 다른 글

[자바] 100!값을 기존 변수형으로 계산하기  (0) 2018.10.21
자바 외전, 삼항연산자  (0) 2018.04.11
엘리베이터 프로그램  (0) 2018.03.30
자브아 두번째, 변수  (0) 2018.03.25
자바 첫 시간-Hello World!  (0) 2018.02.28

자바로 엘리베이터 프로그램 만들기

 학교를 가려고 하다가 엘리베이터를 타고 가는 것을 프로그램으로 만들고 싶어서 한번 만들어 보았습니다. 설명은 주석에 있으니 그것을 참고하시길!

import java.util.Scanner;
import java.util.Random;

interface num{//메소드와 변수 선언
String questions = "어디로 가실건가요?";//질문
String movingsounds = "weeeing";//움직이는 소리
String arrivedsounds = "dding! you have arrived";//도착 소리
void talking();//메소드 선언. 맨 처음 물어보는 메소드
void reputation();//층을 내려가거나 올라가는 것을 반복하는 메소드
}

public class elevator implements num{
int elevator = 0;//엘리베이터의 현재 층
int input = 0;//내가 입력한 층
int count = 0;//카운트
public static void main(String[] args) {
// TODO Auto-generated method stub
elevator e = new elevator();
e.talking();//인스턴스 생성으로 메소드 호출
}
public void talking(){
int count1 = 0;//substring 할때 사용
int count2 = 0;//이하 동일
String register ="";//substring 에서의 결과를 변환할때 사용
Random r = new Random();
Scanner s = new Scanner(System.in);//스캐너 선언
elevator = r.nextInt(60);//엘리베이터의 현재 층을 설정
System.out.println(questions+ "현재 층은 " + elevator);
String str = s.nextLine();//입력된 내용을 string 으로 변환
try {//에러 유도를 위한 try 구문
while (count < str.length()) {//층 뒤에 문자를 붙일 수 있기 때문에 length 만큼 지정
count++;//카운트를 더함. 반복문 사용 위함.
count1++;//substring 위해 배열의 길이를 구하기 위해 더함.
count2 = count1-1;//count1보다 1 작아야 한 문자만 substring 으로 빼올 수 있기 때문에 지정
if (count1 < 0) {//만약 맨 처음 0-1 을 하면 -1로 에러가 생기니 그것을 방지하기 위해 
count = 0;//count을 0으로 설정.
}
String st = str.substring(count2, count1);//대망의 substring
int test = Integer.parseInt(st);//테스트용. 자세한 내용은 아래 catch 구문에서.
register = register + st;//이것을 이용하면 반복문을 사용하는 동안 123층 이면 1-12-123순으로 쌓임.
input = Integer.parseInt(register);//이 층을 상수형으로 변환.
System.out.println(input);//테스트를 위해 출력
}
}catch(NumberFormatException e) {
//만약 사용자가 421층 ㅁㄴ으ㅏㅁㄴ 이런식으로 쓰면 에러가 나서 자동적으로 뒤의 문자가 배제되게 하는 방식.
}
reputation();//이제 층을 바꿈.
}
public void reputation(){
while (elevator < input){//만일 엘리베이터의 현재 층이 내가 입력한 층보다 낮으면
elevator++;//올라간다.
System.out.println(movingsounds);//소리
System.out.println("현재 층은: " + elevator);//현재 층 알림
}
while (elevator > input) {//만일 엘리베이터의 층이 내가 입력한 층보다 높으면
elevator--;//내려간다.
System.out.println(movingsounds);//소리
System.out.println("현재 층은: " + elevator);//현재 층 알림
}
if (elevator == input) {
System.out.println(arrivedsounds);
System.out.println("현재 층은 " + input);
}
}
}

그럼 오늘의 포스팅은 여기까지!

'JAVA' 카테고리의 다른 글

[자바] 100!값을 기존 변수형으로 계산하기  (0) 2018.10.21
자바 외전, 삼항연산자  (0) 2018.04.11
자바 세번째-반복문  (0) 2018.04.08
자브아 두번째, 변수  (0) 2018.03.25
자바 첫 시간-Hello World!  (0) 2018.02.28

변수란 무엇일까요? 변수. 간단하게 생각하시면 그냥 "변하는 수" 입니다. 예. 그냥 변한다고요.


자바 두번째 시간, 변수(variable)

다시, 제롯 킘 입니다. 오랜만이군요. 오늘은 변수에 대해 설명해볼 예정입니다. 먼저, 변수란 무엇일까요?
 변수란, 프로그램 안에서 변할 수 있는 데이터 라고 하네요.(위키디피아)
여기서 잠깐, "수" 라고 해서 number일 것 이라고 생각하시면 약간 이해하기 어려우 실 수도 있습니다. 변수는 그냥 변하는 데이터 일 뿐입니다.
먼저, 많이 쓰이는 변수의 타입을 알아보면
short
int
long
String
boolean

float

double

등이 있겠습니다. 

int, short, long 등등 이러한 타입의 변수를 "정수형 변수" 라고 합니다. 왜냐하면 이 변수 안에 들어가는 데이터는 모두 1,20,491 같은 정수 이기 때문입니다.

String 은 문자열이 들어갈 수 있는 변수입니다. 말 그대로 "가나다", "안녕하세요" 같은 변수가 들어갈 수 있겠습니다.

boolean 은 논리적 연산을 하는 변수 입니다. 참, 거짓 두가지의 데이터를 넣을 수 있습니다.

double, float 은 실수형 변수 입니다.

백문이 불여일견 이라고, 직접 이클립스 에서 변수에 대해 알아봅시다.

public class demo {


public static void main(String[] args) {

// TODO Auto-generated method stub

int i;

i = 1;

System.out.println(i);

i = 3;

System.out.println(i);

}


}

이 프로그램을 실행해 보면,

이러한 결과가 나오게 됩니다. 중간에 1으로 바꾸고 3으로 바꾸었더니 이렇게 된 것을 보니 이제 이해가 가시죠?

다른 변수 타입들도 똑같이 변할 수 있습니다.

그럼 이러한 변수는 어디에 쓰일까요?

변수의 쓰임

배틀그라운드 아시죠? 유명한 게임인데요, 여기서 변수는 어디에 쓰일 수 있을까요? 변하는 수 이니, 총탄 수, 현재 체력, 이동수단의 속도 등이 변수로 쓰일 수 있습니다. 체력을 예로 들면요, 상대에게 공격을 받았을때 줄어들지 않습니까? 그런 것처럼,
int hp = 100;
.
.
.
hp = 10;
이런식으로, 총에 맞았을 때 체력을 줄이는 것처럼, 변수는 무언가가 변해야 하는 상황에 쓰일 수 있습니다.

이것은 변수의 대표적인 쓰임이고요, 이 외에도 변수는 다양한 기능을 가지고 수행할 수 있답니다.
이상입니다.



'JAVA' 카테고리의 다른 글

[자바] 100!값을 기존 변수형으로 계산하기  (0) 2018.10.21
자바 외전, 삼항연산자  (0) 2018.04.11
자바 세번째-반복문  (0) 2018.04.08
엘리베이터 프로그램  (0) 2018.03.30
자바 첫 시간-Hello World!  (0) 2018.02.28

바텀 네비게이션 뷰 사용하기


오랜만이군요. 안녕하세요, 제롯 킘 입니다. 오늘은 바텀 네비게이션 뷰를 활용하는 방법을 알아볼 건데요, 그럴려면 먼저 전 시간 수업 에서 알아보았던 '새 프로젝트 만들기' 를 참고하여 프로젝트를 만드시는데요, 액티비티를 고를 때는 "Bottom Navigation Activity" 를 선택해 주시고, 만드시면 되겠습니다.

 

프로젝트를 만드셨다면 이러한 화면이 나올 것 입니다.


이 화면에서 여러분은 쓰여진 대로 클릭하시면 앱의 화면이 보여지는 것을 알 수 있습니다.

그러면, 이제 다시 돌아가서 MainActivity.java에서 보면,

private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {

@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_home:
mTextMessage.setText(R.string.title_home);
return true;
case R.id.navigation_dashboard:
mTextMessage.setText(R.string.title_dashboard);
return true;
case R.id.navigation_notifications:
mTextMessage.setText(R.string.title_notifications);
return true;
}
return false;
}
};

이러한 코드를 보실 수 있으실 텐데요, 이 코드와 

BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);

이 코드가 이번 시간에서 가장 중요한 요소가 될 수 있을 것 같습니다.


먼저 첫번째 코드를 봅시다. 첫번째 코드는 바텀 네비게이션 뷰에서 선택을 한 아이템 때문에 실행될 이벤트를 적어놓은 코드입니다.


case R.id.navigation_home;
mTextMessage.setText(R.string.title_home);
return true;

 이 코드에서는 아이디가 navigation.home 인 아이템을 선택했을때의 이벤트를 무엇으로 할 지를 정하고 있습니다. 여기에서는 TextView의 텍스트를 지정하고 있습니다. 그럼 한번 프로그램의 실행결과를 볼까요?

프로그램의 실행 결과는 이렇습니다(밑에 바텀 네비게이션 뷰의 이름이 좀 이상한 것은 양해 부탁드립니다...).


그래서, 바텀 네비게이션 뷰로는 화면을 전환하거나, 토스트 메시지를 띄우거나, 여러가지 것들을 할 수 있겠습니다. 하지만 여기서 어떤 분들은 "저 아이콘 어떻게 바꾸나요? 이름은 어떻게 바꾸나요?" 라고 궁금해 하실 수 있습니다. 예, 바꿀 수 있습니다.


여기에 보시면, xml 형식의 navigation 이라는 파일이 있는데요, 이 파일 안으로 들어가 보면 

<item
android:id="@+id/navigation_dashboard"
android:icon="@drawable/ic_dashboard_black_24dp"

android:title="댓시 보얼드" />

<item
android:id="@+id/navigation_home"
android:icon="@drawable/ic_home_black_24dp"
android:title="@string/title_dashboard" />

<item
android:id="@+id/navigation_notifications"
android:icon="@drawable/ic_notifications_black_24dp"
android:title="@string/title_notifications" />


이러한 코드가 나옵니다. 여기서 

android:title

을 수정하시면 됩니다. 그럼 이름이 바뀌고요, 아이콘은 이 사이트 에 들어가시면 구하실 수 있습니다. 그 다음 drawable 에 되도록 영문(대문자 안됨) 으로 이름을 지정하시고 xml에서 id를 정해 주세요. 그러면 이렇게 아이콘이나 이름을 바꾸실 수 있습니다.



이렇게 해서 바텀 네비게이션 뷰 활용하기가 끝났습니다. 아이템을 선택하였을때의 이벤트는 여러분이 원하시는 대로, 지정하시면 되겠습니다.

예제를 원하시면 방명록에 남겨주세요. 제가 보내겠습니다.

이상입니다. 감사합니다.

새로운 프로젝트 만들기


 안녕하세요, 오늘 안드로이드의 본격적인 수업을 시작하는 제롯 킘 입니다. 수업을 시작하기 전에, 안드로이드 스튜디오를 다운받으셔야 하는데요, 이 링크 로 들어가셔서 안드로이드 스튜디오를 다운 받으시면 되겠습니다. 설치에 대한 설명은 여기에서 알아보시면 될 것 같습니다. 그럼 시작하죠!


안드로이드 스튜디오를 다운받으신 다음(설치까지 완벽하게), 실행을 해 보시면 위 같은 화면이 나올겁니다.(저는 여러가지 프로젝트를 만들어서 왼쪽에 저렇게 뭐가 있는겁니다)

그리고 Start a new Android Studio project 를 누르시면 됩니다.

그런 다음, 앱의 이름을 정하시면 됩니다. 


그 다음 순서로는, 안드로이드 버전을 정하는 순서가 있는데요, 사진은 이렇습니다.


버전을 왜 정하냐고요? 왜냐하면 안드로이드 버전마다 기능이 다르기 때문입니다. 안드로이드 극초반기였던 버전 때는 아직 여러가지 기능이 없던 상태라서 버전이 업그레이드 될 수록 좀 더 다양한 기능을 갖게 하여서 지금 우리가 쓰는 버전으로는 다양한 활동을 할 수 있게 되었습니다. 하지만, 아직도 많은 유저들은 핸드폰을 업그레이드 안 하고 계속 쓰는 경우가 있습니다. 그래서 버전을 지정 한 다음에 그 버전 이상의 버전이 핸드폰에 설치되어 있는 경우만 앱을 다운받고 실행 할 수 있게 한 것이지요. 

 쉽게 정리하면

높은버전 - 적은 유저, 다양한 기능.

낮은버전 - 많은 유저, 적은 기능.

 이 되는 것 입니다. 그리하여 여러분은 상황에 맞게 이 버전을 선택해야할 필요가 있습니다. 

버전을 설정하게 되면 


이러한 화면이 나타나게 됩니다. 액티비티는 안드로이드 스튜디오에서 유저가 볼수 있는 화면(UI) 입니다. 이 화면에서는 제가 버튼을 넣을 수도 있고, 다른 것들을 넣을 수도 있지요. 어쨌든, 이 화면에서는 여러가지 액티비티를 고를 수 있는데요, 필요한 상황에 따라서 액티비티를 고르는 것이 현명하다고 봅니다.

 그리하여 액티비티 까지 고르고 나면 


액티비티의 이름까지 설정하는 화면이 나옵니다. 여기서 액티비티의 이름을 설정하고, finish 버튼을 누르시면 되겠습니다. 


 이렇게 안드로이드 스튜디오에서 새로운 프로젝트 만드는 방법을 알려드렸습니다. 그럼 다음시간에는 그 다음 과정인 바텀 네비게이션 뷰 활용하기 에 대해 알려드리겠습니다. 이상입니다.

안드로이드 스튜디오의 포스팅 순서 입니다.

포스팅을 할 때에는 이 앱을 참고하여 할 것이니, 이 앱을 사용하시면서 이 수업을 들으시면 좋을 것 같습니다. 안 그래도 잘 이해가 된다면 필요 없고요.
 순서는 이렇습니다.

1.새로운 프로젝트 만들기

2.바텀 네비게이션 뷰 활용하기

3.위젯 생성하기 및 다루어보기

4.Intent 활용하기

5.SharedPreferences 활용법 알아보기

6.Dialog 만들어보기

7.Handler 활용법 알아보기

8.Admob 사용법 알아보기

9.마치기

이러한 순서에 따라 수업을 진행할 것으로, 이해가 안 가시는 부분이 있다면 제게 말해주세요.
 아 그리고 이 수업은 JAVA의 지식을 어느정도 가지고 있어야 해서 옆방에 있는 JAVA 수업을 들으신 다음에 공부하시면 훠얼씬 더 잘 될 것 입니다.

그럼 첫 시간때 봅시다!


+ Recent posts