Zmiana listy na tablicę

0

napisałem taki kod za pomocą list, ale muszę oddać projekt za pomocą tablic, próbuję sam ale cały czas coś mi nie działa. Pomóżcie mi co mam zmienić, żeby zamiast list wprowadzić tablice jednowymiarową, jestem początkujący programistą.


import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.net.PortUnreachableException;
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
import javax.lang.model.SourceVersion;
import javax.lang.model.util.ElementScanner6;
import javax.sound.sampled.SourceDataLine;
import javax.xml.crypto.Data;

public class Komis {
 
    List<String> Imie = new ArrayList<>();
    List<String> Nazwisko = new ArrayList<>();
    List<String> Marka = new ArrayList<>();
    List<String> Model = new ArrayList<>();
    List<Integer> Rok = new ArrayList<>();
    List<String> Data_zakupu = new ArrayList<>();  
    
    Scanner scannner = new Scanner(System.in);
   
    void Dodawanie (Integer i, String a, String b,String c, String d, Integer e, String f) {
        Imie.add(i, a);
        Nazwisko.add(i,b);
        Marka.add(i,c);
        Model.add(i,d);
        Rok.add(i,e);
        Data_zakupu.add(i,f);
    }

    void Usuwanie (int i){
        Imie.remove(i);
        Nazwisko.remove(i);
        Marka.remove(i);
        Model.remove(i);
        Rok.remove(i);
        Data_zakupu.remove(i);
    }
    void Aktualizacja (Integer i, String a, String b, String c, String d, Integer e, String f) {
        Imie.set(i, a);
        Nazwisko.set(i,b);
        Marka.set(i,c);
        Model.set(i,d);
        Rok.set(i,e);
        Data_zakupu.set(i,f);
    }

    void Szukanie1 (String nazwa, String atrybut) 
    {
        switch (nazwa)
        {   
            case "Imie":
            {   int j=  Imie.size(); 
                int licznik = 0; 
                for (int i = 0; i<j; i++){
                    String k = Imie.get(i);
                    if(k.equals(atrybut)){
                        System.out.println("Szukane Imie znajduje sie w rekordzie " +i);
                        licznik = licznik +1;
                    } 
                } 
                if (licznik==0){
                    System.out.println("brakuje wskazanej wartosci");
                }
            break;
            }

            case "Nazwisko":
            {   int j=  Nazwisko.size(); 
                int licznik = 0; 
                for (int i = 0; i<j; i++){
                    String k = Nazwisko.get(i);
                    if(k.equals(atrybut)){
                        System.out.println("Szukane Nazwisko znajduje sie w rekordzie " +i);
                        licznik = licznik +1;
                    } 
                } 
                if (licznik==0){
                    System.out.println("brakuje wskazanej wartosci");
                }
            break;  
            }

            case "Marka":
            {   int j=  Marka.size(); 
                int licznik = 0; 
                for (int i = 0; i<j; i++){
                    String k = Marka.get(i);
                    if(k.equals(atrybut)){
                        System.out.println("Szukane Marka znajduje sie w rekordzie " +i);
                        licznik = licznik +1;
                    } 
                } 
                if (licznik==0){
                    System.out.println("brakuje wskazanej wartosci");
                }
            break;
            }

            case "Model":
            {   int j=  Model.size(); 
                int licznik = 0; 
                for (int i = 0; i<j; i++){
                    String k = Model.get(i);
                    if(k.equals(atrybut)){
                        System.out.println("Szukane Model znajduje sie w rekordzie " +i);
                    licznik = licznik +1;
                    } 
                } 
                if (licznik==0){
                    System.out.println("brakuje wskazanej wartosci");
                }
            break;
            }

            case "Data_zakupu":
            {   int j=  Data_zakupu.size(); 
                int licznik = 0; 
                for (int i = 0; i<j; i++){
                    String k = Data_zakupu.get(i);
                    if(k.equals(atrybut)){
                        System.out.println("Szukane Data_zakupu znajduje sie w rekordzie " +i);
                        licznik = licznik +1;
                    } 
                } 
                if (licznik==0){
                    System.out.println("brakuje wskazanej wartosci");
            }
            break;
            }        
        }
    }
        
    void Szukanie2 (String nazwa, int atrybut) 
    {
        switch(nazwa) 
        {
            case "Rok":
            {   int j=  Data_zakupu.size(); 
                int licznik = 0; 
                for (int i = 0; i<j; i++){
                    int k = Rok.get(i);
                    if(k==atrybut){
                        System.out.println("Szukany Rok znajduje sie w rekordzie " +i);
                        licznik = licznik +1;
                    } 
                } 
                if (licznik==0){
                    System.out.println("brakuje wskazanej wartosci");
            }
            break;
            }

            case "Rekord":
            {   int j=  Rok.size(); ;
                if(atrybut >= j){
                    System.out.println("podany rekord nie istnieje");
                }
                else {       
                    String Imie1 = (String)Imie.get(atrybut);
                    String Nazwisko1 = (String)Nazwisko.get(atrybut);
                    String Model1 = (String)Model.get(atrybut);
                    String Marka1 = (String)Marka.get(atrybut);
                    int Rok1 = (int)Rok.get(atrybut);
                    String Data_zakupu1 = (String)Data_zakupu.get(atrybut);
                    System.out.println ("Wyszukano rekord: "+ atrybut + ": Imię: "+Imie1 + " Nazwisko: " + Nazwisko1 +" Model: "+ Model1 +"Marka: "+ Marka1 +"Rok: "+ Rok1 +"Data zakupu: "+ Data_zakupu1);
            }
            break;
            }
        }
    }

    void Zapis() throws FileNotFoundException {
        PrintWriter zapis = new PrintWriter("projekt.txt");
        for (int i = 0; i < Nazwisko.size() ; i++) {
            zapis.print(Imie.get(i) + " ");
            zapis.print(Nazwisko.get(i) + " ");
            zapis.print(Model.get(i) + " ");
            zapis.print(Marka.get(i) + " ");
            zapis.print(Rok.get(i) + " ");
            zapis.print(Data_zakupu.get(i) + "\n ");
        }
        zapis.close();
    }
}

class Main 
{
    public static void main(String[] args)throws FileNotFoundException
    {
        Komis komis=new Komis();  
        boolean wejscie = true;
        
    
        Scanner scann = new Scanner(System.in);
    
        while(wejscie == true)
        {
            System.out.println("Wpisz 1 jesli chcesz dodac rekord w bazie");
            System.out.println("Wpisz 2 jesli chcesz usunac rekord");
            System.out.println("Wpisz 3 jesli chcesz zaaktualizowac rekord");
            System.out.println("Wpisz 4 jesli chcesz przeszukac rekord");
            System.out.println("Wpisz 5 jesli chcesz zapisac do pliku");
            System.out.println("Wpisz 6 jesli chcesz wyjsc z programu");
            System.out.println("");

            Scanner scanner = new Scanner(System.in);
            int scannn= scanner.nextInt();
        
            switch(scannn)
            {
                case 1: 
                {
                    System.out.println("Podaj imię");
                    String a=scann.nextLine();
                    System.out.println("Podaj Nazwisko");
                    String b=scann.nextLine();
                    System.out.println("Podaj Marka");
                    String c=scann.nextLine();
                    System.out.println("Podaj Model");
                    String d=scann.nextLine();
                    System.out.println("Podaj Rok");
                    int e=scanner.nextInt();
                    System.out.println("Podaj Data_zakup");
                    String f=scann.nextLine();
                    int i = komis.Imie.size();

                    if (i<4 ) {
                        komis.Dodawanie(i,a,b,c,d,e,f);
                        String Imie1 = (String)komis.Imie.get(i);
                        String Nazwisko1 = (String)komis.Nazwisko.get(i);
                        String Model1 = (String)komis.Model.get(i);
                        String Marka1 = (String)komis.Marka.get(i);
                        int Rok1 = (int)komis.Rok.get(i);
                        String Data_zakupu1 = (String)komis.Data_zakupu.get(i);
                        System.out.println ("Dodano nowy rekord :"+ i+ ": Imię: "+Imie1 + " Nazwisko: " + Nazwisko1 +" Model: "+ Model1 +" Marka: "+ Marka1 +" Rok: "+ Rok1 +" Data zakupu: "+ Data_zakupu1);
                    }
                     else {
                        System.out.println("PRZEKROCZYLES LIMIT REKORDOW, TERAZ WYBIERZ LICZBE 2-6");
                        System.out.println("");
                    }
                break; 
                }
    
                case 2:
                {
                    System.out.println("Który rekord usunac? Pamietaj, ze rekordy numerowane sa od 0");
                    int i=scanner.nextInt();
                    komis.Usuwanie(i);
                    System.out.println ( komis.Imie);
                break;
                }

                case 3:
                {
                    System.out.println("Podaj rekord, ktory chcesz zaaktualizowac, pamietaj, ze rekordy numerowane sa od 0");
                    int i=scann.nextInt();
                    System.out.println("Podaj imie");
                    String a=scann.nextLine();
                    System.out.println("Podaj Nazwisko");
                    String b=scann.nextLine();
                    System.out.println("Podaj Marka");
                    String c=scann.nextLine();
                    System.out.println("Podaj Model");
                    String d=scann.nextLine();
                    System.out.println("Podaj Rok");
                    int e=scanner.nextInt();
                    System.out.println("Podaj Data_zakupu");
                    String f=scann.nextLine();
        
                    komis.Aktualizacja(i,a,b,c,d,e,f);

                    String Imie1 = (String)komis.Imie.get(i);
                    String Nazwisko1 = (String)komis.Nazwisko.get(i);
                    String Model1 = (String)komis.Model.get(i);
                    String Marka1 = (String)komis.Marka.get(i);
                    int Rok1 = (int)komis.Rok.get(i);
                    String Data_zakupu1 = (String)komis.Data_zakupu.get(i);
                    System.out.println ("Zaktualizowano rekord "+i+ ": Imię: "+Imie1 + " Nazwisko: " + Nazwisko1 +" Model: "+ Model1 +"Marka: "+ Marka1 +"Rok: "+ Rok1 +"Data zakupu: "+ Data_zakupu1);
                break; 
                }

                case 4:
                {
                    System.out.println("Wybierz liste, z ktorej chcesz szukac. Wybierz: Imie, Nazwisko, Marka, Model, Rok, Data_zakupu lub Rekord");
                    String nazwa = scann.nextLine();
                    if(nazwa.equals("Rok") || nazwa.equals("Rekord")){
                        System.out.println("Podaj wartosc: ");
                        int W = scanner.nextInt();
                        komis.Szukanie2(nazwa, W);
                    }
                    else {
                        System.out.println("Podaj wartosc: ");
                        String WW = scann.nextLine();
                        komis.Szukanie1(nazwa, WW);
                    }
                break;
                }

                case 5:
                {
                    komis.Zapis();
                break;
                }
    
                case 6:
                {
                wejscie = false;
                break;
                }

                default:
                {
                    System.out.println("blad, Wybierz liczbe 1-6");
                break;
                }
    
            }
        }
    }
}
2
  1. Nazwy zmiennych camel case czyli poprawnaNazwaZmiennej nie zaczynaj z wielkiej litery
  2. utwórz sobie record
record SamochodInfo(String imie, String nazwisko, String marka, String model, Integer rok, String dataZakupu){} 
// tutaj zastrzeżenie że powinno to być rozdzielone na 2 rekordy ale skoro to dla nauki to spoko nie będę się czepiać o imię i nazwisko  oraz do record-ów musisz mieć java 17
  1. Zmiana na tablice:
 SamochodInfo[] samochodInfos = new SamochodInfo[10]; // załóżmy że podstawowy rozmiar to 10 elementów tablicy

wówczas musisz śledzić ile elementów ma tablica w "dodawanie"
Dodawanie:

    void Dodawanie(Integer idx, String imie, String nazwisko, String marka, String model, Integer rok, String data) {
        samochodInfos[idx] = new SamochodInfo(imie, nazwisko, marka, model, rok, data);
    }
// oraz 

    void Usuwanie(int idx) {
        samochodInfos[idx] = null;
    }
  1. Utwórz zmienną
private static final int DOPUSZCZALNY_ROZMIAR = 4; 

zamiast pisać if (i < 4)

  1. szuaknie możesz zastąpić czymś bardziej "advanced"
// dodaj w klasie Komis takie pole
Map<String, Function<SamochodInfo, String>> szukaneWartosci =
            Map.of(
                    "Imie", SamochodInfo::imie,
                    "Nazwisko", SamochodInfo::nazwisko,
                    "Marka", SamochodInfo::marka,
                    "Model", SamochodInfo::model,
                    "Data_zakupu", SamochodInfo::dataZakupu
            );

// wówczas:

    void Szukanie1(String nazwa, String atrybut) {

        var wartosc = szukaneWartosci.get(atrybut);
        if (wartosc != null){
            Arrays.stream(samochodInfos)
                    .filter(Objects::nonNull)
                    .filter(samochodInfo -> wartosc.apply(samochodInfo).equals(nazwa))
                    .findFirst()
                    .ifPresentOrElse(
                            samochodInfo -> System.out.println("Znaleziono samochod: " + samochodInfo),
                            () -> System.out.println("Nie znaleziono samochodu")
                    );
        }
        // ktoś próbuje szukać po czymś nieznanym np xxx obsłóż to
        
    }
  1. popraw nazwy metod - najpierw mała litera

  2. Zapisa możesz zastąpić

    void Zapis() throws FileNotFoundException {
        PrintWriter zapis = new PrintWriter("projekt.txt");
        final String baza = Arrays.stream(samochodInfos)
                .map(info -> info.imie() + " " + info.nazwisko() + " " + info.marka() + " "
                        + info.model() + " " + info.rok() + " " + info.dataZakupu())
                .collect(Collectors.joining("\n"));
        zapis.print(baza);
        zapis.flush();
        zapis.close();
    }
  1. Pobaw się kodem -postaraj się zrozumieć, nie kopiuj bezmyślnie 10x tego samego kawałka kodu - jeśli jest Ci potrzebny to utwórz do tego nową metodę i zacznij używać IDE bo masz sporo ostrzeżeń
0
aolo23 napisał(a):
  1. utwórz sobie record

Lub klasę.
Tak, tego BARDZO ten kod potrzebuje.
Widząc powtarzalną grupę danych, nawet "początkującemu programiście" ma się włączyć w głowie rozwiązanie.

Mikołaj Kowalczyk napisał(a):

napisałem taki kod za pomocą list, ale muszę oddać projekt za pomocą tablic, próbuję sam ale cały czas coś mi nie działa. Pomóżcie mi co mam zmienić, żeby zamiast list wprowadzić tablice jednowymiarową, jestem początkujący programistą.



 
    List<String> Imie = new ArrayList<>();
    List<String> Nazwisko = new ArrayList<>();
    List<String> Marka = new ArrayList<>();
    List<String> Model = new ArrayList<>();
    List<Integer> Rok = new ArrayList<>();
    List<String> Data_zakupu = new ArrayList<>();  
    
> ```

Powiedziałbym, że nie da się tego tematu napisać bardziej brzydko, te siedem równoległych list to się w jakimś koszmarze może przyśnić
Milion linii kodu, zamiast to zrobić dobrze.

Takie ćwiczenie jest antydydaktyczne, lepiej nie robić nic, niż uczyć się w tak fatalny sposób.
Wg jakiego kursu / ksiazki idziesz ? Albo coś pominąłeś, albo materiał wyrzuć do kosza.

0

A nie lepiej np.

public class Komis
private String imie;
private String nazwisko //getery setery equals() toString```


```public class Wypozyczalnia

 private static final int MAX_CAR = 4;

    private Komis[] komis = new Komis[MAX_CAR];
    private int carNumber = 0;

    void add(Komis rent) {
        if (carNumber < MAX_CAR) {
            komis[carNumber] = rent;
            carNumber++;
        }
public Komis rentCar(){
System.out.print("Podaj Imie");
String imie =scaner.nextLine();
itd

return new Komis(imie,.....

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