Błąd "non-static method" przy wywołaniu funkcji

2015-02-19 15:09
0
class btn {
public void funkcja(int indeks, JButton[] Guziki)
{                        
    for (int i=0; i<Guziki.length; i++) 
        { 
            if (i == indeks) 
                Guziki[i].setEnabled(true); 
            else 
                Guziki[i].setEnabled(false); 
        } 
}
}

wywołanie metody:

btn.funkcja(1, Guziki1);

Dlaczego wyrzuca mi błąd w linijce gdzie jest wywołana metoda.

error: non-static method funkcja(int,JButton[]) cannot be referenced from a static context
btn.funkcja(1, Guziki1);

Co mam źle i muszę poprawić?

Z góry dzięki za pomoc.


Cenie ludzi za szczerość a nie za szczere intencje..
edytowany 1x, ostatnio: furious programming, 2015-02-19 17:05

Pozostało 580 znaków

2015-02-19 15:11
0
public static void funkcja(int indeks, JButton[] Guziki)
edytowany 1x, ostatnio: krzysiek050, 2015-02-19 15:11
próbowałem tak, wtedy wyrzuca błąd: Illegal static declaration in inner class btn public static void funkcja(int indeks, JButton[] Guziki) modifier 'static' is only allowed in constant variable declarations - Guepardo 2015-02-19 15:12
Wrzuć cały plik. - krzysiek050 2015-02-19 15:15

Pozostało 580 znaków

2015-02-19 15:26
0

Spróbuj

new btn().funkcja(1);

Chociaż nie jestem pewny czy zadziała bo kod wyznacza nowe standardy wtf :).

uczę się dopiero :) - Guepardo 2015-02-19 15:28
też nie działa wyrzuca Illegal static declaration in inner class btn public static void funkcja(int indeks, JButton[] Guziki) modifier 'static' is only allowed in constant variable declarations - Guepardo 2015-02-19 15:28
Ale wywal to co napisałem w 2 poście i dodaj tylko to z trzeciego. PS. Odpisuj normalnie a nie w komentarzach. - krzysiek050 2015-02-19 15:34

Pozostało 580 znaków

2015-02-19 15:37
0

To wtedy jest jakiś inny błąd

 error: method funkcja in class btn cannot be applied to given types;
 new btn().funkcja(1);
 required: int,JButton[]
 found: int
 reason: actual and formal argument lists differ in length

dodanie znacznika <code class="none"> - @furious programming


Cenie ludzi za szczerość a nie za szczere intencje..
edytowany 2x, ostatnio: furious programming, 2015-02-19 17:01
Ile razy jeszcze mam przypominać o wstawianiu treści błędów w znaczniki &lt;code&gt; lub &lt;code=none&gt;? - furious programming 2015-02-19 17:02
do usran.. śmierci - Guepardo 2015-02-19 19:15
W takim razie posiedź trochę na ławce kar i nabierz pokory; Następnym razem posiedzisz pół roku - tym razem dwa tygodnie wystarczą; - furious programming 2015-02-19 20:19

Pozostało 580 znaków

2015-02-19 15:41
0

A nie <ort>wruuciles</ort> przypadkiem tej swojej klasy btn i tej funkcji w jakas inna statyczna klase/metode?


The only valid measurement of code quality: WTFs/min...
edytowany 2x, ostatnio: furious programming, 2015-02-19 17:02
no chyba tak, jest w głównej metodzie a ona jest statyczna - Guepardo 2015-02-19 15:42

Pozostało 580 znaków

2015-02-19 15:58
0

Sorki, zaraz spadam sprzed kompa. Tak na pierwszy rzut oka to rzeczywiscie nowy standard wtf:) Ale don't worry. kazdy cos takiego stworzyl (albo tworzy:D). Nie wiem dlaczego wrzuciles ta klase button do metody?! I ta klasa sklada sie tylko z tej metody? Dlaczego jest w srodku jakby z kosmosu?:) Ogolnie - przeczytaj jeszcze raz o statycznym kontekscie. I cos o obiektch. Od razu bedziesz wiedzial dlaczego ten kod wyrzuca wyjatek.
Pozdrawiam na nowej drodze ;)

PS: Czy moze sie nawiasiki pomylaly?


The only valid measurement of code quality: WTFs/min...
edytowany 1x, ostatnio: miroS, 2015-02-19 16:00
Czytam cały czas, lecz nadal nie wiem co mam źle :( Z Javy miałem tylko jedną lekcje. I muszę projekt zrobić. - Guepardo 2015-02-19 16:03

Pozostało 580 znaków

2015-02-19 16:46
package kalkulator;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

class zmienne {

    public static boolean dodawanie = false;
    public static boolean odejmowanie = false;
    public static boolean mnozenie = false;
    public static boolean dzielenie = false;

    public static double a, b, ab;
    public static double p;
    public static double aa, bb;
    public static String tekst;
}

public class Kalkulator {

    JTextField wyswietl;
    boolean znak = false;

    JFrame frame = new JFrame("Kalkulator");

    public Kalkulator() {
        frame.setSize(270, 305); // rozmiar okienka
        frame.setLocation(470, 280); // Gdzie ma pojawiać się okienko
        frame.setResizable(false); //zablokowanie możliwości rozszeżania
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(null); // sami ustawiamy co gdzie ma być, by nie robiła tego za nas java

        wyswietl = new JTextField("");
        wyswietl.setBounds(10, 10, 247, 50); //gdzie ma być to pole i jakich ma być wymiarów
        wyswietl.setHorizontalAlignment(JTextField.RIGHT);  // text od prawej
        frame.add(wyswietl); //dodanie pola do frame

        btn_1.setBounds(10, 170, 45, 45);
//itd
        frame.add(btn_wynik);
//itd.        
        btn_wynik.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                zmienne.ab = 0;

                if (zmienne.dodawanie) {
                    zmienne.b = Double.parseDouble(wyswietl.getText());
                    zmienne.ab = zmienne.a + zmienne.b;
                    wyswietl.setText(Double.toString(zmienne.ab));
                } else if (zmienne.odejmowanie) {
                    zmienne.b = Double.parseDouble(wyswietl.getText());
                    zmienne.ab = zmienne.a - zmienne.b;
                    wyswietl.setText(Double.toString(zmienne.ab));
                } else if (zmienne.mnozenie) {
                    zmienne.b = Double.parseDouble(wyswietl.getText());
                    zmienne.ab = zmienne.a * zmienne.b;
                    wyswietl.setText(Double.toString(zmienne.ab));
                } else if (zmienne.dzielenie) {
                    zmienne.b = Double.parseDouble(wyswietl.getText());
                    if (zmienne.b != 0) {
                        zmienne.ab = zmienne.a / zmienne.b;
                        wyswietl.setText(Double.toString(zmienne.ab));
                    } else {
                        wyswietl.setText("Nie mozna dzielić przez 0");
                        funkcja(1, Guziki);
                    }
                }
            }
        });
    }

    JButton btn_1 = new JButton("1");
    JButton btn_2 = new JButton("2");
    JButton btn_3 = new JButton("3");
    JButton btn_4 = new JButton("4");
    JButton btn_5 = new JButton("5");
    JButton btn_6 = new JButton("6");
    JButton btn_7 = new JButton("7");
    JButton btn_8 = new JButton("8");
    JButton btn_9 = new JButton("9");
    JButton btn_0 = new JButton("0");
    JButton btn_c = new JButton("C");
    JButton btn_dodawanie = new JButton("+");
    JButton btn_odejmowanie = new JButton("-");
    JButton btn_mnozenie = new JButton("*");
    JButton btn_dzielenie = new JButton("/");
    JButton btn_procent = new JButton("%");
    JButton btn_pierwiastek = new JButton("√");
    JButton btn_wynik = new JButton("=");

    JButton[] Guziki = {btn_1, btn_2, btn_3, btn_4, btn_5, btn_6, btn_7, btn_8, btn_9, btn_0, btn_dodawanie, btn_odejmowanie, btn_mnozenie, btn_dzielenie, btn_wynik, btn_procent, btn_pierwiastek, btn_c};

    public static void main(String[] args) throws ArithmeticException {

        new Kalkulator().frame.setVisible(true);
    }

    public void funkcja(int indeks, JButton[] Guziki) {
        for (int i = 0; i < Guziki.length; i++) {
            if (i == indeks) {
                Guziki[i].setEnabled(true);
            } else {
                Guziki[i].setEnabled(false);
            }
        }
    }
}
Pokaż pozostałe 2 komentarze
mam jeszcze pytanko jak zrobić by wynik nie był wyświetlany po przecinku (np 6*6=36,0 ) - Guepardo 2015-02-19 18:55
czyli to jest tylko kwestia odpowiedniej maski przy wyświetlaniu? Czy trzeba znaleźć funkcję do zaokrąglania? - Guepardo 2015-02-19 19:05
Zależy wszystko od kontekstu - garai 2015-02-19 19:08
class zmienne piękne - karolinaa 2015-02-19 23:30

Pozostało 580 znaków

2015-02-19 17:32
0

myslę, że chodziło Ci o

public void funkcja(int indeks, JButton[] Guziki) {
  for(JButton btn: Guziki) btn.setEnabled(false);
  Guziki[indeks].setEnabled(true);
}

ten if ciągle w pętli jest niepotrzebny.
Poza tym klasy umieszczaj w osobnych plikach - w tym samym możesz umieszczać tylko klasy prywatne a chyba nie o to Ci chodziło, dopiero w klasie kalkulator zadeklaruj metode 'funkcja' (nie będzie wtedy statyczna),
zmień nazwę metody funkcja,
poczytaj jeszcze raz o co chodzi w programowaniu obiektowym.

edytowany 1x, ostatnio: zadroozyn, 2015-02-19 17:33

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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