Jak opakować ten kod w metodę (funkcję)?

0

Mam kod, który zamienia wejściowy string liczb na kod binarny. Chcę to opakować w funkcję/metodę.
Jak ?

Na wejściu ma być podawany x
a na wyjściu zwracany z


Public int NieMamPojeciaCoRobie (String x) 
{
        Integer y = Integer.parseInt(x);
        String z = Integer.toString(y,2);
        return z;
}

Public Static void main (String [args])
{
  System.out.println(NieMamPojeciaCoRobie("7"));
}
 

nie działa.

1
 
public static void main (String[] args){
	System.out.println(parseToBinaryString("7"));
}
	
public static String parseToBinaryString(String numberString){
        Integer number = Integer.parseInt(numberString);
        return Integer.toBinaryString(number);
 }
0
EraeRa napisał(a):

Java to jednak kamień

Jak się nie zna Javy to może i jest to kamień łupany. Skoro chcesz deklarować funkcje lokalne to możesz to zrobić tak:

Function<String, String> getBinary = (s -> Integer.toBinaryString(Integer.parseInt(s)));
System.out.println(getBinary.apply("7");
0

Możecie spojrzeć czy w miarę optymalnie napisałem funckję, która na wejściu otrzymuje stringa a zwraca odpowiednią pozycją w kodzie binarnym np.:

wejscie: "7"
wyjście dla idx=3 : prawda

  
class Main
{
 
//wywołanie funkcji
public static void main (String[] args){
System.out.println(getBinaryDigit("7",3));
}
 
 
 
//funkcja wyciągająca 3 cyfrę od prawej w wektorze binarnym z liczby podanej jako String
public static Boolean getBinaryDigit(String liczbaString, Integer idxWektoraBin){
 
try{
Integer liczbaInteger = Integer.parseInt(liczbaString);             //konwersja String -> Integer
String liczbaBinary = Integer.toString(liczbaInteger,2);            //konwersja Integer -> Binary
Integer dl = liczbaBinary.length();                        //d?ugo?? wektora binarnego
if (dl>=idxWektoraBin && liczbaInteger>=0){                                    //je?li d?ugo?? wektora binarnego >= idxWektoraBin
        if (liczbaBinary.substring(dl-idxWektoraBin,dl-idxWektoraBin+1).equals("1")){
                return true;
                }else{
                    return false;
                    }//zwraca warto?? 3 cyfry od prawej
        } else{
            return false;                        //zwraca 0, je?li nie ma 3 cyfry od prawej
        }
}
catch (Exception e) {return false;}
}
}
2
  1. formatuj kod bo się źle czyta
  2. dlaczego tak uparłeś się na to żeby na wejściu był String a nie Integer?
  3. można jeden raz return
 
    return "1".equals(liczbaBinary.substring(dl-idxWektoraBin,dl-idxWektoraBin+1));
   
  1. łapanie każdego wyjątku i zwracanie false? hmmm czyli tak jakby wszystko poszło zgodnie z planem żadnego logera, żadnego komunikatu błędu, ktoś zamiast liczby poda na wejściu "dupa" i dostanie że trzeci znak to 0?
0
szarotka napisał(a):
  1. formatuj kod bo się źle czyta
  2. dlaczego tak uparłeś się na to żeby na wejściu był String a nie Integer?
  3. można jeden raz return
 
    return "1".equals(liczbaBinary.substring(dl-idxWektoraBin,dl-idxWektoraBin+1));
   
  1. łapanie każdego wyjątku i zwracanie false? hmmm czyli tak jakby wszystko poszło zgodnie z planem żadnego logera, żadnego komunikatu błędu, ktoś zamiast liczby poda na wejściu "dupa" i dostanie że trzeci znak to 0?

ad 1. co to znaczy "formatuj" ? jak się formatuje ? przecież są spacje i tabulatory.
ad 2. bo tak jest w zadaniu, że na wejsciu string liczbowy :(

ad 4. bo nie wiem jak dodac komunikat o bledzie. Jak ktos poda "dupa" to ma zwrócić false, ale komunikat by sie przydal.

wersja 2.0:

  
class Main
{
 
//wywołanie funkcji
public static void main (String[] args){
System.out.println(getBinaryDigit("7",3));
}
 
 
 
//funkcja wyciągająca 3 cyfrę od prawej w wektorze binarnym z liczby podanej jako String
public static Boolean getBinaryDigit(String liczbaString, Integer idxWektoraBin){
 
Boolean wynik = false;
try{
Integer liczbaInteger = Integer.parseInt(liczbaString);             //konwersja String -> Integer
String liczbaBinary = Integer.toString(liczbaInteger,2);            //konwersja Integer -> Binary
Integer dl = liczbaBinary.length();                        //d?ugo?? wektora binarnego
if (dl>=idxWektoraBin && liczbaInteger>=0){                                    //je?li d?ugo?? wektora binarnego >= idxWektoraBin
        return (liczbaBinary.substring(dl-idxWektoraBin,dl-idxWektoraBin+1).equals("1"));
    }
}
catch (Exception e) {}
return wynik;
}

}
1
  1. formatować można ręcznie używając klawisza Tab itp., albo, co polecam, skorzystać z dobrodziejstwa ide i wybrać opcję formatuj (skrót klawiszowy zależny od ide eclipse: CTRL + SHIFT + F, netbeans: Alt+Shift+F).
  2. ok
  3. dlaczego ma? Nie ma! Przecież to mylące. Będziesz wykonywał operacje (które hipotetycznie byłyby dalej) mimo że dane wejściowe były bez sensu?
    Nie lepiej by funkcja rzucała wyjątek i przy wywołaniu łapać ten wyjątek i zrobić Sysouta "Użytkowniku, coś ty wpisał?"?
1

W sumie to po co Ci tam ta zmienna lokalna wynik?

0

wersja 2.1

public class Main {

	// wywołanie funkcji
	public static void main(String[] args) {
		System.out.println(getBinaryDigit("7", 3));
	}

	// funkcja wyciągająca 3 cyfrę od prawej w wektorze binarnym z liczby
	// podanej jako String
	public static Boolean getBinaryDigit(String liczbaString, Integer idxWektoraBin) {

		try {
			Integer liczbaInteger = Integer.parseInt(liczbaString);

			String liczbaBinary = Integer.toString(liczbaInteger, 2);

			Integer dl = liczbaBinary.length();
			if (liczbaInteger >= 0) {

				return (liczbaBinary.substring(dl - idxWektoraBin, dl - idxWektoraBin + 1).equals("1"));
			}
		} catch (Exception e) {
		}
		return false;
	}

} 
1

Technicznie można by się obejść bez tej transformacji na binarny ciąg za pomocą maski, ale to już jak to woli.

2
public static Boolean getBinaryDigit(String liczbaString,Integer idxWektoraBin)
  {
   return (((Integer.parseInt(liczbaString))&(1<<(idxWektoraBin-1)))!=0);
  }
0

wersja 3.1

public class Main {

	// wywołanie funkcji
	public static void main(String[] args) {
		 System.out.println(getBinaryDigit("7", 3));
	}

	// funkcja wyciągająca 3 cyfrę od prawej w wektorze binarnym z liczby
	// podanej jako String
	public static Boolean getBinaryDigit(String liczbaString, int idxWektoraBin) {
		try {
			return (((Integer.parseInt(liczbaString)) & (1 << (idxWektoraBin - 1))) != 0);
		} catch (Exception e) {
		}
		return false;
	}
} 
1

Zawsze możesz zrobić w main tak:

int value=0;
try { value=Integer.parseInt("7"); } 
catch (NumberFormatException ex) {}
System.out.println((value&4)>0);
0

wersja 4.3:

public class Main {
 
    // wywołanie funkcji
    public static void main(String[] args) {
        int liczbaString = 0;
        try { liczbaString = Integer.parseInt("-7"); } 
        catch (NumberFormatException ex) {}
 
        System.out.println(getBinaryDigit(liczbaString, 3));
    }
 
    // funkcja wyciągająca 3 cyfrę od prawej w wektorze binarnym z liczby
    // podanej jako String
    public static boolean getBinaryDigit(int liczbaString, int idxWektoraBin) {
 
        return (liczbaString>=0 && ((liczbaString & (1 << (idxWektoraBin - 1))) != 0));
 
    }
}  

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