자바에서 많은 양의 변수가있는 if 문을 사용하지 않는 방법

Axelchico

큰 목록에서 6 개 항목의 이름을 사용자에게 입력하도록 요청하는 프로그램을 만들려고합니다. 그런 다음 해당 항목의 모든 속성을 합산하고 모든 속성의 합계와 비용을 표시합니다. 이 작업을 수행하는 유일한 방법은 for 루프와 함께 엄청난 양의 if 및 else if 문이 필요합니다. 내가 사용해야하는 항목의 양을 고려하면 if 및 else 문이 최소 1000 줄이되며 작성하는 데 많은 시간이 걸립니다.

다음은 내 코드 샘플입니다.

import java.util.Scanner;
public class MyProgram
{
public static void main(String[] args)
  {
    Scanner one = new Scanner(System.in);
    System.out.print("Champion: ");
    String champion = one.next();
    System.out.print("Item 1: ");
    String item1 = one.next();
    System.out.print("Item 2: ");
    String item2 = one.next();
    System.out.print("Item 3: ");
    String item3 = one.next();
    System.out.print("Item 4: ");
    String item4 = one.next();
    System.out.print("Item 5: ");
    String item5 = one.next();
    System.out.print("Item 6: ");
    String item6 = one.next();
    int totalhealth = 0;
    int totalad = 0;
    int totalap = 0;
    int totalarmor = 0;
    int totalmr = 0;
    int totalcdr = 0;
    int totalmana = 0;
    int totalcstr= 0;
    int totalls = 0;
    int totalatcksp = 0;
    int totalcost = 0;
    for(int i = 0; i < 6; i++)
    {
        int itemhealth = 0;
        int itemad = 0;
        int itemap = 0;
        int itemarmor = 0;
        int itemmr = 0;
        int itemcdr = 0;
        int itemmana = 0;
        int itemcstr = 0;
        int itemls = 0;
        int itematcksp = 0;
        int itemcost = 0;
        if(i == 0)
        {
            if(item1.equals("abyssal mask"))
        {
            itemhealth = 350;
            itemmana = 300;
            itemmr = 55;
            itemcdr = 10;
            itemcost = 2900;
        }
        else if (item1.equals("adaptive helm"))
        {
            itemhealth = 350;
            itemmr = 55;
            itemcdr = 10;
            itemcost = 2800;
        }
        else if (item1.equals("aegis of the legion"))
        {
            itemarmor = 30;
            itemmr = 30;
            itemcost = 1100;
        }
        else if (item1.equals("aether wisp"))
        {
            itemap = 30;
            itemcost = 850;
        }
        else if (item1.equals("amplifying tome"))
        {
         itemap = 20;
         itemcost = 435;
        }
        else if (item1.equals("ancient coin"))
        {
            itemcdr = 5;
            itemcost = 350;
        }
        else if (item1.equals("archangel's staff"))
        {
            itemap = 80;
            itemmana = 250;
            itemcost = 3100;
        }
        else if (item1.equals("ardent censer"))
        {
            itemap = 60;
            itemcdr = 10;
            itemcost = 2300;
        }
        else if (item1.equals("athene's unholy grail"))
        {
            itemap= 30;
            itemmr = 30;
            itemcdr = 10;
            itemcost = 2100;
        }
        else if (item1.equals("b.f.sword"))
        {
            itemad = 40;
            itemcost = 1300;
        }
        else if (item1.equals("bami's cinder"))
        {
            itemhealth = 200;
            itemcost = 900;
        }
    }
        if(i == 1)
    {
        if(item2.equals("abyssal mask"))
        {
            itemhealth = 350;
            itemmana = 300;
            itemmr = 55;
            itemcdr = 10;
            itemcost = 2900;
        }
        else if (item2.equals("adaptive helm"))
        {
            itemhealth = 350;
            itemmr = 55;
            itemcdr = 10;
            itemcost = 2800;
        }
        else if (item2.equals("aegis of the legion"))
        {
            itemarmor = 30;
            itemmr = 30;
            itemcost = 1100;
        }
        else if (item2.equals("aether wisp"))
        {
            itemap = 30;
            itemcost = 850;
        }
        else if (item2.equals("amplifying tome"))
        {
         itemap = 20;
         itemcost = 435;
        }
        else if (item2.equals("ancient coin"))
        {
            itemcdr = 5;
            itemcost = 350;
        }
        else if (item2.equals("archangel's staff"))
        {
            itemap = 80;
            itemmana = 250;
            itemcost = 3100;
        }
        else if (item2.equals("ardent censer"))
        {
            itemap = 60;
            itemcdr = 10;
            itemcost = 2300;
        }
        else if (item2.equals("athene's unholy grail"))
        {
            itemap= 30;
            itemmr = 30;
            itemcdr = 10;
            itemcost = 2100;
        }
        else if (item2.equals("b.f.sword"))
        {
            itemad = 40;
            itemcost = 1300;
        }
        else if (item2.equals("bami's cinder"))
        {
            itemhealth = 200;
            itemcost = 900;
        }

    }
    if(i == 2)
    {
        if(item3.equals("abyssal mask"))
        {
            itemhealth = 350;
            itemmana = 300;
            itemmr = 55;
            itemcdr = 10;
            itemcost = 2900;
        }
        else if (item3.equals("adaptive helm"))
        {
            itemhealth = 350;
            itemmr = 55;
            itemcdr = 10;
            itemcost = 2800;
        }
        else if (item3.equals("aegis of the legion"))
        {
            itemarmor = 30;
            itemmr = 30;
            itemcost = 1100;
        }
        else if (item3.equals("aether wisp"))
        {
            itemap = 30;
            itemcost = 850;
        }
        else if (item3.equals("amplifying tome"))
        {
         itemap = 20;
         itemcost = 435;
        }
        else if (item3.equals("ancient coin"))
        {
            itemcdr = 5;
            itemcost = 350;
        }
        else if (item3.equals("archangel's staff"))
        {
            itemap = 80;
            itemmana = 250;
            itemcost = 3100;
        }
        else if (item3.equals("ardent censer"))
        {
            itemap = 60;
            itemcdr = 10;
            itemcost = 2300;
        }
        else if (item3.equals("athene's unholy grail"))
        {
            itemap= 30;
            itemmr = 30;
            itemcdr = 10;
            itemcost = 2100;
        }
        else if (item3.equals("b.f.sword"))
        {
            itemad = 40;
            itemcost = 1300;
        }
        else if (item3.equals("bami's cinder"))
        {
            itemhealth = 200;
            itemcost = 900;
        }
    }
        if(i == 3)
    {
        if(item4.equals("abyssal mask"))
        {
            itemhealth = 350;
            itemmana = 300;
            itemmr = 55;
            itemcdr = 10;
            itemcost = 2900;
        }
        else if (item4.equals("adaptive helm"))
        {
            itemhealth = 350;
            itemmr = 55;
            itemcdr = 10;
            itemcost = 2800;
        }
        else if (item4.equals("aegis of the legion"))
        {
            itemarmor = 30;
            itemmr = 30;
            itemcost = 1100;
        }
        else if (item4.equals("aether wisp"))
        {
            itemap = 30;
            itemcost = 850;
        }
        else if (item4.equals("amplifying tome"))
        {
         itemap = 20;
         itemcost = 435;
        }
        else if (item4.equals("ancient coin"))
        {
            itemcdr = 5;
            itemcost = 350;
        }
        else if (item4.equals("archangel's staff"))
        {
            itemap = 80;
            itemmana = 250;
            itemcost = 3100;
        }
        else if (item4.equals("ardent censer"))
        {
            itemap = 60;
            itemcdr = 10;
            itemcost = 2300;
        }
        else if (item4.equals("athene's unholy grail"))
        {
            itemap= 30;
            itemmr = 30;
            itemcdr = 10;
            itemcost = 2100;
        }
        else if (item4.equals("b.f.sword"))
        {
            itemad = 40;
            itemcost = 1300;
        }
        else if (item4.equals("bami's cinder"))
        {
            itemhealth = 200;
            itemcost = 900;
        }
    }
        if(i == 4)
    {
        if(item5.equals("abyssal mask"))
        {
            itemhealth = 350;
            itemmana = 300;
            itemmr = 55;
            itemcdr = 10;
            itemcost = 2900;
        }
        else if (item5.equals("adaptive helm"))
        {
            itemhealth = 350;
            itemmr = 55;
            itemcdr = 10;
            itemcost = 2800;
        }
        else if (item5.equals("aegis of the legion"))
        {
            itemarmor = 30;
            itemmr = 30;
            itemcost = 1100;
        }
        else if (item5.equals("aether wisp"))
        {
            itemap = 30;
            itemcost = 850;
        }
        else if (item5.equals("amplifying tome"))
        {
         itemap = 20;
         itemcost = 435;
        }
        else if (item5.equals("ancient coin"))
        {
            itemcdr = 5;
            itemcost = 350;
        }
        else if (item5.equals("archangel's staff"))
        {
            itemap = 80;
            itemmana = 250;
            itemcost = 3100;
        }
        else if (item5.equals("ardent censer"))
        {
            itemap = 60;
            itemcdr = 10;
            itemcost = 2300;
        }
        else if (item5.equals("athene's unholy grail"))
        {
            itemap= 30;
            itemmr = 30;
            itemcdr = 10;
            itemcost = 2100;
        }
        else if (item5.equals("b.f.sword"))
        {
            itemad = 40;
            itemcost = 1300;
        }
        else if (item5.equals("bami's cinder"))
        {
            itemhealth = 200;
            itemcost = 900;
        }
    }
        if(i == 5)
    {
        if(item6.equals("abyssal mask"))
        {
            itemhealth = 350;
            itemmana = 300;
            itemmr = 55;
            itemcdr = 10;
            itemcost = 2900;
        }
        else if (item6.equals("adaptive helm"))
        {
            itemhealth = 350;
            itemmr = 55;
            itemcdr = 10;
            itemcost = 2800;
        }
        else if (item6.equals("aegis of the legion"))
        {
            itemarmor = 30;
            itemmr = 30;
            itemcost = 1100;
        }
        else if (item6.equals("aether wisp"))
        {
            itemap = 30;
            itemcost = 850;
        }
        else if (item6.equals("amplifying tome"))
        {
         itemap = 20;
         itemcost = 435;
        }
        else if (item6.equals("ancient coin"))
        {
            itemcdr = 5;
            itemcost = 350;
        }
        else if (item6.equals("archangel's staff"))
        {
            itemap = 80;
            itemmana = 250;
            itemcost = 3100;
        }
        else if (item6.equals("ardent censer"))
        {
            itemap = 60;
            itemcdr = 10;
            itemcost = 2300;
        }
        else if (item6.equals("athene's unholy grail"))
        {
            itemap= 30;
            itemmr = 30;
            itemcdr = 10;
            itemcost = 2100;
        }
        else if (item6.equals("b.f.sword"))
        {
            itemad = 40;
            itemcost = 1300;
        }
        else if (item6.equals("bami's cinder"))
        {
            itemhealth = 200;
            itemcost = 900;
        }
    }
System.out.println("Champion: " + champion);
System.out.println("Total health: " + totalhealth);
System.out.println("Total AD: " + totalad);
System.out.println("Total AP: " + totalap);
System.out.println("Total armor: " + totalarmor);
System.out.println("Total magic resist" + totalmr);
System.out.println("Total CDR: %" + totalcdr);
System.out.println("Total mana: " + totalmana);
System.out.println("Total Critical Strike Chance: " + totalcstr);
System.out.println("Total Life Steal: %" + totalls);
System.out.println("Total Attack Speed: " + totalatcksp);
System.out.println("Total Cost: " + totalcost + "g");


    }
  }
}

저는 CS 첫해에 고등학생입니다. 이것은 내가 알지 못하는 간단한 대답을 가질 수 있으므로 모든 대답, 심지어 가장 분명한 대답에 열려 있습니다.

RAZ_Muh_Taz

나는 논리를 훨씬 더 간단한 것으로 분해했습니다. 문자열의 배열 목록을 사용하면 if / else 검사의 수를 크게 줄일 수 있습니다.

public static void main(String[] args){
ArrayList<String> allItems = new ArrayList<>();
int numberOfItems = 6;
Scanner one = new Scanner(System.in);

System.out.println("Champion: ");
String champion = one.nextLine();

for(int i = 0; i < numberOfItems; i++)
{
    System.out.println("Item " + (i + 1) + ": ");
    String item = one.nextLine();
    System.out.println("Adding item: " + item + " to index " + i + " of the list");
    allItems.add(item);
}
int totalhealth = 0;
int totalad = 0;
int totalap = 0;
int totalarmor = 0;
int totalmr = 0;
int totalcdr = 0;
int totalmana = 0;
int totalcstr= 0;
int totalls = 0;
int totalatcksp = 0;
int totalcost = 0;

for(int i = 0; i < allItems.size(); i++)
{   
    if(allItems.get(i).equals("abyssal mask"))
    {
        totalhealth += 350;
        totalmana += 300;
        totalmr += 55;
        totalcdr += 10;
        totalcost += 2900;
    }
    else if(allItems.get(i).equals("adaptive helm"))
    {
        totalhealth += 350;
        totalmr += 55;
        totalcdr += 10;
        totalcost += 2800;
    }
    //... for all the items using the += for total values
    else {
        System.out.println("Not a valid item: " + allItems.get(i));
        allItems.remove(i);
        i--;
    }
}

System.out.println("Champion: " + champion);
System.out.println("Total health: " + totalhealth);
System.out.println("Total AD: " + totalad);
System.out.println("Total AP: " + totalap);
System.out.println("Total armor: " + totalarmor);
System.out.println("Total magic resist " + totalmr);
System.out.println("Total CDR: %" + totalcdr);
System.out.println("Total mana: " + totalmana);
System.out.println("Total Critical Strike Chance: " + totalcstr);
System.out.println("Total Life Steal: %" + totalls);
System.out.println("Total Attack Speed: " + totalatcksp);
System.out.println("Total Cost: " + totalcost + "g");
}

산출

Champion: 
alexlchico
Item 1: 
abyssal mask
Adding item: abyssal mask to index 0 of the list
Item 2: 
adaptive helm
Adding item: adaptive helm to index 1 of the list
Item 3: 
pikachu
Adding item: pikachu to index 2 of the list
Item 4: 
adaptive helm
Adding item: adaptive helm to index 3 of the list
Item 5: 
abyssal mask
Adding item: abyssal mask to index 4 of the list
Item 6: 
ball of lint
Adding item: ball of lint to index 5 of the list
Not a valid item: pikachu
Not a valid item: ball of lint

Champion: alexlchico
Total health: 1400
Total AD: 0
Total AP: 0
Total armor: 0
Total magic resist 220
Total CDR: %40
Total mana: 600
Total Critical Strike Chance: 0
Total Life Steal: %0
Total Attack Speed: 0
Total Cost: 11400g

남은 일은 내가 원하는 다른 항목에 대해 심연 마스크와 적응 형 투구에 사용한 것과 동일한 논리를 사용하고 + =가있는 합계 값을 사용하여 이전 항목의 기존 계산 된 합계에 추가 할 수 있습니다. 이렇게하면 프로그램이 챔피언이 가지고있는 아이템의 반복 작업을 마치면 총계가 계산되고 최종 프린트에 챔피언이 준 모든 아이템과 함께 보유한 내용이 반영됩니다. 행운을 빕니다!

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

where 절을 사용하고 문자열 변수가 많은 테이블 열에 포함되어 있는지 확인하는 방법

분류에서Dev

문자열에서 많은 양의 문자를 제거하는 더 간단한 방법은 무엇입니까?

분류에서Dev

더 이상 사용되지 않는 문자열 상수에서 'char *'로의 변환을 제거하는 가장 좋은 방법 "

분류에서Dev

숫자 출력을 문자로 바꾸지 않고 R의 함수 내에서 colnames ()를 사용하는 방법은 무엇입니까?

분류에서Dev

사용자가 가입 양식에서 이름 속성을 제거하면 정의되지 않은 색인을 수정하는 방법 PHP

분류에서Dev

C ++에서 주 함수에 대한 많은 양의 입력을 구문 분석하는 올바른 방법은 무엇입니까?

분류에서Dev

<div>에 많은 양의 HTML을 삽입하는 방법은 무엇입니까?

분류에서Dev

많은 양의 값을 변경하기 위해 데이터 프레임에서 .replace를 적용하는 방법

분류에서Dev

어떻게 자바에서 정규식을 사용하여 문자열의 문자 세트의 마지막 발생을 찾는 방법은?

분류에서Dev

쉘에서 많은 문자열을 얻기 위해 하나의 문자를 바꾸는 방법은 무엇입니까?

분류에서Dev

예약 된 클라우드 기능에서 많은 양의 문서를 삭제하는 가장 좋은 방법

분류에서Dev

양식 작업을 사용하지 않고 텍스트 상자 값을 가져 와서 PHP 변수에 할당하는 방법은 무엇입니까?

분류에서Dev

Javascript에서 두 개의 특정 문자 사이에 많은 문자열을 얻는 방법

분류에서Dev

사용자가 Angular의 양식에 임의의 공백이나 반복되는 문자를 삽입하지 않도록하는 방법은 무엇입니까?

분류에서Dev

HTML 양식에서 사용자 지정 HtmlInputElement의 유효성을 검사하는 방법은 무엇입니까?

분류에서Dev

Django에서 사용자 정의 양식의 필드 이름을 지정하는 방법은 무엇입니까?

분류에서Dev

gvim 사용자 정의 구문 파일에서 많은 수의 키워드를 처리하는 쉬운 방법

분류에서Dev

R에서 많은 특수 문자를 "뭔가 더하기 특수 문자"로 바꾸는 방법

분류에서Dev

'string ()'함수를 사용하지 않고 자바 스크립트에서 배열을 문자열로 변환하는 방법은 무엇입니까?

분류에서Dev

많은 양의 nextInt / nextDouble을 단순화하는 방법?

분류에서Dev

자바 스크립트의 많은 문자열 중에서 숫자 문자열 (숫자 만 포함 된 문자열)을 선택하고 나머지 문자열을 무시하는 방법은 무엇입니까?

분류에서Dev

인용되지 않은 키가있는 문자열을 파이썬에서 dict로 바꾸는 방법

분류에서Dev

파일에서 특정 문자열 뒤의 모든 줄을 삭제 한 다음 파이썬을 사용하여 더 많은 줄을 추가하는 방법

분류에서Dev

.csv에 많은 수의 data.frame을 유지하는 방법

분류에서Dev

vba를 사용하여 많은 변형이있는 차원 값의 형식을 올바르게 다시 지정하는 방법은 무엇입니까?

분류에서Dev

사용자가 양식에 아무것도 입력하지 않은 경우 서버의 응답을 피하는 방법

분류에서Dev

MYSQL에서 가장 많은 양의 음료를 주문한 술꾼을 찾는 방법은 무엇입니까?

분류에서Dev

CPU 사용량을 최대화하지 않고 많은 양의 GMSPolyline을 표시하는 방법은 무엇입니까?

분류에서Dev

자바 스크립트를 사용하는 사용자의 onclick 이벤트에서 문서가 새 팝업 창을 만드는 것을 방지하는 방법

Related 관련 기사

  1. 1

    where 절을 사용하고 문자열 변수가 많은 테이블 열에 포함되어 있는지 확인하는 방법

  2. 2

    문자열에서 많은 양의 문자를 제거하는 더 간단한 방법은 무엇입니까?

  3. 3

    더 이상 사용되지 않는 문자열 상수에서 'char *'로의 변환을 제거하는 가장 좋은 방법 "

  4. 4

    숫자 출력을 문자로 바꾸지 않고 R의 함수 내에서 colnames ()를 사용하는 방법은 무엇입니까?

  5. 5

    사용자가 가입 양식에서 이름 속성을 제거하면 정의되지 않은 색인을 수정하는 방법 PHP

  6. 6

    C ++에서 주 함수에 대한 많은 양의 입력을 구문 분석하는 올바른 방법은 무엇입니까?

  7. 7

    <div>에 많은 양의 HTML을 삽입하는 방법은 무엇입니까?

  8. 8

    많은 양의 값을 변경하기 위해 데이터 프레임에서 .replace를 적용하는 방법

  9. 9

    어떻게 자바에서 정규식을 사용하여 문자열의 문자 세트의 마지막 발생을 찾는 방법은?

  10. 10

    쉘에서 많은 문자열을 얻기 위해 하나의 문자를 바꾸는 방법은 무엇입니까?

  11. 11

    예약 된 클라우드 기능에서 많은 양의 문서를 삭제하는 가장 좋은 방법

  12. 12

    양식 작업을 사용하지 않고 텍스트 상자 값을 가져 와서 PHP 변수에 할당하는 방법은 무엇입니까?

  13. 13

    Javascript에서 두 개의 특정 문자 사이에 많은 문자열을 얻는 방법

  14. 14

    사용자가 Angular의 양식에 임의의 공백이나 반복되는 문자를 삽입하지 않도록하는 방법은 무엇입니까?

  15. 15

    HTML 양식에서 사용자 지정 HtmlInputElement의 유효성을 검사하는 방법은 무엇입니까?

  16. 16

    Django에서 사용자 정의 양식의 필드 이름을 지정하는 방법은 무엇입니까?

  17. 17

    gvim 사용자 정의 구문 파일에서 많은 수의 키워드를 처리하는 쉬운 방법

  18. 18

    R에서 많은 특수 문자를 "뭔가 더하기 특수 문자"로 바꾸는 방법

  19. 19

    'string ()'함수를 사용하지 않고 자바 스크립트에서 배열을 문자열로 변환하는 방법은 무엇입니까?

  20. 20

    많은 양의 nextInt / nextDouble을 단순화하는 방법?

  21. 21

    자바 스크립트의 많은 문자열 중에서 숫자 문자열 (숫자 만 포함 된 문자열)을 선택하고 나머지 문자열을 무시하는 방법은 무엇입니까?

  22. 22

    인용되지 않은 키가있는 문자열을 파이썬에서 dict로 바꾸는 방법

  23. 23

    파일에서 특정 문자열 뒤의 모든 줄을 삭제 한 다음 파이썬을 사용하여 더 많은 줄을 추가하는 방법

  24. 24

    .csv에 많은 수의 data.frame을 유지하는 방법

  25. 25

    vba를 사용하여 많은 변형이있는 차원 값의 형식을 올바르게 다시 지정하는 방법은 무엇입니까?

  26. 26

    사용자가 양식에 아무것도 입력하지 않은 경우 서버의 응답을 피하는 방법

  27. 27

    MYSQL에서 가장 많은 양의 음료를 주문한 술꾼을 찾는 방법은 무엇입니까?

  28. 28

    CPU 사용량을 최대화하지 않고 많은 양의 GMSPolyline을 표시하는 방법은 무엇입니까?

  29. 29

    자바 스크립트를 사용하는 사용자의 onclick 이벤트에서 문서가 새 팝업 창을 만드는 것을 방지하는 방법

뜨겁다태그

보관