2013-12-07 3 views
0

У меня есть следующий текст в файле:Сканер и сравнение строк

3 
apple 4 1.00 
chicken 1 3.25 
cookie 38 0.25 
avocado 1 4.00 
blueberries 1 5.00 
chicken 2 3.25 
milk 9 4.50 
tomato 27 0.50 
chicken 2 3.25 

Я хочу перечислить каждый элемент и его номер и его цену, но я хочу, что если я встречаю тот же пункт снова, чтобы добавить его номер к существующему номеру у меня есть

Я выяснил первую часть, но я не могу получить вторую, у кого есть идеи?

public static void main(String[] args) throws FileNotFoundException{ 
     Scanner sc = new Scanner(new File("Groceries.txt")); 
     while(sc.hasNext()) { 
      String line=sc.nextLine(); 
      Scanner ss = new Scanner(line); 
      if(ss.hasNextInt()) { 
       ss.next(); 
      } 
      while(ss.hasNext()) { 
       String name=ss.next(); 
       int number = readInt(ss); 
       double price = ss.nextDouble(); 
       System.out.printf("The item is %s its number is %d and its price is %.1f\n",name,number,price); 
      } 
     } 
    } 
    public static int readInt(Scanner sc) { 
     while(!sc.hasNextInt()) { 
      sc.hasNext(); 
     } 
     return sc.nextInt(); 
    } 
+0

так что вы будете иметь курицу 4 3.25 в экране? любой шанс, что у нас могут быть две разные цены за товар? –

+0

Предположим ли мы, чтобы средняя цена дубликатов? –

+0

Да точно цыпленок 4 3,25 !! – Yehya

ответ

1

Создать объект-контейнер, как так:

public class Container 
{ 
    private String item; 
    private double cost; 
    ... 
} 

HashMap<Container, Double> Использование в качестве структуры данных. Каждый раз, когда вы сталкиваетесь с дубликатом, обновляйте его значение.

Если есть возможность для произвольного количества повторов, вы можете использовать сделать следующее:

public class ValueContainer 
{ 
    private int count; 
    private double value; 
} 

и имеют HashMap<Container, ValueContainer> и обновлять соответственно. Кажется, есть некоторая путаница между тем, что вы говорите в вопросе и в комментарии. Несмотря на это, с помощью простых подстановок эта конструкция приведет вас туда, куда вы хотите пойти.

+0

Что случилось с моим ответом? –

+0

Мне любопытно, зачем использовать double вместо Integer, если предположить, что элемент нельзя разбить на половинки или десятичные числа? Использование Double для стоимости, которую я понимаю, хотя и не HashMap. –

+0

@ DanielB OP что-то сказал об усреднении. –

1
  1. Создайте класс, описывающий атрибуты вашего предмета (имя, цена, количество, счет и т. Д.).
  2. Создайте список элементов (да, используйте generics ..) // u также может использовать карту вместо списка.
  3. Теперь, каждая строка, которую вы читаете из текстового файла, сначала получите имя элемента используя split().
  4. Проверьте, присутствует ли элемент. Если да, вытащите его, увеличьте его количество и верните его. если нет, добавьте новый элемент в список.

  5. Счастливый Coding ...

Смежные вопросы