当前位置: 首页 > 知识库问答 >
问题:

Java数组:无法将新值存储到数组中

蔚学林
2023-03-14
public class arDroneFrame extends javax.swing.JFrame implements Runnable, DroneStatusChangeListener, NavDataListener {

      private String text; // string for speech
      private static final long CONNECT_TIMEOUT = 10000;
      public ARDrone drone;
      public NavData data;
      public Timer timer = new Timer();
      public int batteryGraphic=0;
      public int [] arrayBatt = new int[9999999];

      public arDroneFrame(String text) {
          this.text=text;          
      }

      public arDroneFrame() {
         initComponents();             
         initDrone();       
      }

      private void initDrone() {
        try {
          drone = new ARDrone();
          data = new NavData();          
        } catch (UnknownHostException ex) {
        return;     
      } 
        videoDrone.setDrone(drone);        
        drone.addNavDataListener(this);
}

     public void navDataReceived(NavData nd) { 
         getNavData(nd);    
         int battery = nd.getBattery();  
         cmdListOK.jlblBatteryLevelValue.setText(battery + " %"); 
         //JLabel can get updated & always display new battery values 
      }

     public void getNavData(NavData nd){
          for(int i=0;i<arrayBatt.length;i++){
              batteryGraphic= nd.getBattery();
              arrayBatt[i] = batteryGraphic;
              System.err.println("This is stored battery values : " + arrayBatt[i] + "   " + i + "\n");
          }
     }
}

     public static void main(String args[]) {
          java.awt.EventQueue.invokeLater(new Runnable() {
             public void run() {

              String text = "Welcome!";
              arDroneFrame freeTTS = new arDroneFrame(text);
              freeTTS.speak();

              new arDroneFrame().setVisible(true);
              }
      });
   }

结果:

This is stored battery values : 39   0

This is stored battery values : 39   1

This is stored battery values : 39   2

This is stored battery values : 39   3

This is stored battery values : 39   4

This is stored battery values : 39   5

共有1个答案

别宏盛
2023-03-14

问题就出在这种方法上:

public void getNavData(NavData nd){
      for (int batteryValue : arrayBatt){
           arrayBatt[i] = nd.getBattery();
               System.err.println("This is stored battery values : " + arrayBatt[i] + "   " + i + "\n");
      }
   }

通过传递navdata实例来调用此方法。这意味着,ndnd.getBattery()包含的任何值都被分配给数组中的每个索引,因为循环在电池数组上进行交互。

您应该做的是将循环移到getnavdata(navdatand)方法之外,并为每个调用传递一个NavData的新实例。当您将其与下面的ArrayList建议结合时,您应该有一个不同电池值的动态数组

public int [] arrayBatt = new int[10000];
ArrayList<Integer> batteryArray = new ArrayList <Integer>();

您可以通过调用以下命令将项目添加到列表中:

batteryArray.add(item);

这个解决方案的好处是:

  1. batteryArray大小在幕后处理
  2. 数组的大小很容易检索,元素也很容易检索
  3. ArrayList是一种非常快速的存储结构。
public void getNavData(NavData nd){
  for (int batteryValue : arrayBatt){
      arrayBatt[i] = nd.getBattery();
      System.err.println("This is stored battery values : " + arrayBatt[i] + "   " + i + "\n");
  }
 类似资料:
  • 问题内容: 我有一项通过REST为我提供属性的服务。现在,我想将身体解组为属性结构。请查看此操场示例:单击。当我只有一个财产时,可以轻松将其编组为。但是,服务器发出的ACTUAL响应有所不同。我要解组的实际响应是这样的: 不幸的是,我不知道如何解组。有人可以指出正确的方向吗? 问题答案: 您需要解组一片属性:http : //play.golang.org/p/eRgjfBHypH

  • 问题内容: 有没有一种方法可以将数组存储到mysql字段中?我正在创建一个评论评分系统,因此我想存储用户ID数组以防止进行多次投票。我将创建一个新表,其中包含评论ID和对此评论进行投票的用户ID数组。然后,我将加入评论表和该表,并检查当前用户ID是否存在于选民数组或注释中。如果是这样,将禁用投票图标。我想我会避免以这种方式在循环中使用mysql查询。 您碰巧知道更好的方法吗? 问题答案: 您始终可

  • 问题内容: 我知道这应该是简单的,我可能正直盯着问题,但我再次陷入困境,需要代码专家的帮助。 我试图从jdbc的一列中取出一行,并将它们放入数组中。 我这样做如下: creatConnection是已经定义的方法,可以执行其明显的工作。我在创建另一个结果集的同时创建了我的结果集,我将该列的字符串存储到一个数组中。然后打印出来以备不时之需。还要确保它在那里。 问题在于其将整个列存储到contactL

  • 问题内容: 如何将arrayList存储到Java中的数组中? 问题答案: 那取决于你想要什么: 现在,如果要将列表存储在数组中,则可以执行以下操作之一: 但是,如果要将列表 项 放在数组中,请执行以下一项操作: 参考:

  • 问题内容: OK,所以我有一个JList,并且内容提供了一个数组。我知道如何向数组中添加元素,但是我想知道如何刷新JList …还是有可能?我尝试了Google。:\ 有任何想法吗? 谢谢。 问题答案: 一种好的方法是创建一个ListModel来为您管理数据并处理更新。 就像是: 然后,您可以简单地通过列表模型进行更改,例如

  • 问题内容: 好吧,我写了一些代码,我所做的只是for循环,但是更改了我调用的方法。我尝试使用for循环,这样会更整洁(出于好奇,看是否可以完成),但是当我这样做时它不会编译,因为它无法识别其中的项目我认为将数组作为一种方法。这就是我所拥有的: 当我尝试编译时,我得到 (它引用while循环中的第一条语句) 所以,我认为这可能是因为我将其设置为String类型的Array?有方法类型吗?这是可能吗?