Java ArrayList błąd

0

Witam, chciałem zrobić program, który wyszukuje cyfry w podanym tekście i je sumuje. Eclipse nie pokazuje żadnych błędów, ale debugger wskazuje na linie gdzie są zadeklarowane listy. O co może chodzić?

 
package zadania;

import java.util.*;

class Program8 {

	
	public static void main(String[] args){
		
		int suma = 0;
		String tekst = new String("A8D6FH9D");
	
		
		ArrayList<String> cyfry = new ArrayList<String>();
		ArrayList<Integer> naInt = new ArrayList<Integer>();

		for(int i = 0; i < tekst.length(); i++){
			if(Character.isDigit(tekst.charAt(i))){
				cyfry.add(Character.toString(tekst.charAt(i)));	
				naInt.add(Integer.parseInt(cyfry.get(i)));
				suma+=naInt.get(i);
			}
		}	
		System.out.println(suma);		
	}	
}
0

Debugger to raczej nie... prędzej kompilator. Rzecz w tym, że deklaracja typu jak i wywołanie konstruktora mają przypisany typ generyczny. To nie jest potrzebne, wystarczy w jednym miejscu, a w drugim tylko <> dać:

Zamiast ArrayList<String> cyfry = new ArrayList<String>();
Zrób ArrayList<String> cyfry = new ArrayList<>();

3

Bo kod jest lekko bez sensu. Indeks i mówi który znak ze stringa tekst aktualnie analizujesz. A ty wesoło uzywasz go też żeby wyciągać dane z tych array list, a przecież nie dodajesz do nich każdego znaku! Więc jeśli na przykład cyfrą jest dopiero 10 znak stringa tekst to lista cyfry będzie miała tylko 1 element o indeksie 0, podczas gdy zmienna i będzie wynosiła 9, a ty sobie robisz cyfry.get(i)

0

Wyrzuciłem zmienną suma poza tą pętle i dalej to samo:/
(jakoś tak mam, że chcę pisać jak najkrótszy kod i później wychodzą takie farmazony)

0

Ale co w ogóle ma do tego zmienna suma? WTF? Przeczytałeś w ogóle mój post? Błąd polega na tym że NIE MOŻESZ zmiennej i używać jednocześnie do wyciągania elementów z wejsciowego stringa test i tych arraylist, bo te 3 rzeczy mają INNĄ LICZBĘ ELEMENTÓW. Poza tym z najkrótszym kodem to nie ma nic wspólnego to co pokazałeś. Po co w ogóle masz jakieś listy wtedy? Mógłbyś przecież sumować po prostu w trakcie iteracji, albo zrobić:

public class Test {

    public static void main(String[] args) {
        String text = "A8D6FH9D";
        int sum = text.chars()
                .filter(Character::isDigit)
                .sum();
        System.out.println(sum);
    }
}


1

Dokonując jak najmniejszych zmian w twoim kodzie

public static void main(String[] args){

    int suma = 0;
    String tekst = new String("A8D6FH9D");

    Integer digit;
    for(int i = 0; i < tekst.length(); i++){
        if(Character.isDigit(tekst.charAt(i))){
            digit = Character.getNumericValue(tekst.charAt(i));                
            suma += digit;
        }
    }
    System.out.println(suma);
}    
0

Aha okej już działa, dzięki za odpowiedzi. Programowania uczę się około 2 miesiące, sory za nieporozumienie.

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