cannot be resolved to a variable ??

0

Witam,

jestem początkujący w javie i przy próbie rozwiązania prostego zadania pojawia się komunikat "s cannot be resolved to a variable". Poniżej schemat:

Main.java

public class Main {

	public static void main(String[] args) {
		
		Calculator suma = new Calculator(3,4);
		
		System.out.println(suma.infoSuma());
	}

}

Calculator.java

public class Calculator {
	public double a,b;
	
	Calculator(double a, double b) {
		this.a = a;
		this.b = b;
	}
	
	public void add(double s) {
		s = a+b;
	}
	
	String infoSuma() {
		return "Suma wynosi: " + s;
	}
}

Proszę o pomoc. Nie rozumiem dlaczego problem dotyczy zmiennej s, skoro zadeklaraowana jest jako taki sam typ do a i b, czyli double. Ale może chodzi o coś innego.

0

Chodzi o to GDZIE jest zadeklarowana. Metoda klasy widzi TYLKO:

  • pola klasy
  • argumenty przekazane do metody

A u ciebie to w ogóle jakiś czeski film sie dzieje bo zmienna s występuje tylko w metodize add której nigdy nawet nie użyłeś. Równie dobrze mógłbyś ją skasowac ;]

0

Wiem, ze do dziwnie wygląda, ale chciałem poćwiczyć stosowanie metod. Ok. też w końcu doszedłem do wniosku, ze jest zbędna. usunąłem ją i zmieniłem ten fragment

String infoSuma() {
        return "Suma wynosi: " + (a+b); 

Dziękuję za podpowiedź.

0

Shalom juz Ci odpowiedział, ja tylko doprecyzuję. Metoda infoSuma() nie ma dostępu do zmiennej s, ponieważ ta zmienna jest tworzona kiedy wywołujesz metodę add(). Do zmiennej s (parametru metody) jest przypisywana wartość argumentu przekazanego do metody add, co jest bez sensu, bo dalej przypisujesz do niej sumę zmiennych a i b, wiec wartosc argumentu jest tracona (nie została wykorzystana) na rzecz sumy pól a i b ( tak się nazywają zminne zadeklarowane bezpośrednio w klasie - pola). Po tym jak metoda add sie wykona, zmienna s jest usuwana z "programu", dlatego, że parametry metod mają tylko zasieg lokalny i są usuwane wraz z zakończeniem funkcji. Kiedy chciałbyś wywołać funkcję infoSuma(), wtedy zmienna s już nie istnieje, dlatego kompilator wyświetla taki błąd.

0

Dziękuję wszystkim za wyjaśnienia.

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