Jak przesłać metodę do innej klasy?

0

Witam, dopiero co raczkuje w javie, chciałem zrobić konwenter systemów liczbowych, jednakże utknąłem w momencie w którym chcę wywołać z klasy DecToAll metodę convert1. Próbowałem jakoś tworząc obiekt w case 1 - 2 i potem ją wywołać, ale to nie działa i raczej nie tędy droga. Byłbym wdzięczny za pomoc.

import java.util.Scanner;

public class App {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Welcome into number system conventer!");
        System.out.println("1. Decimal");
        System.out.println("2. Binary");
        System.out.println("3. Hexadecimal");

        System.out.print("What system you want convert to?: ");
        int pick_sys = input.nextInt();
        System.out.print("Write a number: ");
        int number1 = input.nextInt();
        System.out.print("Into which system?: ");
        int pick_sys2 = input.nextInt();

        Choice ch = new Choice();
        DecToAll d1 = new DecToAll();
        ch.setSys(pick_sys, pick_sys2,number1);
        d1.setSys(pick_sys, pick_sys2,number1);

    }
}

class Choice{
    protected int pick_sys, pick_sys2, number;

    public void setSys(int sys1, int sys2, int number) {
        this.pick_sys = sys1;
        this.pick_sys2 = sys2;
        this.number = number;
    }
    public void whatSystem() {
        switch (pick_sys) {
            case 1:
                switch (pick_sys2) {
                    case 2:
                       // DecToAll deci = new DecToAll();
                       // deci.convert1();
                        // nie dziala 
                        break;
                    case 3:
                        break;

                }
                break;
            case 2:
                switch (pick_sys2) {
                    case 1:
                        break;
                    case 3:
                        break;
                }
                break;
            case 3:
                switch (pick_sys2) {
                    case 1:
                        break;
                    case 2:
                        break;
                }
                break;
        }

    }
}

class DecToAll extends Choice{
    private int remainder=0;
    int i=0;
    private  int [] bin_num = new int[100];

    public void setSys(int sys1, int sys2, int number) {
        this.pick_sys = sys1;
        this.pick_sys2 = sys2;
        this.number = number;
    }

        public void  convert1(){
            System.out.println(number);
            while(number !=0){
                bin_num[i] = number % 2;
                number /= 2;
                i++;
            }
            System.out.println(bin_num[0] + bin_num[1] + bin_num[2] + bin_num[3]);
            System.out.println("After conversion:");
            for(int j= i-1; j>=0; j--)
                System.out.print(bin_num[j] + " ");
        }

}

0

Ale co właściwie nie działa. ...bo przecież działa.

0

Wiesz że nie wywołujesz metody whatSystem()?

0

Faktycznie..Przeoczyłem to. Tylko teraz jak patrze, to nawet jeśli ją wywołuje, to wtedy convert1 nie dostaje wartości number i dalsze instrukcje się nie wykonują. Co jest nie tak?

0

Bo w main masz 1 obiekt a w whatSystem() tworzysz drugi.

0

@atmal: W takim razie co zrobić żeby DecToAll widziało wartości zmiennych z Choice? Sorki zgłupiałem ...

0

O to chodziło? Teraz działa

class Choice{
    protected int pick_sys, pick_sys2, number;

    public void setSys(int sys1, int sys2, int number) {
        this.pick_sys = sys1;
        this.pick_sys2 = sys2;
        this.number = number;
    }
    public void whatSystem(int number) {
        switch (pick_sys) {
            case 1:
                switch (pick_sys2) {
                    case 2:
                       DecToAll deci = new DecToAll();
                       deci.setSys(pick_sys, pick_sys2,number);
                        deci.convert1();
                        break;
                    case 3:
                        break;

                }
1

Mógłbyś mieć metody statyczne i przekazywać do nich liczbę którą chcesz przekonwertować.

Dla przykładu:

public static String toBinary(int number) {
	String binary; // Tutaj liczba binarna jako String
	... // Konwersja dec na bin
	return binary; // Zwracanie wartości
}

Wtedy możesz wywołać taką metodę bez tworzenia obiektu tej klasy:

public static void main(String[] args) {
	...
	System.out.println(DecToAll.toBinary(5)); // Wyświetli 0101
}

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