2011-04-28 8 views
0

내가하려는 것은 사용자에게 항목 목록을 요청하고 두 개의 배열을 만듭니다. 하나는 itemName에 대한 것이고 다른 하나는 itemPrice에 대한 것입니다. 내 프로그램은 지금에만 itemPrice 다루는 나는 다음과 같이 출력 한 결합 두 배열의 목록을 두 배열을 결합 할 수있는 방법의 징후가 없습니다 :자바 - 두 배열을 결합 하시겠습니까?

빵 - 1.20

우유 - 2.00

여기까지 두 어레이가 있지만 이름 배열은 실제로 아무것도 포함되어 있지 않습니다. 감사!

public class TaxClass 
{ 
private Input newList; 
/** 
* Constructor for objects of class Tax 
* Enter the number of items 
*/ 
public TaxClass(int anyAmount) 
{ 
    newList = new Input(anyAmount); 
} 
/** 
* Mutator method to add items and their cost 
* Enter the sales tax percentage 
*/ 
public void addItems(double anyTax){ 
    double salesTax = anyTax; 
    newList.setArray(salesTax); 
} 
} 

public class Input 
{ 
private Scanner keybd; 
private String[] costArray; 
private String[] itemArray; 

/** 
* Constructor for objects of class Scanner 
*/ 
public Input(int anyAmountofItems) 
{ 
    keybd = new Scanner(System.in); 
    costArray = new String[anyAmountofItems]; 
    itemArray = new String[anyAmountofItems]; 
} 
/** 
* Mutator method to set the item names and costs 
*/ 
public void setArray(double anyValue){ 
    for(int index=0; index < itemArray.length; index++){ 
    System.out.println("Enter the item name: "); 
    itemArray[index] = keybd.next();} 
    for(int indexa=0; indexa < itemArray.length; indexa++){ 
    System.out.println(itemArray[indexa]); 
    double totalTax=0.0; 
    double total=0.0; 
    for(int indexc=0; indexc < costArray.length; indexc++){ 
     System.out.println("Enter the item cost: "); 
     double cost = Double.valueOf(keybd.next()).doubleValue(); 
     totalTax = totalTax + (cost * anyValue); 
     total = total + cost; 
    } 
    System.out.println("Total tax: " + totalTax); 
    System.out.println("Total cost pre-tax: " + total); 
    System.out.println("Total cost including tax: " + (total+totalTax)); 
} 
} 
+2

특정 항목의 이름과 가격을 보유하는 두 개의 문자열 데이터 멤버가있는 'Item'이라는 개체를 만들 수없는 이유가 있습니까? 그런 다음 'Item' 배열을 만듭니다. 에스? –

+0

'Double.valueOf (keybd.next()). doubleValue();를'keybd.nextDouble();'으로 대체하십시오. –

답변

7

당신은 자바 방식으로 생각해야합니다. 배열을 완전히 잊어 버렸다. 두 개의 필드가있는 클래스 (예 : nameprice)를 만들고 Item을 모두 LinkedList에 넣습니다. 또는 누군가 다른 사람이 제안한 것과 같은지도를 만들지 만 간단하지 않고 낙하 배열으로가는 것이 더 긴급합니다.

심지어 코드를 다시 생각하지 않고도 나중에 세 번째 필드를 추가 할 수 있습니다. 이를 객체 지향 프로그래밍이라고합니다.

또한 C에서는 미친 짓이되지 않도록 두 요소를 묶는 구조체를 만들 것입니다. 자바에서는 높은 수준의 객체 지향 언어이므로 메모리 관리가 없으므로 훨씬 간단합니다. 프로그래밍 언어가 제공하는 기능 만 사용하면됩니다. 그들은 많고 일합니다. :)

+0

네, 자바는 객체 지향 언어입니다. 오브젝트를 사용하지 않는다면 C 또는 FORTRAN으로 돌아가십시오. – duffymo

+0

여러분, 숙제이므로 배열을 사용해야합니다. 운동은 결함이있을 수 있지만 그것이 무엇인지입니다. – MeBigFatGuy

+0

이 경우, 그는 배열을 사용해야하지만, 적어도 Item 객체의 배열을 사용해야합니다. 요즘 인덱스와 일치하는 두 개의 배열은 Java에서 허용되지 않습니다. C에서조차도 그렇게하지 않았습니다. – gd1

5

이것은지도를 구걸하는 것 같습니다. 그러나 관련 상품이 동일한 색인에있는 두 개의 다른 배열에 의존 할 수 있다면 안전하게 그 색인을 사용하여 두 항목을 연결할 수 있습니다. 따라서 'bread'이 itemName [5]에 들어가고 '1.20'이 itemPrice [5]에 들어가면 '5'인덱스는 두 항목을 바인딩합니다. 'Bread'의 색인을 찾아 다른 색인에서 그 색인을 사용하여 가격을 얻을 수 있습니다.

은 두 항목 모두에서 동일한 색인에 연결된 항목을 사용한다는 점에 유의해야합니다. 당신이 할 수 없다면, 이것은 매우 끔찍하게 실패 할 것입니다. 더 나은 접근 방식은 Giacomo의 대답입니다.이 모든 데이터를 깔끔하게 캡슐화하고 모든 조회가 번거롭지 않게 저장 될 수있게 해주는 멋진 클래스를 만듭니다.

+0

정답이지만 실제로는 끔찍하며 Java 방식이 아닙니다. :) – gd1

+0

예, 동의했습니다. 나는 너의 대답을 upvote거야. – Doug

+0

+1 "구걸하기". – duffymo

관련 문제