Strona 1 z 2
Problem z umiejscowieniem zmiennych.
Napisane: poniedziałek, 9 listopada 2015, 22:09
przez krzysztof.szymko
Witam, mam problem ze zmiennymi waga oraz wzrost, chciałbym dać możliwość użytkownikom wpisania ich wartości, natomiast w przypadku ulokowania zmiennych w klasie Bmi ciągle wyrzuca mi błąd. Nie ma tego problemu, gdy są w nawiasach main, natomiast w takim przypadku, nie mam możliwości odniesienia się do nich w klasie Bmi. Proszę o pomoc, w czym tkwi problem.
package wczytywanie.pkgint;
import java.util.*;
public class WczytywanieInt {
public static void main(String[] args)
{
Bmi a = new Bmi();
System.out.println(a.obliczBmi(waga, wzrost));
}
}
class Bmi
{
Scanner dane = new Scanner(System.in);
double waga;
waga = dane.nextDouble();
double wzrost;
wzrost = dane.nextDouble();
Bmi()
{
}
Bmi(double waga, double wzrost)
{
this.waga = waga;
this.wzrost = wzrost;
}
double obliczBmi(double waga, double wzrost)
{
this.waga = waga;
this.wzrost = wzrost;
return waga/(wzrost*2);
}
}
Re: Problem z umiejscowieniem zmiennych.
Napisane: poniedziałek, 9 listopada 2015, 22:17
przez Morfidon
Hej,
Proszę wklej kod używając znaczników code, oraz pokaż jaki błąd Ci wypisuje.
Pozdrawiam,
Arek
Re: Problem z umiejscowieniem zmiennych.
Napisane: wtorek, 10 listopada 2015, 15:15
przez krzysztof.szymko
Code: Zaznacz cały
package wczytywanie.pkgint;
import java.util.*;
public class WczytywanieInt {
public static void main(String[] args)
{
Bmi a = new Bmi();
System.out.println(a.obliczBmi(waga, wzrost));
}
}
class Bmi
{
Scanner dane = new Scanner(System.in);
double waga;
waga = dane.nextDouble();
double wzrost;
wzrost = dane.nextDouble();
Bmi()
{
}
Bmi(double waga, double wzrost)
{
this.waga = waga;
this.wzrost = wzrost;
}
double obliczBmi(double waga, double wzrost)
{
this.waga = waga;
this.wzrost = wzrost;
return waga/(wzrost*2);
}
}
Błędy to incompatible types: double cannot be converted to waga
Re: Problem z umiejscowieniem zmiennych.
Napisane: wtorek, 10 listopada 2015, 22:13
przez Morfidon
Hej Twój kod powinien wyglądać inaczej:
Code: Zaznacz cały
class Bmi
{
double waga;
double wzrost;
Bmi()
{
Scanner dane = new Scanner(System.in);
waga = dane.nextDouble();
wzrost = dane.nextDouble();
}
Bmi(double waga, double wzrost)
{
this.waga = waga;
this.wzrost = wzrost;
}
double obliczBmi(double waga, double wzrost)
{
this.waga = waga;
this.wzrost = wzrost;
return waga/(wzrost*2);
}
}
inicjalizację wartości powinieneś robić w konstruktorach to raz, a dwa w tym miejscu:
Code: Zaznacz cały
System.out.println(a.obliczBmi(waga, wzrost));
ani zmienna waga, ani wzrost nie istnieje. Musisz podać jakąś konkretną wartość. Powinieneś również nadpisać funkcję obliczBmi i stworzyć taką, która nie przyjmuje argumentów, a korzysta z tych co już zostały przysłane z konstruktora.
Pozdrawiam,
Arkadiusz W.
Re: Problem z umiejscowieniem zmiennych.
Napisane: środa, 11 listopada 2015, 14:33
przez krzysztof.szymko
Rozumiem, dziękuję bardzo za pomoc.
Morfidon napisał(a):Powinieneś również nadpisać funkcję obliczBmi i stworzyć taką, która nie przyjmuje argumentów, a korzysta z tych co już zostały przysłane z konstruktora.
Wiem, że tak powinno to wyglądać, natomiast nie bardzo wiem, jak to wykonać. Czy mógłbyś poświęcić chwilę i przedstawić taki kod?
Re: Problem z umiejscowieniem zmiennych.
Napisane: środa, 11 listopada 2015, 23:49
przez Morfidon
No zrób dokładnie to co napisałem. Stwórz metodę, która nie ma argumentów, a korzysta z właściwości pól. Nie mogę napisać tego za Ciebie bo się nic nie nauczysz. To są podstawy. Po prostu stwórz dokładnie to co napisałem. Przecież to co zrobiłeś jest teoretycznie trudniejsze.
Re: Problem z umiejscowieniem zmiennych.
Napisane: czwartek, 12 listopada 2015, 15:24
przez krzysztof.szymko
Code: Zaznacz cały
double obliczenie(Bmi a)
{
double wynik = waga/(wzrost*2);
return wynik;
}
w tym przypadku metoda faktycznie przyjmuje wartości, które są w konstruktorze. Natomiast wyrzuca błąd jeśli chcę wprowadzić wartości z klawiatury, korzystając z takiej metody, dla konstruktora, dla którego wprowadzam parametry:
Code: Zaznacz cały
double obliczenie()
{
double wynik = waga/(wzrost*2);
return wynik;
}
Re: Problem z umiejscowieniem zmiennych.
Napisane: czwartek, 12 listopada 2015, 15:54
przez Morfidon
Pamiętaj proszę o tym, że ja nie jestem kompilatorem i jeśli wystąpi błąd to wypisz jaki to błąd bo mam za mało kontekstu, by się domyślić.
Masz zrobić po prostu drugą metodę o takiej samej nazwie, ale bez argumentów i korzystać z danych, które będą stworzone w konstruktorze.
Code: Zaznacz cały
double obliczBmi()
{
return this.waga/(this.wzrost*2);
}
Re: Problem z umiejscowieniem zmiennych.
Napisane: czwartek, 12 listopada 2015, 16:15
przez krzysztof.szymko
Code: Zaznacz cały
double obliczBmi()
{
return this.waga/(this.wzrost*2);
}
Przy zastosowaniu metody, którą wrzuciłeś, pojawia się następujący bląd:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextDouble(Scanner.java:2413)
at poprawiony.kod.bmi.Bmi.<init>(PoprawionyKodBmi.java:32)
at poprawiony.kod.bmi.PoprawionyKodBmi.main(PoprawionyKodBmi.java:11)
Java Result: 1
Cały kod wygląda natomiast następująco:
Code: Zaznacz cały
package poprawiony.kod.bmi;
import java.util.*;
public class PoprawionyKodBmi {
public static void main(String[] args)
{
Bmi a = new Bmi();
System.out.println(a.obliczanieBmi());
}
}
class Bmi
{
double waga;
double wzrost;
Bmi()
{
Scanner dane = new Scanner(System.in);
System.out.println("Podaj wagę i naciśnij Enter:");
waga = dane.nextDouble();
System.out.println("Podaj wzrost i naciśnij Enter:");
wzrost = dane.nextDouble();
}
Bmi(double waga, double wzrost)
{
this.waga = waga;
this.wzrost = wzrost;
}
double obliczenie(Bmi a)
{
// this.waga = waga;
// this.wzrost = wzrost;
double wynik = waga/(wzrost*2);
return wynik;
}
double obliczanieBmi()
{
return this.waga/(this.wzrost*2);
}
}
Re: Problem z umiejscowieniem zmiennych.
Napisane: czwartek, 12 listopada 2015, 16:40
przez Morfidon
Spróbuj tak:
Code: Zaznacz cały
Scanner dane = new Scanner(System.in);
System.out.println("Podaj wagę i naciśnij Enter:");
this.waga = Double.parseDouble(dane.nextLine());
System.out.println("Podaj wzrost i naciśnij Enter:");
this.wzrost = Double.parseDouble(dane.nextLine());