Java — Объединение двух массивов?

#java

#java

Вопрос:

Что я пытаюсь сделать, это запросить у пользователя список элементов и создать два массива — один для 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));
}
}
  

Комментарии:

1. Есть ли причина, по которой вы не смогли создать объект, например, called Item , который имеет два элемента string data, которые содержат название и цену для определенного товара, а затем создать массив Item s?

2. Заменить Double.valueOf(keybd.next()).doubleValue(); на keybd.nextDouble(); .

Ответ №1:

Вы должны думать об этом с точки зрения Java. Полностью забудьте о массивах. Создайте класс (типа Item ) с двумя полями (назовите их name и price ) и поместите каждое Item в LinkedList . Или создайте map, как предложил кто-то другой, но это менее просто, и для вас более важно удалить массивы.

Это даже позволяет вам впоследствии добавить третье поле, не переосмысливая свой код. Это называется объектно-ориентированное программирование.

Но также и на C вы бы создали структуру, содержащую два элемента, чтобы не сойти с ума. В Java это еще проще, потому что Java является высокоуровневым объектно-ориентированным языком, и вам не нужно управлять памятью. Просто используйте возможности, предоставляемые языком программирования. Их много, и они работают. 🙂

Комментарии:

1. Да, Java — это объектно-ориентированный язык. Если вы не используете объекты, вернитесь к написанию на C или FORTRAN.

2. ребята, это домашнее задание, поэтому использование массивов, вероятно, обязательно. Упражнение может быть ошибочным, но оно такое, какое оно есть.

3. В таком случае он должен использовать массив, но, по крайней мере , массив объектов Item. Пара массивов, сопоставляемых по индексу, в настоящее время в Java неприемлема… Даже на C я никогда не делал этого таким образом

Ответ №2:

Похоже, на самом деле это требует Map. Но если вы можете полагаться на то, что связанные элементы будут помещены в два разных массива с одинаковым индексом, тогда вы можете безопасно использовать этот индекс для связывания двух элементов. Таким образом, если ‘Bread’ входит в ItemName[5], а ‘1.20’ — в ItemPrice[5], то индекс ‘5’ связывает их. Найдите индекс ‘Bread’, и вы можете использовать этот индекс в другом массиве, чтобы получить его цену.

Просто имейте в виду, что вам нужно позаботиться о том, чтобы вы могли полагаться на то, что связанные элементы будут помещены в один и тот же индекс в обоих массивах. Если вы не сможете, это потерпит неудачу, очень ужасную. Лучшим подходом является ответ Джакомо — создайте хороший класс, который будет аккуратно инкапсулировать все эти данные и позволит хранить их без всех этих хлопот с поиском.

Комментарии:

1. Правильный ответ, но это действительно ужасно, и это не способ Java. 🙂