-2
votes

Groupe et somme des ventes dans le tableau de cordes Java

J'ai un fichier texte ci-dessous:

stylo 100 Encre 50 Stylo 150 Papier 20 code> p>

et je veux résumer chacune des marchandises La sortie doit ressembler à: p> xxx pré>

J'écris uniquement un seul code ci-dessous et je suis bloqué: P>

public  static void readData(){
File infile = new File("D:\\itemData.txt");
        String itemName = new String();
        String[] nameList = new String[100];
        String[] saleList = new String[100];
        int sale;
        int count =0;
        try {
            Scanner data = new Scanner(infile);
            while (data.hasNext()) {
                itemName = data.next();
                sale = data.nextInt();
                nameList[count] = name;
                saleList[count] = String.valueOf(sale);
                count++;
                for (int i = 0; i < nameList.length; i++) {
                    if (nameList[i] != null) {
                        System.out.println(nameList[i] + " " + saleList[i]);
                    }
                }
                data.close();
            }
        } catch (IOException e) {
        }}


2 commentaires

Que voulez-vous dire par coincé ? Qu'est-ce qui ne fonctionne pas? Veuillez jeter un coup d'œil sur le centre centre d'aide . En particulier Comment puis-je poser une bonne question? citez toujours l'erreur exacte, plutôt que de simplement dire que vous obtenez une erreur .


Jetez un coup d'œil à HASHMAP .


3 Réponses :


0
votes

Essayez le code ci-dessous. Il y avait 2 problèmes dans le code que je pouvais voir. a) Vous n'avez pas déclaré la variable compte code> b) Vous imprimiez lors de la lecture des données et que cela n'est pas souhaitable.

public  static void readData(){
File infile = new File("D:\\itemData.txt");
        String itemName = new String();
        String[] nameList = new String[100];
        String[] saleList = new String[100];
        int sale;
        int count = 0;
        try {
            Scanner data = new Scanner(infile);
            while (data.hasNext()) {
                itemName = data.next();
                sale = data.nextInt();
                nameList[count] = name;
                saleList[count] = String.valueOf(sale);
                count++;

                data.close();
            }
        } catch (SIOException e) {
        }
        for (int i = 0; i < nameList.length; i++) {
                    if (nameList[i] != null) {
                        System.out.println(nameList[i] + " " + saleList[i]);
                    }
                }
}


0 commentaires

0
votes

Envisagez également de mettre en œuvre quelque chose comme celui-ci pour garder une trace de maxes et des mins pour vous:

package com.example.demo;

import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;

import org.apache.commons.collections4.map.HashedMap;

public class Inventory {
    private Map<String, AtomicInteger> totals = new HashedMap<>();
    private Map<String, AtomicInteger> maxes = new HashedMap<>();
    private Map<String, AtomicInteger> mins = new HashedMap<>();

    public void add(String name, int number) {
        getOrCreateFromMap(totals, name, 0).addAndGet(number);

        getOrCreateFromMap(maxes, name, Integer.MIN_VALUE).getAndUpdate(present -> (present < number) ? number : present);

        getOrCreateFromMap(mins, name, Integer.MAX_VALUE).getAndUpdate(present -> (number < present) ? number : present);
    }

    private AtomicInteger getOrCreateFromMap(Map<String, AtomicInteger> map, String name, int initialValue) {
        return map.computeIfAbsent(name, x -> new AtomicInteger(initialValue));
    }

    public int getTotal(String name) {
        return getFromMap(totals, name);
    }

    public int getMax(String name) {
        return getFromMap(maxes, name);
    }

    public int getMin(String name) {
        return getFromMap(mins, name);
    }

    private int getFromMap(Map<String, AtomicInteger> map, String key) {
        return map.computeIfAbsent(key, x -> new AtomicInteger())
                  .get();
    }

    public static void main(String[] args) {
        Inventory i = new Inventory();

        i.add("paper", 50);
        i.add("paper", 150);

        System.out.println(i.getTotal("paper"));
        System.out.println(i.getMax("paper"));
        System.out.println(i.getMin("paper"));

    }
}


0 commentaires

0
votes

Voici un exemple de travail, pour l'instruction problématique mentionnée -

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Map;
import java.util.stream.Collectors;

public class ReadAndSumFileData {

    public static void main(String... arguments) throws IOException {
        String filename = "C:/temp/SalesData.txt";
        readData(filename);
    }

    private static void readData(String filename) throws IOException {
        Map<String, Integer> map = Files.lines(Paths.get(filename))
                .map(s -> s.split("\\s+"))
                .collect(Collectors.groupingBy(a -> a[0], Collectors.summingInt(a -> Integer.parseInt(a[1]))));

        map.entrySet().stream().forEach(e-> System.out.println(e));
    }
}


0 commentaires