Dodawanie liczb podanych przez użytkownika

0

Witam, program ma polegać na tym, że użytkownik podaje liczby (nie deklarując ile ich poda). Program dodaje liczby do tablicy ( by robić z nimi różne rzeczy np. suma liczb, iloczyn, ustawienie liczb w dowolnej kolejności i wiele więcej.) Problemem dla mnie jest dodać te liczby do tablicy nie znając jej długości. Czy istnieje możliwość poszerzania tablicy i dodawania do niej kolejnych elementów. Dany problem chciałem rozwiązać poniższym kodem, lecz bez skutecznie. Moim drugim pytaniem do Was jest, dlaczego jak podam więcej liczb to muszę wpisać czasami raz 0, czasami 2 razy 0, czasami 3 razy 0. ( zero to warunek do wyjścia z pętli ). Z góry dziękuje za odpowiedzi :)

import java.util.Scanner;

public class Program {

	int a;
	int number;
	int[] tab;
	
	public int readInt(){
		Scanner scan = new Scanner(System.in);
		return this.number=scan.nextInt();
	}
	public int setNumber(int a){
		return this.a=a;
	}
	public int getNumber(){
		return a;
	}
	public int[] tab(){
		int k = 1;
		int[] tab = new int[k];
		do{	
			for(int i=0;i<tab.length;i++){
				this.number=readInt();
				setNumber(this.number);
				tab[i]=getNumber();
				k++;
			}				
		}
		while(setNumber(readInt())!=0);
		return this.tab=tab;
	}
	public int sumOfTab(){
		int sum=0;
		for(int i=0;i<this.tab.length;i++){
			sum+=tab[i];
		}
		return sum;
	}
}

public class Test {

	public static void main(String[] args) {
		Program prog = new Program();
		prog.tab();
		System.out.println(prog.sumOfTab());

	}

}
1

metody set nie powinny zwracać nic czyli jak piszesz metodę np. setNumber to powinno być

public void setNumber(int a)
{
this.a = a;
}

kolejna sprawa za każdym razem w pętli tworzysz nowy obiekt Scanner co również jest błędnym podejściem jak chcesz w pętli czytać liczby zrób to tak np

Scanner in = new Scanner(System.in);
int liczba;

do {
liczba = in.nextInt();
} while(liczba != 0);

in.close();

jeżeli nie znasz ilości wczytywanych liczb możesz je np. wczytywać do ArrayList<Integer> a następnie je przetwarzać jak chcesz.

1

Jeśli chcesz czytać w pętli, to zrób to tak:

Scanner in = new Scanner(System.in);
int liczba;
 
do {
liczba = in.nextInt();
} while(liczba != 0);
 

bez instrukcji

in.close();
0

Napisałem kod od nowa z użyciem ArrayList, tylko występuje błąd, którego kompletnie nie rozumiem, skąd się bierze.

import java.util.ArrayList;
import java.util.Scanner;

public class Program {

    int a;
    int sum;
    ArrayList<Integer> tab;

    public void setNumber(int a) {
        this.a = a;
    }
    public int getNumber() {
        return a;
    }
    public int readInt(){
        Scanner scan = new Scanner(System.in);
        return scan.nextInt();
    }
    public void setTab(){
        ArrayList<Integer> tab = new ArrayList<Integer>();
        for(int i=0;i<i+1;i++){
           readInt();
           if(getNumber()==0){
               break;
            }
            tab.add(i,getNumber());
        } this.tab=tab;
    }
    public ArrayList<Integer> getTab(){
        return tab;
    }
    public int sumOfTab(){
        int sum=0;
        for(int i=0;i<getTab().size();i++){
            sum+=getTab().get(i);
        }
        return sum;
    }
}
public class Test {

    public static void main(String[] args) {
    Program prog = new Program();
        System.out.print(prog.sumOfTab());

    }
}

1

Mógłbyś podać błąd. Zgaduję, że jest to NullPointerException, który jest oczywisty.
Nadal wielokrotnie (i bezsensownie) wielokrotnie tworzysz obiekt typu Scanner.
Przeczytałem kod dokładnie, on jest zupełnie błędny:

  1. nigdzie nie wywołujesz funkcji czytającej,
  2. wywołanie tej funkcji niczego nie naprawi, bowiem program nie zapamiętuje co użytkownik wpisał.
0

Napisałem kod jeszcze raz i wszystko działa, bardzo dziękuję za pomoc :) wstawiam kod jakby ktoś potrzebował ;p (Bardzo pomocne okazało się narysowanie algorytmu na kartce papieru )

import java.util.ArrayList;
import java.util.Scanner;

public class Program {

    int number;
    ArrayList<Integer> tab = new ArrayList<Integer>();

    public void setNumber(int number) {
        this.number = number;
    }
    public int getNumber() {
        return number;
    }
    public void setTab() {
        Scanner scan = new Scanner(System.in);
        for (int i = 0; i < i + 1; i++) {
            setNumber(scan.nextInt());
            if (getNumber() == 0) {
                break;
            }
            tab.add(i, getNumber());
        }
    }
    public ArrayList<Integer> getTab() {
        return tab;
    }
    public int getSumOfTab() {
        int sum = 0;
        for (int i = 0; i < tab.size(); i++) {
            sum += getTab().get(i);
        }
        return sum;
    }
    public int getProductOfTab(){
        int product=1;
        for(int i=0;i<getTab().size();i++){
            product*=getTab().get(i);
        }return product;
    }
}
public class Test {
    public static void main(String[] args) {

        Program prog = new Program();
        prog.setTab();
        System.out.println(prog.getSumOfTab());
        System.out.println(prog.getProductOfTab());

    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1