Co poszło nie tak z "instanceof"?

0

Witam, jestem ziolony w java, czy ktoś mógłby mi wytłumaczyć gdzie popełniłem błąd?

Zależy mi na sprawdzeniu czy dana zmienna należy do danego typu np. czy "x" jest "Integer":

public class checkinputdata {
public static void main (String[] args) {

	float i = 5;
	
	if ( i instanceof Integer ) {
		
		System.out.print("Sukces !");
		
	} else System.out.print("TEŻ Sukces !");
	
}

}

0

Dodatkowo, na dzień dzisiejszy, takich sprawdzeń w Javie nawet nie ma sensu robić. Prymityw nie jest instancją żadnej klasy, więc takie wyrażenie i tak dałoby zawsze false.

0

ok, rozumiem

0

A w jaki sposób mogę sprawdzić, czy dane są danego typu?

Ma to znaczenie wtedy, kiedy będę chciał zrobić pętlę sprawdzającą -> czy ktoś wprowadził poprawne dane, a jeśli nie, to aby wprowadził je ponownie.

1

Klasa java.util.Scanner ma metodę hasNextInt(). Poszukaj na necie informacji jak używać tej klasy.

0
wilczynski87 napisał(a):

A w jaki sposób mogę sprawdzić, czy dane są danego typu?

Musisz używać, nie int , float, etc. Tylko ich "wrapperów": Float, Integer... (maja więcej metod). Idzie tak:

    Float a = 1f;
    Integer b = 1;
      
    if (b.getClass().equals(Integer.class))
       System.out.println("Integer");
    if (a.getClass().equals(Float.class))
      System.out.println("Float");
0

Żeby stworzyć wartość typu Integer to najpierw trzeba mieć Stringa, którego da się przeparsować i go przeparsować. Jak już będziesz mieć Integera to po co sprawdzać czy Integer jest Integerem? To nie ma sensu. Żeby sprawdzić czy dane wpisane od użytkownika dają się sparsować możesz użyć wspomnianej przeze mniej klasy java.util.Scanner bądź próbować na siłę robić Integer.parseInt() i łapać wyjątki (co wygląda słabo).

0
Wibowit napisał(a):

Żeby stworzyć wartość typu Integer to najpierw trzeba mieć Stringa, którego da się przeparsować i go przeparsować. Jak już będziesz mieć Integera to po co sprawdzać czy Integer jest Integerem? To nie ma sensu. Żeby sprawdzić czy dane wpisane od użytkownika dają się sparsować możesz użyć wspomnianej przeze mniej klasy java.util.Scanner bądź próbować na siłę robić Integer.parseInt() i łapać wyjątki (co wygląda słabo).

Kod, który podałem sprawdza czy zadeklarowana zmienna jest danego typu, Float , Integer, jeśli nie o to chodziło, to OK.

0

Dobra już wiem :D dlatego napiszę to w trosce o innych nowych programistów java:

Ostatecznie chodziło napisanie funkcji, która niejako zmusza użytkownika programu do wprowadzenia prawidłowych danych, stąd pytanie o możliwość sprawdzenia, czy wprowadzone dane są danego typu.

Rozwiązałem to tak (i o dziwo coś wreszcie pykło :-) ) :

import java.util.*;
public class checkinputdata {
	public static void main (String[] args) {
		
		System.out.println("Podaj wartość Integer: ");
		
		Scanner scan = new Scanner(System.in);
		
		while( !scan.hasNextInt() ) {
			String a = scan.nextLine();
			System.out.println(a + " To nie Integer, spróbuj jeszcze raz");
			
		} 
			System.out.print("Sukces");
		
	}
}

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