2012-12-05 2 views
0

선물 레지스트리에 항목을 만드는 프로그램을 작성해야합니다. 사용자는 원하는 선물 품목을 많이 입력 할 수 있으며이 곳을 구입할 수 있습니다. 사용자가 새 항목을 입력하지 않으려는 욕구를 표현하면 선물 항목 &의 모든 요약 내용이 표시됩니다.내 배열 프로그램

Below is a sample output 
Do you wish to make a gift registry list? (y/n): y 
Enter item: watch 
Enter store: Swatch 
Any more items? (y/n): y 
Enter item: ballpen 
Enter store: National Bookstore 
Any more items? (y/n): n 

Gift Registry: 
watch - Swatch 
ballpen - National Boo 

내가 잘못하지 않았다면,이 프로그램에 대한 배열을 올바르게 사용해야합니까? 카운터의 길이 (사용자가 입력 한 횟수)에 따라 배열의 길이를 가질 수 있습니까?

package arrays; 
import java.util.*; 
import java.util.List; 
import java.util.ArrayList; 

public class GiftRegistry 
{ 
    public static void main (String[] args) 
    { 
     Scanner input = new Scanner(System.in); 

     String choice; 

     // Declare array num 
     ArrayList<String> items = new ArrayList<String>(); 
     ArrayList<String> stores = new ArrayList<String>(); 

     items.add(items); 
     stores.add(stores); 


     System.out.print("Do you wish to make a gift registry list? (y/n):"); 
     choice = input.nextLine(); 

     while (choice.charAt(0) != 'n') 
     { 
      System.out.print("Enter item: "); 
      items.add(items) = input.nextInt(); 

      System.out.print("Enter store: "); 
      stores.add(stores) = input.nextInt(); 


      System.out.print("Any more items? (y/n):"); 
      choice = input.nextLine(); 
     } 

     System.out.println("Gift regisrty: "); 



     } 
} 

난 정말 그러므로 당신 인해 무한의 특성으로 배열을 사용할 수 없습니다

+1

당신은 올바른 질문에 올바른 방향으로 가고 있습니다. 당신은 당신이하려고하는 것을 설명했고, 당신은 그것을 스스로 해결하기위한 노력을 보여주었습니다, 그것은 아주 좋은 일입니다. 그러나 ** 당신의 질문은 정확히 무엇입니까? ** – amit

+0

http://codereview.stackexchange.com/ –

+1

코드를 컴파일하기 전에'ctr'을 사용하기 때문에 코드가 컴파일되지 않을 수도 있습니다. 동적으로 커지는리스트를 위해서 (때문에)는,'java.util.List' 구현을 사용합니다. – jlordo

답변

1

1 문서) 삽입 "볼"수 없으며 int로 "견본"에 대한

http://docs.oracle.com/javase/6/docs/api/java/util/List.html 문서;

2) List이 더 좋은 경우 Arrays을 사용해야하는 이유는 무엇입니까?

편집 :

java.util.List : 인터페이스.

java.util.ArrayList : 사례에 가장 적합한 구현입니다.

사용법 :

List<String> list = new ArrayList<String>(); 
list.add("myFirstString"); 
list.add("mySecondString"); 

각 for 루프에 읽기의 경우 :

for (String currentValue : list) 
    System.out.println(currentValue); 
+0

명백하게 나는 목록을 사용하는 방법을 모른다. : ( –

+0

@CeraKik 무엇을 사용합니까? @_Andrea는 간단한 코드 스 니펫도주었습니다. 도움이되었습니다. – exexzian

+0

@sansix 주석을 작성한 후에 스 니펫을 게시했습니다 ... EDIT 부분을보세요 :) –

0

당신은 동적으로 자동으로 조정됩니다 크기있는 ArrayList의를 사용할 수 있습니다.

0

당신은 배열을 사용한다 생각에 올 - 그러나, 자바의 표준 배열 형식은 동적으로 크기가 조정되지 않습니다 - 즉, 여기에 : 당신의 배열 개체에 대한 참조를 만드는

int[] item = new int[ctr+1]; 
    int[] store = new int[ctr+1]; 

을 크기 1.하지만 당신은 배열의 크기에 영향을 미치는되지 않습니다

ctr++; 

호출 할 때 - 당신은 당신이 새로운 배열을 초기화하는 데 사용하는, 정수 클릭률 (CTR),와 관련된 값에 영향을 미치는를 자동으로하지 않습니다 어레이와 연관 시키십시오.

원시 배열을 계속 사용하려면 원하는 선물 수가> 배열 크기 인 경우 새로운 것을 만들어야합니다. 그런데 항목을 다음과 같이 저장해야합니다. 문자열 :

//If the array 'item' is full.... 
String [] oldItemArray = item; 

//You can increase by 1 or more, to add more empty slots 
String [] newItemArray = new String[oldItemArray.length + 1]; 
for (int i = 0; i < newItemArray.length; i++){ 
//...Put each item from the old array into the new one. 
} 
item = newItemArray; 

자바는 너무 일반적이기 때문에, 이러한 상황에 대한 데이터 구조의 유형을 포함 -의 ArrayList - 할당 된 메모리의 양이 fillled하고 내가보기 엔 그것을 사용하는 것이 좋습니다 때 동적으로 크기를 조정 :

ArrayList<String> items = new ArrayList<String>(); 
ArrayList<String> stores = new ArrayList<String>(); 
... 
... 
items.add(enteredItem); 
stores.add(storedItem); 

코드에 대해서도 몇 가지 다른 작은 문제가있다. 그러나 이것은 코드의 주요 문제점입니다.