2017-12-05 20 views
0

내 프로그램의 출력 형식을 지정하려고합니다. 사용자가 쉽게 읽을 수있게 보입니다. 나는 텍스트를 형식화하는 것이 그리 좋지 않다. 나는 너의 도움을 정말로 환영 할 것이다.인쇄 2 특정 형식의 ArrayLists

(내 JTextArea에서) 인쇄/표시하려고합니다.

public void display(String... lines){ 
    for(String line:lines){ 
      System.out.println(line); 
    } 
} 

지금, 나는이 프로그램의 사용을 통해 그들에 추가 된 일부 데이터가 포함 된 2 ArrayLists이 : 나는 이미 표시하는 방법이있다. 각각

itemOrders = new ArrayList<CafeOrders>(); 
customers = new ArrayList<CafeCustomer>(); 

생성자 :

public CafeOrders(String orderID, String itemName, double price){ 
    super(); 
    this.orderID = orderID; 
    this.itemName = itemName; 
    this.price = price; 

} 

public CafeCustomer(int customerID, String customerName){ 
    super(); 
    this.customerID = customerID; 
    this.customerName = customerName; 
    this.orderNo = UUID.randomUUID().toString(); 

} 

I는, 이러한 방법으로 만든 orderNo = 주문 ID있다.
먼저 고객 이름을 묻는 메시지를 표시 한 다음 항목 목록에서 항목을 선택하면 각 항목이 고객의 ID와 함께 CafeOrders ArrayList에 추가됩니다.

나는 특정 형식에 그 2 ArrayLists를 인쇄하는 방법, 또는 비슷한 만들려면 :

customerName "with id" orderID "has purchased" itemName1  
               itemName2  
               itemName3 
               etc... 

이 어떤 도움을 주시면 감사하겠습니다을!

답변

0

가 특정 형식

위해 편집을

추가 중 이 코드는 작동하지만

int x = 0; 
for(CafeCustomer customer : customers){ 
    for(CafeOrders order: itemOrders){ 
     if(customer.getOrderNo.equals(order.getOrderId())){ 
      if(x == 0){ 
       System.out.println(customer.getCustomerName() +"with Id " + 
       customer.getCustomerId()+ "has purchased: " 
       +order.getItemName()); 
       x = 1; 
       continue; 
      } 
      System.out.printf("%1$40s",order.getItemName()); 
     }   
    } 
    x = 0; 
} 
0
for(CafeCustomer customer : customers){ 
     for(CafeOrders order: itemOrders){ 
      if(customer.getOrderNo.equals(order.getOrderId())){ 
       System.out.println(customer.getCustomerName() +"with Id " + 
       customer.getCustomerId() + "has purchased " 
       +order.getItemName()); 
      } 
     } 
    } 
+0

이 잘 작동하지만, 나는 그것이 고객의 이름과 ID를 인쇄 할 것이다 : (고객 CafeCustomer 고객)에 대한

을 한 번만, 그리고 그 옆에 항목 목록이 있습니다. ((customer.getCustomerName() + "아이디와"+ customer.getCustomerId) + "구입 한 ::") { \t에서 System.out.println (고객 CafeCustomer 고객)에 대한 : –

+0

과 같이 코드를 수정 ; 에 대한 (카페 주문 : itemOrders) { if (customer.getOrderNo.equals (order.getOrderId())) { System.out.println ("\ t \ t \ t \ t \ t \ t \ t \ t" + order.getItemName()); } } } –

+0

고마워, 내가 만든 약간의 시각적 인 변화와 함께 작동합니다. –

0

만큼 당신의 고객은 당신이 무엇을 할 수 있는지 그때

Map<CafeCustomer, List<CafeOrder>>

그리고를 사용하는 것이 좋습니다 것입니다 여러 개의 주문이 수 :

public void display(Map<CafeCustomer, List<CafeOrder>> map) 
{ 
    map.forEach((customer, orderList) -> { 
     System.out.println(customer.getCustomerName() + " has purchased:"); 
     for(CafeOrder order : orderList) 
      System.out.println(order.getItemName()); 
}); 
} 
+0

그게 가장 효율적이고 더 나은 솔루션이 될 것입니다. 감사! 그러나 다른 기능들과 함께 현재의 구현으로 인해, 나는 그렇게하는 것이 현명하지 않을 것입니다. –

0

:

public void displayOrders(){ 
    for(CafeCustomer customer : customers){ 
     for(CafeOrders order: itemOrders){ 
      if(customer.getOrderNo().equals(order.getOrderID())){ 
       display(customer.getCustomerID()+"."+customer.getCustomerName() +"with Order ID " + 
       customer.getOrderNo() + " has purchased a " 
       +order.getItemName()); 
      } 
     } 
    } 
} 

내가 고객 ID, 이름과 주문 ID 번 누른 다음 표시 할 @Shiksha 베르에 추가 코드는 한 번만 고객 이름과 ID를 인쇄 오른쪽에 항목 목록. 내가 처음 게시물에 보여준 것처럼.
가능합니까? 나는 그것을 할 방법을 찾을 수없는 것 같습니다. 이처럼 :

customerID"."customerName "with id" orderID "has purchased" itemName1  
                  itemName2  
                  itemName3 
                  etc... 

는 그리고 정확히 다음과 같이 나타납니다.

+0

내 대답을 확인하고, 문자 "% 1 $ 40s"의 들여 쓰기를 원하는 부분으로 변경하는 부분을 변경하십시오. 숫자 "40"은 문자열 앞의 간격이며 원하는대로 바꿉니다. – Abdane

0

과 같이 코드를 수정 : {

System.out.println(customer.getCustomerName() +"with Id " + 
      customer.getCustomerId()+ "has purchased ::"); 

    for(CafeOrders order: itemOrders){ 
     if(customer.getOrderNo.equals(order.getOrderId())){ 
      System.out.println("\t\t\t\t\t\t\t"+ order.getItemName()); 
     } 
    } 

}