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

kalkulator i konstruktory sprawdzenie kodu

VPS Starter Arubacloud
0 głosów
957 wizyt
pytanie zadane 30 listopada 2018 w Java przez mn130496 Gaduła (3,530 p.)

Witam 

Jestem studentem  informatyki i jakiś czas temu zacząłem  uczyć się języka Java.Ostatnio dostałem zadanie o treści:  Utwórz klasę Kalkulator, która będzie posiadała konstruktory w wersjach 1 agrumentowej, 4 agrumentowej i 7 argumentowej oraz metodę liczącą i zwracająca wynik operacji matematycznej. Dodatkowo konstruktor kopiujący klasy zawierający informacje o liczbach wykorzystanych do wykonywania operacji.  Napisałem taki kod programu:

package lab6;
import java.util.ArrayList;
import java.util.Scanner;
public class Kalkulator {
//	Deklaracja prywatnej  Listy.
	ArrayList<Integer> data = new ArrayList<Integer>();
	double result = 0;
	//deklaracja konstruktora jedno , 4 i 7 argumętowego.
	public Kalkulator(int a) {
		data.add(a);
	}
	public Kalkulator(int a, int b, int c, int d) {
		data.add(a);
		data.add(b);
		data.add(c);
		data.add(d);
	}
	public Kalkulator(int a, int b, int c, int d, int e, int f, int g) {
		data.add(a);
		data.add(b);
		data.add(c);
		data.add(d);
		data.add(e);
		data.add(f);
		data.add(g);
	}
//	Głębokie kopiowanie Listy.
	public Kalkulator (Kalkulator Kalkulator) {
		for(Integer i : Kalkulator.data) {
			this.data.add(i);
		}
	}
	//Metody liczące i zwracające wartości.
	public void calculate(char działanie) {
		switch(działanie) {
		case '+':
			for(int i = 0; i < data.size(); i++) {
			 result += data.get(i);
			}
			break;
		case '-':
			result = data.get(0);
			for(int i = 1; i < data.size(); i++) {
				result -= data.get(i); 
			}
			break;
		case '*':
			result = data.get(0);
			for(int i = 1; i < data.size(); i++) {
				result *= data.get(i);
			}
			break;
		case'/':
			result = data.get(0);
			for(int i =1; i < data.size(); i++) {
				result /= data.get(i);
			}
			break;
		}
		System.out.println("Wynik: " + result);
	}
//	Metoda zwracająca wynik.
	public double getResult() {
		return result;
	}
	//Metoda Main
	public static void main(String[] args) {
		Scanner odczyt = new Scanner(System.in);
		ArrayList<Integer> numberList = new ArrayList<Integer>();
		Kalkulator Kalkulator;
		char operation;
		int i =0;
		int temp;
		System.out.println("Podaj działanie: ");
//		Pobieranie typu działania.
		operation = odczyt.next().charAt(0);
		temp = 1;
//		Pobieranie Liczb do działania.
		do {
			System.out.println(" Podaj liczbe nr.  "+(i + 1 )+"Lub wpisz '0' aby zakonczyć wpisywanie");
			temp = odczyt.nextInt();
			if(temp ==0 ) 
				break;
			numberList.add(temp);
			i++;
		}while(i < 7);
//		Nowy obiekt Kalkulatora w zależności od ilości liczb.
		switch(i) {
		case 1:
			Kalkulator = new Kalkulator(numberList.get(0));
			break;
		case 4:
			Kalkulator = new Kalkulator(numberList.get(0));
			Kalkulator = new Kalkulator(numberList.get(1));
			Kalkulator = new Kalkulator(numberList.get(2));
			Kalkulator = new Kalkulator(numberList.get(3));
			break;
		case 7:
			Kalkulator = new Kalkulator(numberList.get(0));
			Kalkulator = new Kalkulator(numberList.get(1));
			Kalkulator = new Kalkulator(numberList.get(2));
			Kalkulator = new Kalkulator(numberList.get(3));
			Kalkulator = new Kalkulator(numberList.get(4));
			Kalkulator = new Kalkulator(numberList.get(5));
			Kalkulator = new Kalkulator(numberList.get(6));
			break;
		default:
			System.out.println(" Niepoprawna liczba parametrów ");
			odczyt.close();
			return;
		}
		Kalkulator.calculate(operation);
		odczyt.close();
	}
		
	}

Jednak program nie działa do końca dobrze. Jak chcę dodać liczby 1 + 2 + 3 + 4 to wyświetla mi wynik 4 a nie 10.Programowanie nie jest moją mocną stroną więc nie mogę znaleźć błędu.Czy ktoś może mi pomóc znaleźć błąd i go poprawić żeby program działał poprawnie i wykonywał dobrze działania matematyczne?. Z góry dziękuje za pomoc. Pozdrawiam

1 odpowiedź

+1 głos
odpowiedź 30 listopada 2018 przez mbabane Szeryf (79,280 p.)
edycja 30 listopada 2018 przez mbabane

Cały czas nadpisujesz zmienną Kalkulator. Przykładowo taki kod:

Kalkulator = new Kalkulator(numberList.get(0));
Kalkulator = new Kalkulator(numberList.get(1));
Kalkulator = new Kalkulator(numberList.get(2));
Kalkulator = new Kalkulator(numberList.get(3));
break;

Daje Ci w rezultacie, że w Twoim kalkulatorze jest to co zwraca to:

 numberList.get(3)

Musisz zmienać stan tego samego obiektu czyli robisz raz:

Kalkulator = new Kalkulator(); 
   //w twoim rozwiazaniu
   // będzie to najrozsądniejsze, ze uzyjesz domyslnego konstrukotra

A potem umieszczaj w nim kolejne wartości, na których chcesz dokonać operacji:

Kalkulator.insert(numberList.get(0));
Kalkulator.insert(numberList.get(1));
Kalkulator.insert(numberList.get(2));
Kalkulator.insert(numberList.get(3));

Kalkulaor.calculate(operation);

 

Polecam wróć się trochę do podstaw Java, czyli zrozum dobrze czym jest klasa, oraz czym jest instancja klasy, bo tutaj to spowodowało, że nie bardzo potrafisz zdiagnozować co się stało i nie do końca wiesz co dzieje się w kodzie.

Podobne pytania

0 głosów
1 odpowiedź 697 wizyt
pytanie zadane 26 listopada 2018 w Java przez mn130496 Gaduła (3,530 p.)
0 głosów
2 odpowiedzi 192 wizyt
pytanie zadane 9 października 2018 w Java przez Xarti Obywatel (1,380 p.)
0 głosów
1 odpowiedź 147 wizyt

92,453 zapytań

141,262 odpowiedzi

319,086 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...