Lista, wczytywanie z pliku, suma elementów

0

Program za pomocą dwóch metod powinien najpierw wczytywać listę (ArrayList<String>) z podanego pliku a w drugiej metodzie przejść przez wszystkie elementy i zwrócić sumę intów. Niestety mój program nie sumuje intów ;)

Aktualnie mój program wygląda tak:

import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;


public class Lista {	
	  
	  
	  public static void wczytajListe(Scanner s) throws FileNotFoundException    {
		  
		    Scanner scan = new Scanner(new File("lista.txt"));	
		    ArrayList<String> list = new ArrayList<String>();
		    while (scan.hasNextLine()) {
		      String element = scan.nextLine();
		      list.add(element);
		    }
		    for (int i = 0; i < list.size(); i++)
		      System.out.println(list.get(i));	    

		  }
	  
	  public static void sumujListe(Scanner s) throws FileNotFoundException    {
		  
		    Scanner scan = new Scanner(new File("lista.txt"));	
		    ArrayList<String> list = new ArrayList<String>();
		    while (scan.hasNextLine()) {
		      String firm = scan.nextLine();
		      int suma= 0;
		      if (scan.hasNextLine()){
		      int liczba = Integer.parseInt(firm);	
		      suma = suma+liczba;
		      }
		      list.add(firm);
		      System.out.println("Wynik sumy: " +suma);
		    }

		  }
	  
	  
	  public static void main(String[] args) throws FileNotFoundException  {
		  
	  
		    Scanner scan = new Scanner(new File("lista.txt"));
		    wczytajListe(scan);
		    sumujListe(scan);

	  
	  }
	    

} 
	

Pytanie: jak napisać warunek by sprawdzał mi czy w danej linii mamy tekst i nie wywalał błędu tylko kontynuował sprawdzanie listy w poszukiwaniu intów ? No i co robię źle w sumowaniu.

0

A dlaczego w drugiej metodzie próbujesz znowu czytać plik, zamiast przeglądać utworzoną w pierwszej funkcji listę?

0

poczytaj o obsłudze wyjątków http://docs.oracle.com/javase/tutorial/essential/exceptions/catch.html

po co Ci

if (scan.hasNextLine()){

?

i podpisuje się pod pytaniem @bo...

0

Wiem na czym polega obsługa wyjątku, chodziło mi raczej o coś co będzie rozróżniać inty od Stringów i zliczać te pierwsze. If jest pewnie niepotrzebny a drugą metodę pisałem "na szybko" korzystając z pierwszej, potem poprawie jak zadziała sumowanie.

0

Moim zdaniem, właśnie to że czytasz plik na nowo jest przyczyną braku sumowania. Po pierwszej funkcji nie zamykasz pliku i jesteś na jego końcu. Co ma odczytać druga funkcja?

0

przenieś zerowanie sumy przed pętlę;p

bump napisał(a)

chodziło mi raczej o coś co będzie rozróżniać inty od Stringów i zliczać te pierwsze.

właśnie dlatego napisałem o try-catch

  int suma= 0;
  while (scan.hasNextLine()) {
      String firm = scan.nextLine();                      
        tr{
            int liczba = Integer.parseInt(firm);        
            suma = suma+liczba;
         }catch(Exception e){}
  }

i korzystaj z listy, którą już wczytałeś...

0

Dziękuje za wszystkie celne uwagi, chyba udało się zrobić tak jak miało być w założeniu. Wklejam na wszelki wypadek, gdyby ktoś miał ochotę rzucić okiem i sprawdzić czy ewentualnie czegoś nie można prościej/efektywniej zapisać. Bądź czy nie ma jakichś błędów, u mnie w każdym razie działa (tak mi się przynajmniej wydaje ;) )

import java.io.*;
import java.util.*;


public class Lista {	
	  
	  
	  public static void wczytajListe(Scanner s) throws FileNotFoundException {
		  
		    Scanner scan = new Scanner(new File("lista.txt"));
		    ArrayList<String> list = new ArrayList<String>();
		    while (scan.hasNextLine()) {
		      String element = scan.nextLine();
		      list.add(element);
		    }
		    for (int i = 0; i < list.size(); i++)
		      System.out.println(list.get(i));	    

		  }
	  
	  public static void sumujListe(ArrayList<String> al) throws FileNotFoundException {
		  
		    Scanner scan = new Scanner(new File("lista.txt"));
		  	wczytajListe(scan);
		    int suma= 0;
		    while (scan.hasNextLine()) {
		        String firm = scan.nextLine();                      
		          try{
		              int liczba = Integer.parseInt(firm);        
		              suma = suma+liczba;
		           }
		          catch(Exception e){}
			      }
		      System.out.println("Wynik sumy: " +suma);		    
		    } 
	  
	  
	  public static void main(String[] args) throws FileNotFoundException {
		  
	  
		    ArrayList<String> list = new ArrayList<String>();
		    sumujListe(list);
	
	  
	  }
	    

} 
0
  1. Program jest nieodporny na brak pliku "lista.txt"
  2. Do metody sumujListe przekazujesz argument, którego nie używasz.
  3. Do metody czytajListe przekazujesz argument, którego nie używasz.
  4. Nie sumujesz listy, którą wczytałeś w metodzie czytajListe, tylko czytasz plik od nowa, co jest raczej niezgodne z wymaganiem.
0

Punkt pierwszy to pół biedy a 2 i 3 to nie do końca rozumiem o czym mówisz. W 4 chyba wiem o czym mowa, ale nie wiem za bardzo jak to ugryźć. Mógłbyś coś podpowiedzieć ?

0

Np. do funkcji sumujListe przekazujesz argument o nazwie al, z którego nie korzystasz.

import java.io.*;
import java.util.*;
 
 
public class Lista {        
 
 
        public static void wczytajListe(ArrayList<String> list)
        {
            Scanner scan=null; 
            try
            {
                scan = new Scanner(new File("lista.txt"));
            }
            catch(FileNotFoundException e)
            {
                System.out.println("Brak pliku lista.txt");
                System.exit(0);
            }
            while (scan.hasNextLine()) 
            {
                String element = scan.nextLine();
                list.add(element);
            }
            for (int i = 0; i < list.size(); i++)
            {
                System.out.println(list.get(i));           
            }
        }
        public static void sumujListe(ArrayList<String> lista)
        {
            int suma= 0;
            for(int i=0;i<lista.size();i++)
            {
                try
                {
                    int liczba = Integer.parseInt(lista.get(i));        
                    suma = suma+liczba;
                }
                catch(Exception e){}
            }
            System.out.println("Wynik sumy: " +suma);                    
        } 
        public static void main(String[] args)
        {
            ArrayList<String> list = new ArrayList<String>();
            wczytajListe(list);
            sumujListe(list);
        }
} 

1 użytkowników online, w tym zalogowanych: 0, gości: 1