Sumowanie w ArrayList

0

Zadanie ze SPOJA http://pl.spoj.com/problems/RNO_DOD/
Jak zsumować liczby w ArrayList? Linijka jest oznaczona komentarzem.

public static void main(String[] args){
        
        int liczbaTestow;
        int liczbaLiczb;
        String liczby1;
        
        class tab {
        }
        
        ArrayList<String> liczby = new ArrayList<String>();
        
        Scanner skaner = new Scanner(System.in);
        System.out.println("Podaj liczbe testow: ");
        liczbaTestow = skaner.nextInt();
        
        for(int i=0;i<liczbaTestow;i++){
            System.out.println("Podaj liczbe liczb: ");
        liczbaLiczb = skaner.nextInt();
            System.out.println("Podaj " + liczbaLiczb + " liczb: ");
            for(int j=0;j<=liczbaLiczb;j++){
                liczby1 = skaner.nextLine();
                liczby.add(liczby1); //jak teraz zsumować te liczby?

            }
        }
                
    }
1

po co dodawac cokolwiek do arraylist?
tu sposob jak z napisu zrobic liczbe - http://www.tutorialspoint.com/java/number_parseint.htm
po prostu zamien te napisy na liczby i je dodawaj w miare wczytywania
edit: a wlasciwie to przeciez juz umiesz wczytywac inty przy uzyciu skaner.nextInt(), czemu nie korzystasz z tego tylko niepotrzebnie liste wypleniasz :)

2

Robisz to źle. Bo czytasz całą linię a pętlisz się tyle razy ile jest liczb w tej linii. Możesz normalnie robić nextInt w tej pętli zamiast nextLine i sumować na bieżąco.

0

Nie złapałem tego. Jak mam to zrobić bez tablicy lub ArrayList? Jak mam to sumować?

1
suma = 0;
//w pętli
suma+=...nextInt();
1
  1. suma = 0
  2. Wczytujemy ile liczb będzie
  • czytamy pierwszą liczbę przez nextInt, dodajemy do sumy
  • czytamy durgą liczbę przez nextInt, dodajemy do sumy
  • czytamy trzecią liczbę przez nextInt, dodajemy do sumy
    ...
  • czytamy n-tą liczbę przez nextInt, dodajemy do sumy
  1. Mamy sumę!
  2. Profit!

PS. nie było punktu 3

1
public static void main(String[] args) { 
    Scanner skaner = new Scanner(System.in);
    int liczbaTestow = skaner.nextInt(); 
    while(liczbaTestow-- > 0) {
        int suma = 0;
        int liczbaLiczb = skaner.nextInt();
        while(liczbaLiczb-- > 0) {
            suma += skaner.nextInt();
        }
    }
}
  • 2 drobne uwagi
    a) nie musisz deklarowac wszystkich zmiennych na poczatku metody, mamy XXI wiek :)
    b) w System.out wypluwaj tylko to co masz w specyfikacji zadania (tzn sekcja 'Output')
0

Zrobiłem tak ostatecznie

for(int j=0;j<liczbaLiczb;j++){
                suma+=skaner.nextInt();
            }
            System.out.println("Suma liczb to:\n" + suma);
  1. W jaki sposób przyznawać "odpowiedź zaakceptowaną", czym się kierować?
  2. SPOJ sprawdza tylko Output? Np. w inpucie podaję 2(liczba testów), 3(ilość liczb) i teraz u mnie liczby podaję np. 1 enter 3 enter 2, a na SPOJU są wszystkie w jednej linii.
  3. Kiedy tworzę "tak zaawansowany" projekt, wolę mieć wszystkie zmienne na początku, żeby mi się nie mieszało.
0
  1. Nie rozumiem. Masz wysłać kod który spełnia wymagania i sami ci zaliczą.
  2. Sprawdza tylko output, ale dla różnych testów, nie tylko dla tego przykładowego.
  3. NIE rób tak. Zmienne deklaruj najniżej jak się da a kod dziel na małe kawałki poprzez wydzielanie funkcji / klas.
0
  1. Miałem na myśli 4p. Od dawna się zastanawiam.
1

widze ze nie zrozumiales, wywal to "Suma liczb to:\n" + bo ci to spoj odrzuci... masz podac dokladnie to co jest w sekcji Output czyli same liczby.

  1. to twoj watek, ty decydujesz, wybierz ta ktora rozwiazala twoj problem
  2. Input to jest to co twoj program dostaje, Output to jest to co masz ze swojego programu zwrocic i co bedzie sprawdzane przez spoj'a
  3. no wlasnie jak deklarujesz wszystko u gory metody to wtedy latwo sie moze pomieszac, odleglosc miedzy deklaracja zmiennej a jej uzyciem powinna byc jak najmniejsza
0

wiem :) tak będzie tylko w IDE

  1. wiem :)
  2. ok
0

SPOJ nie zalicza. O co może mu chodzić? http://pl.spoj.com/problems/RNO_DOD/

/* package whatever; // don't place package name! */

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

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
		
        int liczbaTestow;
        int liczbaLiczb;
        int liczby1;
        int suma = 0;
        
        Scanner skaner = new Scanner(System.in);
        liczbaTestow = skaner.nextInt();
        
        for(int i=0;i<liczbaTestow;i++){
        liczbaLiczb = skaner.nextInt();
            for(int j=0;j<liczbaLiczb;j++){
                suma+=skaner.nextInt();
            }
            System.out.println(suma);
        }
                
    
	}
}
1

twoj genialny sposob grupowania zmiennych u gory metody procentuje, mimo ze 2 osoby ci o tym pisaly to sprytnie to ignorujesz.
zmienna suma nie jest resetowana, czyli kazdy wynik oprocz pierwszego jest potencjalnie zly. sprawdziles czy chociaz dane testowe z zadania przechodza? chyba nie...

0

wielkie dzięki

0

Sory że troche odkopuje temat, ale

           int suma = 0, liczba,iloscProb;

                iloscProb = Convert.ToInt32(Console.ReadLine());
            if (iloscProb > 0 || iloscProb < 100)
            {
                for (int i = 0; i < iloscProb; i++)
                {
                    int ileLiczb;
                    ileLiczb = Convert.ToInt32(Console.ReadLine());

                    for (int j = 0; j < ileLiczb; j++)
                    {

                        liczba = Convert.ToInt32(Console.ReadLine());
                        suma = suma + liczba;
                    }
                    Console.WriteLine(suma);
                    suma = 0;

                }
                Console.ReadKey();
            } 

Wywala bład wykonania NZEC, dlaczego ?

0

Gdzie ci wywala taki błąd?

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