tablica w konstruktorze

0

Witam
Mam do napisania konstruktor z argumentami imię,nazwisko,liczba egzaminów, który generuje losowo tablice ocen
napisałem coś takiego, ale wyrzuca błędy, jak to powinno wyglądać?
i mam drugie pytanko, jak użyć random, aby dostać losowe liczby od 2 do 5 z połówkami(czyli np. 2.0, 3.5, 4.0)?

public class student {
private String imie;
private String nazwisko;
private int nralbumu;
private int liczbaegzaminow;
private double[] tablicaocen;
Random los = new Random();
    student(String imie,String nazwisko,int nralbumu,int liczbaegzaminow){
        this.imie=imie;
        this.nazwisko=nazwisko;
        this.nralbumu=nralbumu;
        this.liczbaegzaminow=liczbaegzaminow;
        for(int i=0;i<this.liczbaegzaminow;i++){
        tablicaocen[i]=los.nextDouble();
        }
        }
1
  1. brak pola nralbumu. Próbujesz przypisać do niego wartość w konstruktorze a nie ma w ogóle takiego pola.
  2. Możesz stworzyć tablice z wszystkimi ocenami i losować indeks z przedziału 0.. ilość ocen -1.
  3. Nazwy klas w języku java powinny zaczynać sie od wielkiej litery, a zmienne i pola powinny być pisane camelCasem
0

jest pole nralbumu, przy wklejaniu mi się usunęło, błedy to
Exception in thread "main" java.lang.NullPointerException
at student.<init>(student.java:17)
at apk.main(apk.java:5)

1

Wypadałoby jeszcze stworzyć te tablice przez new. Najlepiej w konstruktorze tuż przed petla

0

a mam jeszcze jedno pytanko
mam metode i wyrzuca mi błąd Exception in thread "main" java.lang.NullPointerException
at student.srednia(student.java:30)
at apk.main(apk.java:7)
Wiesz czemu tak jest?

public double srednia(){
    double suma=0;
    for(int i=0; i<this.tablicaocen.length;i++){
        suma+=this.tablicaocen[i];
    }

    return suma/tablicaocen.length; 
}
1

Niestety nie wiem która to linia 30 w klasie student (serio, przeczytaj mój pierwszy post i zmień nazwy klas i zmiennych). Najlepiej uruchom debugger i sprawdź co jest nullem

0

tak wyglada klasa student


import java.util.Random;

public class student {
private String imie;
private String nazwisko;
private int nralbumu;
private int liczbaegzaminow;
private double[] tablicaocen;
Random los = new Random();
    student(String imie,String nazwisko,int nralbumu,int liczbaegzaminow){
        this.imie=imie;
        this.nazwisko=nazwisko;
        this.nralbumu=nralbumu;
        this.liczbaegzaminow=liczbaegzaminow;
        double[] tablicaocen = new double [liczbaegzaminow];
        double[] oceny = new double []{2.0,2.5,3.0,3.5,4.0,4.5,5.0};
        for(int i=0;i<this.liczbaegzaminow;i++){
            tablicaocen[i]=oceny[los.nextInt(7)];
        }
        }
public void sprawdz(int nralbumu){
if(this.nralbumu==nralbumu)
    System.out.println("istnieje");
else
    System.out.println("nieistnieje");
}
public double srednia(){
    double suma=0;
    for(int i=0; i<this.tablicaocen.length;i++){
        suma+=this.tablicaocen[i];
    }

    return suma/tablicaocen.length; 
}
public void wypisz(){
    System.out.println("imie "+ this.imie+" nazwisko "+this.nazwisko);
}
public int liczbadwoj(){
    //for(student std:student)

    return 0;

}
}
0

dlaczego ten konstruktor, nie wypełnia tablicy ocenami?

public class student {
private String imie;
private String nazwisko;
private int nralbumu;
private int liczbaegzaminow;
private double[] tablicaocen;
Random los = new Random();
    student(String imie,String nazwisko,int nralbumu,int liczbaegzaminow){
        this.imie=imie;
        this.nazwisko=nazwisko;
        this.nralbumu=nralbumu;
        this.liczbaegzaminow=liczbaegzaminow;
        double[] tablicaocen = new double [liczbaegzaminow];
        for(int i=0;i<this.liczbaegzaminow;i++){
            int a =los.nextInt(7);
            tablicaocen[i]=2.0+0.5*a;
        }
        }
1

Bo double[] tablicaocen = new double [liczbaegzaminow]; tworzy zmienną lokalną tablicaocen, która jest niszczona zaraz po wyjściu z konstruktora. Zamień to na this.tablicaocen = new double [liczbaegzaminow];

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