Я новичок в Java и программировании в целом, поэтому извините, если я путаю некоторые концепции, в моем коде у меня есть объект с именем cr, который представляет собой массив в построенном классе Menu из класса ControllerRoute, этот экземпляр мне нужно передать методу в классе UpdateAndDelete, который выполняет процесс обновления и удаления CRUD, но код в методе читается не как массив, а как объект ControllerRoute. Я пробовал использовать разные имена в параметре и использовать super.cr, но у меня это не сработало.

Меню предназначено для использования различных действий CRUD, но вот часть обновления, которая вызывает проблемы.

import javax.swing.JOptionPane;
import java.io.File;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
public class Menu{
private ControllerRoute cr = new ControllerRoute(100);
UpdateAndDelete ud = new UpdateAndDelete();

   public void updateRoute(){
      ControllerRoute ur = new ControllerRoute(0);
      int id;
      id = Integer.parseInt(JOptionPane.showInputDialog(null,"Enter an Id"));
      ud.updateRoutes(id, cr);
      }
}

Route наряду с ControllerRoute — это классы, используемые для создания массива и откуда приходит объект cr.

public class Route{
   private int id;
   private String name;
   
   public Route () {}
   
   public Route(int id, String name){
      this.id = id;
      this.name = name;
   }
}
public class ControllerRoute extends Menu{
   Route[] routes;
   
   public ControllerRoute(int size){
      routes = new Route[size];
   }
}

UpdateAndDelete — это метод, который запрашивает cr для выполнения процесса обновления и удаления частей массива. Вот где в каждом месте, где есть cr, появляется ошибка, потому что он либо не может найти символ, либо не может распознать cr как массив.

import javax.swing.JOptionPane;
public class UpdateAndDelete{

   public Route updateRoutes(int id, ControllerRoute cr){
      int pos = -1;
      String nwname;
      for(int i=0; i<cr.length; i++){
           if(id == cr[i].getId()){
            pos=i;
           }
      }
      return null;
   }
}

Ошибки найдены:

ошибка: не удается найти символ в строке: for(int i=0; i

UpdateAndDelete.java:14: ошибка: требуется массив, но ControllerRoute найден в строках: если (id == cr[i].getId()){

Cr[pos] = новый маршрут (id, nwname);

Сначала я попытался изменить параметр, либо имя массива, либо тип рядом с ним между int, String, Array. Route[] и последний — ControllerRoute.

После этого я попытался использовать super.cr, чтобы посмотреть, смогу ли я взять его прямо из меню, но это дало проблемы с такими методами, как .length.

import javax.swing.JOptionPane;
public class UpdateAndDelete extends Menu{

   public Route updateRoutes(int id, ControllerRoute cr){
      int pos = -1;
      String nwname;
      for(int i=0; i<super.cr.length; i++){
           if(id == super.cr[i].getId()){
            pos=i;
           }
      }
      return null;
   }
}

Это дает те же ошибки.

Другая вещь, которую я пробовал с super, заключалась в попытке создать другой массив в UpdateAndDelete и использовать super.cr для преобразования его значения в него (пример: pj = super.cr), но выдавало ошибку, что массив не совместим с ControllerRoute

0
HIk 25 Ноя 2022 в 20:48
Несколько общих комментариев, прежде чем я углублюсь в это: 1. Приличный отступ помог бы, код трудно читать, и поэтому трудно вам помочь. 2. Здесь довольно много кода, на который можно посмотреть, и если его можно сократить, это тоже будет полезно. По крайней мере, попробуйте минимально воспроизводимый пример, чтобы люди могли помочь вам быстрее.
 – 
markspace
25 Ноя 2022 в 20:57
Итак, первые две ошибки — это просто синтаксические ошибки/опечатки. cr не является массивом. Таким образом, первая строка не имеет смысла, а вторая строка cr[i].getId() просто неверна: cr.getId() просто уберите квадратные скобки []. Похоже, вы скопировали какой-то код из другого места, в котором использовались массивы, и вы не понимаете, что копируете.
 – 
markspace
25 Ноя 2022 в 21:03

1 ответ

ControllerRoute не является массивом. у него есть атрибут, который является массивом. попробуйте написать геттер для маршрутов в ControllerRoute и использовать его для получения массива. ud.updateRoutes(id, cr.getRoutes());

0
Nojan 25 Ноя 2022 в 21:03