Wpisywanie nieokreślonej liczby danych

0

Dzień dobry, chciałbym zapytać w jaki sposób mogę napisać program który pobiera dane (liczby), ale bez określonej ilości tych liczb. (tzn. do tej pory robiłem to z jakąś zmienną np: n, oraz pętlą np: for(i=0; n<n i++).

0

Uzyj

while() {
...
}
0

nie wiem w jaki sposób...

0

w c++ robiłęm tak:

while(cin>>znak)
{
}
0

Po pierwsze należałoby zrobić to w jakimś oddzielnym wątku. Aby aplikacja nie wisiała podczas pobierania danych.
Po drugie tak jak na napisał "Wielki kaczor" trzeba skorzystać z pętli "while".
Po trzecie nie napisałeś w jaki sposób chcesz te dane odbierać ? do jakiegoś strumienia tablicy ma być zwracana liczba, bajt, znak ?
Przykład dla liczby mógłby być taki:


            bool doStop = false;
            string dane = "";
            Random generator = new Random();
            while (!doStop)
            {
                int liczba = generator.Next(0,500);
                dane = dane + liczba.ToString();
                doStop = (liczba == 100);
            }
            Console.WriteLine(dane);

Przykład w C# , ale chyba wiadomo o co chodzi.

0

Poczytaj dokumentację funkcji wczytującej liczbę, będzie tam napisane co się stanie jeśli nie uda się wczytać danych. Użyj pętli while i w warunku sprawdzaj czy udało się wczytać więcej danych czy nie. Dodatkowo możesz jeszcze sprawdzić czy wystąpił jakiś błąd czy po prostu strumień wejściowy dobiegł końca.

Albo jeśli uzywasz java.util.Scanner to masz metodę hasNextInt(), którą wstawiasz w warunku i nextInt do pobrania wartości.

0

Dziękuję za podpowiedzi, :) w końcu wpadłem na pomysł i zrobiłem program w taki sposób: ( wykorzystując String to Int, ponieważ jakoś najbardziej rozumiem o co chodzi w tym sposobie)

    	int liczba[] = new int[100];
		String[] liczby;
		
		Scanner skan = new Scanner(System.in);
		
			String str = skan.nextLine();
		
			liczby = str.split(" ");
			//System.out.println(liczby.length);
		
			for(int i=0; i<liczby.length; i++){
		
				liczba[i] = Integer.parseInt(liczby[i]);
				System.out.println(liczba[i])
			}

Ale jeszcze mam pytanie, ponieważ moje liczby wpisuję tutaj po spacji, dzięki next.Line(). A czy można to zamienić aby liczbę w nowej linii??? (czy jest jakaś funkcja)

teraz wpisuję tak: 44 55 66 77 88
a chciałbym tak:
44
55
66
77
88

0
ArrayList<Integer> numbers = new ArrayList<Integer>();
...
while(skan.hasNextLine())
{
    numbers.add(Integer.parseInt(skan.nextLine());
}
0

Rozumiem, że dzięki temu wpisuję dane w nowej linijce, a to zapisuje mi do listy numbers.
np:
44
enter
77
enter
44
enter
.
.
.

A w jaki sposób zakończyć wpisywanie ? (skoro enterem przechodzę do nowej linii aby wpisać kolejną daną)

0

Możesz przyjąć, że jakaś konkretna liczba kończy wpisywanie:

while(skan.hasNextLine())
{
    number = Integer.parseInt(skan.nextLine();
    numbers.add(number);
    if(number == exitNumber)
    {
        break;
    }
}

Możesz dodać obsługę błędów, błędny ciąg znaków kończy.

while(skan.hasNextLine())
{
    try
    {
         number = Integer.parseInt(skan.nextLine();
         numbers.add(number);
    }
    catch(NumberFormatException e)
    {
         break;
    }
}

Możesz też ograniczyć ilość odczytywanych liczb:

while(skan.hasNextLine() && numbers.size() < 666)
...
0

Dziękuję bardzo pomogłeś mi, nie wiedziałem o metodzie hasNextLine .... Teraz wszystko jasne :) Zrobiłem dzięki temu , bez użycia pętli try catch :)

	while(skan.hasNextLine()){
		liczba = skan.nextLine();

	    	if(liczba.equals(""))
		        break;
	    	else{
		    	l=Integer.parseInt(liczba);
		    	lista.add(l);	   
	    	}
	}


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