wyswietlanie petli

0

Mam taka petle, zwraca wszystkie zetony klasy Zeton. Mam tez klase User.
Zakladajac ze mam uzytkownika A i B Czyli jest ich >2. Kazdy ma wiecej niz 1 klasy Zeton. To jak zrobic wyswietlanie zetonow tylko dla jednego uztykownika?

for(int j = 0; j < zetony.size(); j++){ 
	 Zeton z = zetony.get(j);
	  System.out.print( z.zeton );
	}
}
0

W klasie User:

public List<Zeton> zetony = new ArrayList<Zeton>();
0

do tego momentu doszedłem

0

Tylko coś na zasadzie:

if(user.get(j)==u){
..
}

tylko to moje chyba idzie w druga strone.. hm

0
List<Zeton> zetony=A.zetony; // Gdzie A to twój `user A;`

dalej twoja pętla.

0
 for(int j = 0; j < zetony.size(); j++){ 
	   System.out.print( u.zetony.get(j).zeton +" " );
	    		}

Wyskoczylo mi cos takiego:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)

na pewno to blad z ta lista na ktorej operuje ale co wiecej.. czy to kwestia try catch?

+" " - > dlaczego bez tego(czyli jakiegos stringa) wgl program wpada w jakas petle nieskonczona chodz program to ten kawalek ktory tu widac

0

Już nie ważne, dzieki :)
Temat do kosza.

0

Takie dwa pytania mam w temacie.

  1. dlaczego ta petla dziala,lecz nie dla tych liczb ktore sa w warunku.. tzn np. wpisze 2,5,4 itp to jest zapetlenie.. wpisze 1,6 przyjmuje i opuszcza petle
  2. dlaczego wpisujac np 2.5, 3.5(czyli z warunku) wywala taki blad:
    Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at java.util.Scanner.nextFloat(Unknown Source)
System.out.println("Podaj wartosc liczby: ");
	float liczba = 0;
		do{
		 liczba = sc.nextFloat();
		}while(liczba == 2 || liczba == 3 || liczba == 3.5 || liczba == 4 || liczba == 4.5 || liczba == 5);

Jak to poprawic?

0

Wpisuj poprawnie, znak dziesiętny Java bierze z systemu.
Wpisując 2,5,4 podałeś: 2.5 0.4

0
_13th_Dragon napisał(a):

Wpisuj poprawnie, znak dziesiętny Java bierze z systemu.

możesz to rozwinąć?

_13th_Dragon napisał(a):

Wpisując 2,5,4 podałeś: 2.5 0.4

inaczej chodziło mi że wpisuje całkowite liczby 2 5 4 (przeciez oddzielilem przecinkiem)
w javie czy innym jezyku chyba odziela sie kropka jak jest z przecinkiem co tez zrobilem? ale to nie ma wplywu na dzialanie pętli

0

Klasa Scanner jest "zlokalizowana", między innymi dostosowuje format odczytywanych liczb do ustawień systemu. W Polsce separatorem dziesiętnym dla tej klasy jest przecinek. Możesz to zmienić, np. tak:

Scanner sc = new Scanner(System.in);
sc.useLocale(new Locale("US"));
0

Może chodzi ci o to że spodziewasz się innego warunku niż napisałeś. W warunku napisano że wymienione liczby należy zignorować czyli powtórzyć pętle raz jeszcze.

0

W takim razie na pewno spodziewalem sie czegos innego. Jeszcze raz przeanalizowalem dzialanie do/while. Konczy sie kiedy warunek jest na false.
Czyli, majac taki kod:

Scanner sc = new Scanner(System.in);
		sc.useLocale(new Locale("US"));
	

			System.out.println("Podaj wartosc liczby: ");
			float liczba= 0;
			do{
			 liczba= sc.nextFloat();
			}while(liczba != 2 || liczba != 3 || liczba != 3.5 || liczba != 4 || liczba != 4.5 || liczba != 5);
			
			System.out.print(liczba);

gdy wprowadzam 2, liczba nie jest rowna 2 (nieprawda) wiec powinno byc ok?
czy ja dobrze to rozumiem?
jak to powinno wygladac?

0

Pętla while działa dopóki warunek jest prawdziwy twój warunek:

liczba != 2 || liczba != 3 || liczba != 3.5 || liczba != 4 || liczba != 4.5 || liczba != 5

dla liczba równej 2 wygląda to tak, że liczba != 2 jest false a każda z dalej podanych (np liczba != 3) jest true czyli po podstawieniu:

false || true || true || true || true

a operacja lub powoduje, że wychodzi true więc pętla ma true więc wykona się kolejny raz

0
while(!(liczba == 2 || liczba == 3 || liczba == 3.5 || liczba == 4 || liczba == 4.5 || liczba == 5))
0
public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner sc = new Scanner(System.in);
		sc.useLocale(new Locale("US"));
		 System.out.println("Dodaj ocene");

	
	 System.out.println("Dodaj liczbe");

		System.out.println("Podaj wartosc liczby: ");
		String liczba = null;
		boolean temp = false;
		
		
		do{
			try{
		liczba = sc.next();
		sc.useLocale(new Locale("US"));
			}
			catch(Exception e)
			{
				//System.out.print(e);
			}
		if(liczba == "2" || liczba == "3" || liczba == "3.5" || liczba == "4" || liczba == "4.5" || liczba == "5")
		{
			
			temp=true;
			System.out.println(temp);
			break;
		}
		else
		{
			System.out.println("Czy to napewno dobra liczba?");
		}
		
		}
		while(temp==true);
		
		}
	
}

To jeszcze takie pytanie, gdy liczba jest typu float ta petla dziala i wybiera tylko wymyslone(rozwiazalem to w taki sposob), po zmianie typu na string w magiczny sposob juz nie dziala

0

W klasie String operator == porównuje referencję (adres w pamięci), a nie zawartość zmiennych. Porównuj tak

if(liczba.equals("2") || liczba.equals("3") || liczba.equals("3.5") || liczba.equals("4") || liczba.equals("4.5") || liczba.equals("5"))

P.S. Skoro pracujesz na Stringach, to

sc.useLocale(new Locale("US"));

nie jest potrzebne.

0

No ok, ale w przypadku takiej petli wystepuje znow problem tego typu ze gdy if jest spelniony temp=true wychodzi z petli OK.
ale dlaczego wychodzi z petli gdy wpisujesz np 1 czyli if nie dziala, przechodzi do else temp=false a z petli wychodzi. i nie mozna podac kolejnej liczby?

 do{

    liczba = sc.next();

        
        if(liczba.equals("2") || liczba.equals("3") || liczba.equals("3.5") || liczba.equals("4") || liczba.equals("4.5") || liczba.equals("5"))
    {

        temp=true;
        System.out.println(temp);
        break;
    }
    else
    {
    	System.out.println(temp);
        System.out.println("Czy to napewno dobra liczba?");
    }

    }
    while(temp==true);
0

A gdzie masz ustawienie temp=false;?

0

boolean temp = false;

post wyzej jest caly main

0

Wygląda jakbyś pisał warunki logiczne przy pomocy chodzącego po klawiaturze kota.

while(!temp)

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