Przekazywanie zmiennych między metodami

Przekazywanie zmiennych między metodami
NO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 63
0

Witam mam przykładowy kod:

W klasie Inne_Zmienne

Kopiuj
public int zmienne(int x1) {
		int zmienna1=3, zmienna2=5, zmienna3;
		zmienna3 = zmienna1 + zmienna2+3;
		 x1 = zmienna3;
		 
		 return x1;

Następnie w tej samej klasie mam 2 metodę:

Kopiuj
public int pozmieniaj(int x2){
		x2 = x1 + 5;
		return x2;
	}

Problem polega na tym, że chciałbym przekazać do "Pozmieniaj" wynik x1 z "Zmienne".

Jednakże wszelkie moje próby kończyły się maksymalnie tym, że wywoływałem całą metodę, a chciałem pobrać jedynie jej wynik.

Proszę o pomoc jak pobrać wynik z jednej metody do drugiej?

twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
0
Kopiuj
int foo()
{
    return 3 + 5 + 3;
}

int bar(int x1)
{
    return x1 + 5;
}
...
int result = bar(foo());
Althorion
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1620
0
Noface napisał(a):

Jednakże wszelkie moje próby kończyły się maksymalnie tym, że wywoływałem całą metodę, a chciałem pobrać jedynie jej wynik.

Jak wyobrażasz sobie pobranie wyniku od niewywołanej metody? Jak taki wynik miałby wg Ciebie powstać?

NO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 63
0

Althorion

Chodzi mi o sytuację np taką w metodzie TableSize:

Kopiuj
int inSize() {
		
		int elIn = in.nextInt();
		 
		return elIn; 
		
	}

Metoda pobiera dane z klawiatury. "elIn" chciałbym użyć np w metodzie View:

Kopiuj
public void NTable(){
		TableSize ct = new TableSize();
		System.out.println("Tablica " + ct.inSize() + " elementowa.");
	}
	

Chciałbym, że mietoda View wyświetlała jedynie wartość, która została pobrana z klawiatury w metodzie "inSize". Mówiąc o wywołaniu całej metody miałem na myśli to, że używając w metodzie main:

Kopiuj
                TableSize rozmiar = new TableSize();
		View vt = new View();
		rozmiar.inSize();
		vt.NTable();

Najpierw pobieram dane z klawiatury, następnie znowu pobieram dane z klawiatury i wyświetlam komunikat o wartości, którą pobrałem z klawiatury.

A moim celem jest:

  1. pobranie wartości
  2. Wyświetlenie jej na ekranie za pomocą innej metody.

Twonek, dziękuję za odpowiedź, jednak najzwyczajniej nie rozumiem jak mógłbym użyć przedstawionego przez Ciebie rozwiązania np. w powyższym kodzie.

Althorion
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1620
0

Tak się nie da. Funkcje stanowią zamkniętą całość i nie możesz się do nich dorwać w połowie.

Dlatego też przy programowaniu obowiązuje zasada pojedynczej odpowiedzialności — każda funkcja powinna robić dokładnie jedną rzecz, czyli albo pobierać dane, albo na nich operować. Wtedy unika się takich problemów, jakie Ty napotkałeś. To znak, że czas na refaktoryzację kodu.

NO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 63
0

"Albo pobierac, albo na nich operowac".

Chyba nie do konca rozumiem. To wlasnie chcialem osiagnac.

Chcialem w jednej klasie pobrac od uzytkownika dane, w innej za pomoca tych danych stworzyc tablice, ktora uzytkownik by wypelnil.

Chcialem tez np. Stworzyc metode gdzie uzytkownik wypelnia ta tablice. Tak wiec sie nie da?

To strasznie pogmatwane, ale moim celem w tym wszystkim bylo przyswojenie sobie umiejetnosci operowania na klasach i metodach.

twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
0

Nie zrozumiałem tego co opisałeś, ale popatrz na to i powiedz czy to jest to o czym myślisz:

Kopiuj
class A {
	private int a;
	
	public void readValue() {
		Scanner scanner = new Scanner(System.in);
		a = scanner.nextInt();
	}
	
	public int getValue() {
		return a;
	}
}

class B {
	public void show(int value) {
		System.out.println("My value is " + value);
	}
}

class Ideone {
	public static void main (String[] args) throws java.lang.Exception {
		A a = new A();
		B b = new B();
		a.readValue();
		b.show(a.getValue());
	}
}

http://ideone.com/w2nQwc

NO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 63
0

Super, wprowadziłem te poprawki w mój kod i teraz działa dokładnie tak, jak tego chciałem.

Więc tak, dokładnie o to mi chodziło. Dziękuję za pomoc.

NO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 63
0

Zrobię nowym postem bo chciałbym dodać nową kwestię.

Kopiuj
package Table;
import java.util.*;
class CreateTable {
	
	private int ts;
	private int [] table;
	private Scanner in = new Scanner(System.in);
	
	public void StworzTablice () {
	TableSize tabSize = new TableSize();
	table = new int[tabSize.getSize()];
	
	
	
	}
	
	public void WypelnijTablice() {
	
	for (int i=0; i<table.length; i++) {
		table[i] = in.nextInt(); <--- Tutaj Eclipse wskazuje NullPointera
		
			
	}
	
	}
	

Nie rozumiem czemu wywala mi podczas kompilacji tej części NullPointera? Wszystkie zmienne są zainicjowane. Tablica "Table" ma określoną wielkość, którą pobiera z metody getSize() z innej klasy.

Źle coś przekazuję? Metody, które odpowiadają za wielkość tablicy to:

Kopiuj
public void inSize() {
		
		 elIn = in.nextInt();
		 
		
	}
	
	
	// Pobiera rozmiar tablicy
	public int getSize() {
		
		return elIn;

	}
	

Gdy zmieniam StworzTablice() tak:

Kopiuj
class CreateTable {
	
	private int ts;
	private int [] table;
	private Scanner in = new Scanner(System.in);
	TableSize tabSize = new TableSize();
	
	public int StworzTablice (int indeks) {
	table = new int[StworzTablice(tabSize.getSize())];
	
	return table.length;
	
	}

To mam całą litanię błędów, ale pierwszym jest "Exception in thread "main" java.lang.StackOverflowError".

A main() wygląda tak:

Kopiuj
public static void main(String [] args) throws NullPointerException {
		TableSize rozmiar = new TableSize();
		ViewTable vt = new ViewTable();
		CreateTable ct = new CreateTable();
		rozmiar.inSize();
		vt.NTable(rozmiar.getSize());
		System.out.println("Elementy tablicy");
		ct.WypelnijTablice();
		//vt.VTable();
	}

}

EDIT Finalny: Wybaczcie, że tak po milion razy edytowałem, ale w trakcie oczekiwania na odpowiedź ciągle jeszcze główkowałem nad tym kodem. Generalnie udało mi się dojść co powodowało problem i już to naprawiłem.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.