• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

JAVA Przesyłanie danych między klasami

Object Storage Arubacloud
+1 głos
2,919 wizyt
pytanie zadane 2 września 2016 w Java przez Kacperos_89 Początkujący (400 p.)

Witam :)

Potrzebuję pomocy w przesyłaniu danych między klasami. Chciał bym żeby mój program w jednym pliku *.java pobierał dane z klawiatury i wypisywał jakieś informacje a drugi plik, żeby wykonywał same obliczenia, żeby wyglądało to mniej więcej tak:

Program startuje od pierwszego pliku

1.java

import java.util.Scanner;

public class Spalanie 
{

	public static void main(String[] args) 
	{		
		Scanner input = new Scanner(System.in);
		System.out.println("Podaj przejechane kilometry");
		double km = input.nextDouble();
		System.out.println("Podaj zatankowane paliwo");
		double paliwo = input.nextDouble();
		System.out.println("Podaj cenę litra paliwa");
		double zł = input.nextDouble();

Teraz przejście do pliku

2.java

		//PRZELICZANIE
		
		double cena = paliwo * zł;
		
		km = km / 100;
		double spalanie = paliwo / km;

i powrót do pierwszego pliku

1.java

		System.out.println("Spalanie wynosi " + spalanie + " litrów na 100 kilometrów.");
		System.out.println("Koszt tankowania wynosi " + cena + " złotych.");
	}

}

 

3 odpowiedzi

+1 głos
odpowiedź 2 września 2016 przez K0XM4N Gaduła (3,640 p.)
Jako drugi plik, stwórz sobie klasę, która będzie miała odpowiednie pola. Napisz konstruktor, który przyjmie wartości takie jak paliwo itd. a obliczenia wykonaj w metodzie :)
Albo po prostu w jednej klasie dopisz metodę metodę statyczną obliczająca te dane. Nie chce podawać gotowego rozwiązania, żebyś mógł sam pomyśleć nad tym, gdyby coś to pisz :)
+1 głos
odpowiedź 2 września 2016 przez MichuDev Pasjonat (20,300 p.)

Przypuszczam, że nic nie wiesz o programowaniu obiektowym, więc najlepszym wyjściem dla ciebie będzie stworzenie statycznej metody, możesz ją umieścić w innym pliku, oto jak to powinno wyglądać:

NazwaKlasy.nazwaMetody(argument1,argument2);
nazwaMetody(argument1,argument2); // jeśli metoda jest w tej samej klasie. Ilość argumentów może być mniejsza i większa

Możesz również użyć typów obiektowych dla prymitywów np. double ma obiektowy typ Double. Daje to tobie możliwość odwoływania się za pomocą referencji do obiektu nawet w kilku miejscach w programie. Uwaga! Ze względów wydajnościowych używanie tych typów nie jest najlepsze, ale czasem trzeba to robić.

Plik z kodem źródłowym języka Java ma ścisły związek z nazwą klasy, dlatego nie nazywamy pliku 1.java itp. Proszę również o pisanie kodu po angielsku, ale bez stosowania języka polskiego (mieszania języków), proszę nie umieszczać w nazwach zmiennych polskich znaków np. ąćżźęó.

Tak mały projekt bardziej potrzebuje podziału na funkcje w jednej klasie niż na wiele klas, trzeba pamiętać, by nie robić klas kilku-inijkowych oraz takich które robią wszystko w rozbudowanych aplikacjach i mają kilka tysięcy linii kodu.

Masz pytania, napisz w komentarzu pod moją odpowiedzią.

komentarz 2 września 2016 przez mbabane Szeryf (79,280 p.)
edycja 2 września 2016 przez mbabane
albo zwyczajnie jesli pytajacy chce sie uczyc javy to powienien czym predzej wrocic do poczatku i rozpoczac nauke jeszcze raz - a nie od razu budowac Krakow.

Na tym etapie nauki mozna jeszcze przymknac oko na brak kodu po ang. jedank jesli sie zna w miare przyzwoicie ang (powiedzmy na poziomie maturalnym +-) to dobrze by bylo stosowac (ale nie kazdy tez musi umiec ang. i trzeba to uszanowac,  jednak moze to nieco utrudnic nauke programowania).
komentarz 2 września 2016 przez MichuDev Pasjonat (20,300 p.)

mbabane - wiem, ale zawsze warto wiedzieć.

komentarz 2 września 2016 przez mbabane Szeryf (79,280 p.)
I przepraszam ze zwroce uwage ale piszesz jakims dziwnym tonem (przynajmniej dla mnie) "prosze to prosze tamto" - wedlug mnie taki ton tylko powoduje niechec do zadawania pytan do Ciebie, wedlug mnie powinno to brzmiec, mniej wiecej: "Pamietaj ze nazwy zmiennych i metod powinno pisac sie po ang. i staraj sie nie mieszac ang nazw z polskimi. Unikaj także stosowania ąćżźęó - a wręcz ich nie uzywaj.". Przynajmniej ja to tak odbieram.
komentarz 2 września 2016 przez MichuDev Pasjonat (20,300 p.)

mbabane - można pominąć ten punkt, ale cała reszta mówi całkiem dużo ważnych informacji. 

komentarz 2 września 2016 przez mbabane Szeryf (79,280 p.)
nie, nie, procz tego malutkiego 'ale' w pierwszym komentarzu, nie mam zadnych zastrzezen co to kwestii merytorycznej Twojej wypowiedzi. Ale juz nie tracmy moze czasu na takie glupotki.

Powodzenia!
0 głosów
odpowiedź 4 września 2016 przez Kacperos_89 Początkujący (400 p.)

Dzięki słowa klucze pomogły :) Tak faktycznie moja wina za nie jasne nazwanie plików, napisałem te nazwy od czapy moja wina Przepraszam. Udało mi się zrobić działający "programik" który wygląda tak:


import java.util.Scanner;

public class Spalanie
{
	public static void main(String[] args) 
	{
		Liczenie liczenie = new Liczenie();
	
		Scanner skaner = new Scanner(System.in);
		System.out.println("Podaj przejechane kilometry");
		liczenie.km = skaner.nextDouble();
		System.out.println("Podaj zatankowane paliwo");
		liczenie.paliwo = skaner.nextDouble();
		System.out.println("Podaj cenę litra paliwa");
		liczenie.pln = skaner.nextDouble();
		
		liczenie.liczSpalanie();
		liczenie.liczCena();
						
		System.out.println("Spalanie wynosi " + liczenie.spalanie + " litrów na 100 kilometrów.");
		System.out.println("Koszt tankowania wynosi " + liczenie.cena + " złotych.");
	}

}

i druga klasa:


public class Liczenie 
{
	double km;
	double paliwo;
	double pln;
	
	double cena;
	double spalanie;
	
	//Pobierz dane
	double pobierzTrasa()
	{
		return km;
	}
	double pobierzPaliwo()
	{
		return paliwo;
	}
	double pobierzPln()
	{
		return pln;
	}
	
	//Oblicz
	double liczCena()
	{
		cena = paliwo * pln;
		return cena;
	}
	double liczSpalanie()
	{
		km = km / 100;
		spalanie = paliwo / km;
		return spalanie;
	}

}

Faktycznie mieszanie języków wygląda źle i postaram się na przyszłość trzymać zasady nie używania polskich znaków :)

Mały projekt dziele na klasy bo łatwiej będzie mi się w tym połapać i chodziło mi tylko o przyswojenie umiejętności działań między klasami :)

komentarz 5 września 2016 przez K0XM4N Gaduła (3,640 p.)
Postaraj się używać hermetyzacji. Pola w klasie liczenie ustaw na prywatne i dodaj gettery, settery do nich ;). W sumie konstruktora też mógłbyś dodać. W chwili gdy tworzysz obiekt możesz mu przekazać argumenty w konstruktorze (km paliwo i pln).Dzięki temu nie musisz przypisywać wartości do pól bo zostały przekazane w konstruktorze obiektu :)
komentarz 6 września 2016 przez Kacperos_89 Początkujący (400 p.)

Prawie mi wyszło. Gettery i settery dodane ale nie mogę sobie poradzić żeby wartość ze scanner'a przekazać do set'a. Kiedy liczenie.km = skaner.nextDouble(); po prostu zamieniam na liczenie.setKm() = skaner.nextDouble(); wyskakuje mi błąd. aktualnie program wygląda tak:


package Spalanie;

import java.util.Scanner;

public class Main
{
	public static void main(String[] args) 
	{
		Liczenie liczenie = new Liczenie(0, 0, 0);
	
		/**
		Scanner skaner = new Scanner(System.in);
		System.out.println("Podaj przejechane kilometry");
		liczenie.km = skaner.nextDouble();
		System.out.println("Podaj zatankowane paliwo");
		liczenie.paliwo = skaner.nextDouble();
		System.out.println("Podaj cenę litra paliwa");
		liczenie.pln = skaner.nextDouble();
		**/
		
		liczenie.setKm(733);
		liczenie.setPaliwo(33.87);
		liczenie.setPln(4.21);
		
		liczenie.liczSpalanie();
		liczenie.liczCena();
						
		System.out.println("Spalanie wynosi " + liczenie.spalanie + " litrów na 100 kilometrów.");
		System.out.println("Koszt tankowania wynosi " + liczenie.cena + " złotych.");
	}

}
package Spalanie;

public class Liczenie 
{
	private double km;
	private double paliwo;
	private double pln;
	
	double cena;
	double spalanie;
	

	public Liczenie(double km, double paliwo, double pln)
	{
		this.km=km;
		this.paliwo=paliwo;
		this.pln=pln;
	}
	
	//Pobierz dane
	public double getKm()
	{	
		return km;
	}
	public double getPaliwo()
	{	
		return paliwo;
	}
	public double getPln()
	{	
		return pln;
	}
	
	public void setKm(double km)
	{
		this.km = km;
	}
	public void setPaliwo(double paliwo)
	{
		this.paliwo = paliwo;
	}
	public void setPln(double pln)
	{
		this.pln = pln;
	}
	
	//Oblicz
	double liczCena()
	{
		cena = paliwo * pln;
		return cena;
	}
	double liczSpalanie()
	{
		km = km / 100;
		spalanie = paliwo / km;
		return spalanie;
	}

}

Po dodaniu setterów i getterów zastanawiam się nad sensem konstruktorów. Z mojej perspektywy nie ma większych zmian czy one są czy nie.

komentarz 7 września 2016 przez K0XM4N Gaduła (3,640 p.)

Wyskakuje Ci błąd ponieważ, musisz podać w setterze argument. Popatrz.Stworzyłeś sobie settery np. 

public void setKm(double km){
       this.km = km;
}

w nawiasie znajduje się argument(zmienna) i jego typ który przyjmuje. Ta metoda musi dostać zmienną, ale musi się znaleźć w nawiasie.

Tak to powinno wyglądać:

liczenie.setKm( skaner.nextDouble() ); // przekazujesz zmienna z klawiatury

//ogólny zamysł to

liczenie.setKm( jakaśZmienna )// może też być input scannera jak wyżej

A co do konstruktorów, tworzysz 1000 obiektów. Każdemu z nich będziesz ustawiać setterem pola? Po co skoro możesz ustawić je w konstruktorze od razu.

Podobne pytania

0 głosów
2 odpowiedzi 152 wizyt
pytanie zadane 13 sierpnia 2018 w JavaScript przez Programista 22 Bywalec (2,270 p.)
0 głosów
1 odpowiedź 348 wizyt
+1 głos
0 odpowiedzi 662 wizyt
pytanie zadane 22 czerwca 2017 w Java przez Mariusz Dobrogosz Nowicjusz (180 p.)

92,555 zapytań

141,403 odpowiedzi

319,553 komentarzy

61,939 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...