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

kalkulator i konstruktory sprawdzenie kodu

Object Storage Arubacloud
0 głosów
994 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ź 718 wizyt
pytanie zadane 26 listopada 2018 w Java przez mn130496 Gaduła (3,530 p.)
0 głosów
2 odpowiedzi 199 wizyt
pytanie zadane 9 października 2018 w Java przez Xarti Obywatel (1,380 p.)
0 głosów
1 odpowiedź 150 wizyt

92,536 zapytań

141,377 odpowiedzi

319,452 komentarzy

61,922 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!

...