>source

저는 Java로 첫 번째 과정을 수강하고 있으며, 어떤 이유에서인지 교수님이 이번 주에 필요한 숙제와 함께 새로운 자료의 3 장을 발표했습니다. ArrayLists와 클래스를 처음 접한 것은 이번이 처음입니다. 나는 일반적으로 이러한 것들을 읽는 데 시간을 보내고 싶지만 숙제/퀴즈로 인해 시간이 없습니다 (이미 약 300 개의 Google 검색을 수행했습니다). 어쨌든 여기에 내 질문이 있습니다.

자체 클래스 내에있는 스캐너를 통해 입력 할 수있는 값의 개인 ArrayList를 어떻게 만들 수 있습니까? 이것은 사용자가 값과 함께 입력하는 항목의 목록을 만들려고하는 식료품 목록 프로그램을위한 것입니다. 이것은 그 자체로는 쉽지만 private ArrayLists와 함께 클래스를 추가하면 어렵습니다. 일반적으로 나는 이것을 할 것입니다 ...

   Scanner console = new Scanner(System.in);
    ArrayList<String> groceryList = new ArrayList<>();
    groceryList.add(console.next());

그러나 ArrayList를 비공개로 만들고 자체 클래스에 배치 할 필요가 추가됨에 따라 더 까다로워집니다. 지금까지 제가 가지고있는 것이지만 30 가지 정도의 다른 시도를 해봤지만 내 시도 중 하나만 붙여 넣을 것입니다.

   public class YourGroceryList {
        Scanner console = new Scanner(System.in);
        private ArrayList<YourGroceryList> groceryList = new ArrayList<YourGroceryList>();
        groceryList.add(console.next());
    }

<시간 />

좋아, 이제 내 프로그램을 업데이트했으며 실제로 작동합니다. 다음에 개선 할 점을 알려주세요!

public class test {
    private static final int maxListSize = 10;
    private static String Item = "";
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        YourGroceryList list = new YourGroceryList();
        System.out.println("Type \"stop\" when you are done entering in your list");
        answer(console);
        System.out.println(YourGroceryList.getGroceryList());
        }
        public static void answer(Scanner console){
            for(int i=0; i<maxListSize; i++) {
                Item = console.next();
                if(Item.equals("stop")){
                    return;
                }
                YourGroceryList.setGroceryList(Item);
            }
        }
}
    class YourGroceryList {
        private static ArrayList<String> groceryList = new ArrayList();
        public static ArrayList<String> getGroceryList(){
            return groceryList;
        }
        public static ArrayList<String> setGroceryList(String Item){
            groceryList.add(Item);
            return groceryList;
        }
    }

  • 답변 # 1

    public class YourGroceryList {
      Scanner console = new Scanner(System.in);
      private ArrayList<YourGroceryList> groceryList = new ArrayList<YourGroceryList>();
    }
    
    

    그 부분은 괜찮습니다. 다음은 필드 선언입니다. 이름을 지정하여 필드를 선언합니다 (예 : console ), 유형 (예 : Scanner ) 및 소위식 초기화( new Scanner(System.in) );이러한 필드의 초기 값은 이러한 표현식으로 설정되며 이러한 필드를 변경하지 않으면 그대로 유지됩니다.

    groceryList.add(console.next());
    
    

    여기에서는 허용되지 않습니다. 유형 ( class YourGroceryList )는 내부 유형 (여기서는 필요하지 않음), 필드 및 메소드 만 포함 할 수 있습니다. 따라서 허용되지 않는 진술입니다. 메서드에 넣어야합니다.

    public void doSomething() {
      groceryList.add(console.next());
    }
    
    

    새 목록을 만들 때이 목록을 실행하려면 생성자에 넣으십시오 (일반적으로 나쁜 생각입니다. 생성자는 기본을 초기화하고 부작용이 없어야하지만 원하는 경우 괜찮습니다).

    public YourGroceryList() {
      groceryList.add(console.next());
    }
    
    

관련 자료

  • 이전 android - androidxnavigation을 사용할 때 무작위 충돌
  • 다음 c++ - <<연산자를 오버로드하고 empname을 인쇄하려고합니다