błąd w metodzie

0

czemu to nie działa:
kawałek kodu w klasie LottoNLiczba:

 LottoStat naj = new LottoStat();
    LottoCzytaj czytaj = new LottoCzytaj();
    
    
    naj.najczesciejLiczba(czytaj.tab, czytaj.ile_lini);

    /** Creates new form LottoNLiczba */
    public LottoNLiczba() {
        initComponents();
        
    }

kawałek klasy LottoStat i metoda najczesciejLiczba:

int i, j, szukana;
        int liczba = 0;
        int ile_razy = 0, max = 0, min = 0;

        public void najczesciejLiczba(LottoCzytaj[] klasa, int ile){
            while(liczba < 49){
                for(i = 0; i < ile; i++)
                    for(j = 0; j < 49; j++)
                        if(klasa[i].liczby[j] == liczba)
                            ile_razy++;
                if(ile_razy > max){
                    max = ile_razy;
                    szukana = liczba;
                }

                i++;
            }
            //tutaj wyświetl dane
        }

zmienne klasy LottoCzytaj:

int nr_losowania;
        int[] data = new int[3];
        int[] liczby = new int[6];
        int i = 0; int j, k;
        int ile_lini = 0;
        LottoCzytaj[] tab;[/code]

przy napisaniu:
`naj.najczesciejLiczba(czytaj.tab, czytaj.ile_lini);`

pojawia się błąd:

> Exception in thread "AWT-EventQueue-0" java.lang.ClassFormatError: Method "<error>" in class lotto/LottoNLiczba has illegal signature "Lnaj/najczesciejLiczba;"
0

Przepraszam, ale nie mogę na to patrzeć. Java to nie C. W Javie masz "length", aby odczytać długość tablicy. Od Javy 5 można też użyć skróconej formy for dla każdego elementu w tablicy.

G1T napisał(a)
public void najczesciejLiczba(LottoCzytaj[] klasa, int ile){
            while(liczba < 49){
                for(i = 0; i < ile; i++)
                    for(j = 0; j < 49; j++)
                        if(klasa[i].liczby[j] == liczba)
                            ile_razy++;
                if(ile_razy > max){
                    max = ile_razy;
                    szukana = liczba;
                }

                i++;
            }
            //tutaj wyświetl dane
        }

Powinno to wyglądać tak

public void najczesciejLiczba(LottoCzytaj[] klasa){
             for(int liczba = 0; liczba < 49; liczba++)
                for(LottoCzytaj k: klasa)
                    for(int l: k.liczby)
                        if(l== liczba)
                            ile_razy++;
                if(ile_razy > max){
                    max = ile_razy;
                    szukana = liczba;
                }
            }
            //tutaj wyświetl dane
        }
</quote>

Nie mówiąc, że ten kawałek kodu można zapisać dużooo efektywniej:

public void najczesciejLiczba(LottoCzytaj[] klasa){
            int[] f = new int[49];
            for(LottoCzytaj k: klasa)
                    for(int l: k.liczby)
                      f[l]++;

           int max = 1;
           for(int i = 2; i < f.length; i++){
                if (f[i] > f[max]){
                   max = i;
               }  
           }

           /* f[max] to ilosc wystapien najczestszego elementu, a max to jego wartosc */
            //tutaj wyświetl dane
        }
0

ok. już poprawiłem ten kod. a czemu jak napiszę w klasie LottoNLiczba:

LottoStat naj = new LottoStat();    
    naj.najczesciejLiczba();

to pojawia się komunikat o błędzie:

package naj does not exist
<identifier> expected
package t does not exist
<identifier> expected

0
G1T napisał(a)

ok. już poprawiłem ten kod. a czemu jak napiszę w klasie LottoNLiczba:

LottoStat naj = new LottoStat();    
    naj.najczesciejLiczba();

to pojawia się komunikat o błędzie:

package naj does not exist
<identifier> expected
package t does not exist
<identifier> expected

Musisz to napisać tak:

LottoStat naj = new LottoStat();    
{
    naj.najczesciejLiczba();
}
0

w innej klasie mam taki kod (klasa LottoView:

try {
                                    t.czytajPlik(this.selectedFile);
                                } catch (FileNotFoundException ex) {
                                    Logger.getLogger(LottoView.class.getName()).log(Level.SEVERE, null, ex);
                                } catch (IOException ex) {
                                    Logger.getLogger(LottoView.class.getName()).log(Level.SEVERE, null, ex);
                                }

jak zrobić, żebym mógł użyć t.tab w tym kodzie (klasa LottoNLiczba):

LottoStat naj = new LottoStat();
    {
    naj.najczesciejLiczba(t.tab);
    }

zmienna tab zainicjowana w klasie LottoCzytaj:

public class LottoCzytaj {
        int nr_losowania;
        int[] data = new int[3];
        int[] liczby = new int[6];
        int i = 0; int j, k;
        int ile_lini = 0;
        LottoCzytaj[] tab;

        public void zapiszDoPliku(LottoCzytaj[] klasa) throws IOException{

                FileWriter fW = new FileWriter("C:/dane.txt",true);
                fW.write(klasa[1].nr_losowania);
                fW.close();
         }

        /*LottoCzytaj[]*/public void czytajPlik(File selectedFile) throws FileNotFoundException, IOException{

            StreamTokenizer sTokenizer = new StreamTokenizer(new FileReader(selectedFile));
          
                for(k = 0; k < ile_lini; k++){
                    for(i = 0; i < 10; i++){
                        if (j == StreamTokenizer.TT_NUMBER)
                            tab[i].nr_losowania = (int) sTokenizer.nval;
                        if (j == StreamTokenizer.TT_NUMBER)
                            tab[i].data[0] = (int) sTokenizer.nval;
                        if (j == StreamTokenizer.TT_NUMBER)
                            tab[i].data[1] = (int) sTokenizer.nval;
                        if (j == StreamTokenizer.TT_NUMBER)
                            tab[i].data[2] = (int) sTokenizer.nval;
                        if (j == StreamTokenizer.TT_NUMBER)
                            tab[i].liczby[0] = (int) sTokenizer.nval;
                        if (j == StreamTokenizer.TT_NUMBER)
                            tab[i].liczby[1] = (int) sTokenizer.nval;
                        if (j == StreamTokenizer.TT_NUMBER)
                            tab[i].liczby[2] = (int) sTokenizer.nval;
                        if (j == StreamTokenizer.TT_NUMBER)
                            tab[i].liczby[3] = (int) sTokenizer.nval;
                        if (j == StreamTokenizer.TT_NUMBER)
                            tab[i].liczby[4] = (int) sTokenizer.nval;
                        if (j == StreamTokenizer.TT_NUMBER)
                            tab[i].liczby[5] = (int) sTokenizer.nval;
                        if (j == StreamTokenizer.TT_NUMBER)
                            tab[i].liczby[6] = (int) sTokenizer.nval;
                        if (j == StreamTokenizer.TT_NUMBER)
                            tab[i].liczby[7] = (int) sTokenizer.nval;
                        if (j == StreamTokenizer.TT_NUMBER)
                            tab[i].liczby[8] = (int) sTokenizer.nval;
                        if (j == StreamTokenizer.TT_NUMBER)
                            tab[i].liczby[9] = (int) sTokenizer.nval;
                    }
            }
            //return tab;
        }

    }

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