Java 在arraylist中检查并添加浮点值

Java 在arraylist中检查并添加浮点值,java,arraylist,Java,Arraylist,您好,我是java新手,正在尝试理解arraylist。我使用的是Arraylist和DummyValue。我从列表中读取值并更新dummyValues中的浮点值。我的代码片段如下 ` publicstaticvoidgeneratevalues(ArrayList-theList){ 对于(int j=0;j

您好,我是java新手,正在尝试理解arraylist。我使用的是Arraylist和DummyValue。我从列表中读取值并更新dummyValues中的浮点值。我的代码片段如下 `

publicstaticvoidgeneratevalues(ArrayList-theList){
对于(int j=0;j
在第一个条件中,我尝试将值添加到ArrayList dummyValues,在第二个条件中,如果大小dummyValues大于0,则只更新dummyValues的值。我考虑过这种方法以避免复制

但是,当我执行它时,我得到以下错误:

java.lang.IndexOutOfBoundsException:索引1无效,大小为1

错误发生在这里
dummyValues.set(j,theList.get(j))


我知道这是一个微不足道的概念,任何形式的帮助都是值得感激的

请考虑,如果dummyList为空,当j为0时,它会从列表中添加一个元素,但当j为1时,您正试图从dummyList将元素设置在位置1。但此时,dummyList只有一个元素,位于位置0。这就是为什么会出现错误

一种解决方案是确保创建dummyList,初始容量(或大小,如果您愿意)为列表的大小

 public static void generateValues(ArrayList<Float> theList) {

 for (int j = 0; j < theList.size(); j++) {
     if (dummyValues.size()==0){
             dummyValues = new ArrayList<>(theList.size());
             dummyValues.add(j, theList.get(j));

      } else 
            dummyValues.set(j, theList.get(j));
   }     
publicstaticvoidgeneratevalues(ArrayList-theList){
对于(int j=0;j

}

考虑如果dummyList为空,当j为0时,它会从列表中添加一个元素,但当j为1时,您试图从dummyList中将元素设置在位置1上。但此时,dummyList只有一个元素,位于位置0。这就是为什么会出现错误

一种解决方案是确保创建dummyList,初始容量(或大小,如果您愿意)为列表的大小

 public static void generateValues(ArrayList<Float> theList) {

 for (int j = 0; j < theList.size(); j++) {
     if (dummyValues.size()==0){
             dummyValues = new ArrayList<>(theList.size());
             dummyValues.add(j, theList.get(j));

      } else 
            dummyValues.set(j, theList.get(j));
   }     
publicstaticvoidgeneratevalues(ArrayList-theList){
对于(int j=0;j

}

我建议进行这种改进。将您的方法更改为:

public static void generateValues(ArrayList<Float> theList) {

 for (int j = 0; j < theList.size(); j++) {
     if (dummyValues.size()==0){
             dummyValues.add(j, theList.get(j));
       }
      else if(dummyValues.size()==theList.size()){
            dummyValues.set(j, theList.get(j));
               }     
     else{
         dummyValues.add(theList.get(j));
    }
}

试试看,让我知道它是否适合您的需要。

我建议这项改进。将您的方法更改为:

public static void generateValues(ArrayList<Float> theList) {

 for (int j = 0; j < theList.size(); j++) {
     if (dummyValues.size()==0){
             dummyValues.add(j, theList.get(j));
       }
      else if(dummyValues.size()==theList.size()){
            dummyValues.set(j, theList.get(j));
               }     
     else{
         dummyValues.add(theList.get(j));
    }
}

试试看,让我知道它是否适合您的需要。

您还没有考虑这样一个事实,即如果
dummyValues
中只有一个元素,它将传递
dummyValues.size()==0)
,但由于ArrayList从0开始计数,因此索引将仅为0。因此,如果我们位于列表的索引1,它将抛出有问题的异常


您可能需要为
dummyValues.size()==1)
添加另一个条件(仅此而已:)

您没有考虑这样一个事实,即如果
dummyValues
中只有一个元素,它将传递
dummyValues.size()==0)
,但由于ArrayList开始从0开始计数,它的索引将仅为0。因此,如果我们位于列表的索引1,它将抛出有问题的异常

您可能需要为
dummyValues.size()==1)添加另一个条件。
仅此而已:)

  • 确保变量和参数已初始化

    dummyValues = new ArrayList<Float> ();
    
    dummyValues=newarraylist();
    
  • 然后,您可以在代码中执行任何操作之前执行此检查-

     public void generateValues(ArrayList<Float> theList) {
    
    if (theList.size() > 0) {
        for (int j = 0; j < theList.size(); j++) {
            if (dummyValues.size() == 0) {
                dummyValues.add(theList.get(j));
            } else {
                try {
                    if (dummyValues.get(j) != null) {
                        dummyValues.set(j, theList.get(j));
                    }
                } catch (IndexOutOfBoundsException e) {
                    //no element present here .
                }
            }
    
        }
      }
    
    }
    
    public void generateValue(数组列表){
    如果(列表大小()>0){
    对于(int j=0;j
这将检查列表是否有任何值,然后启动循环。如果
dummyValues
为空,则添加第0个元素或继续用列表值替换dummyValues

试试看,让我知道它是否适合您。

  • 确保变量和参数已初始化

    dummyValues = new ArrayList<Float> ();
    
    dummyValues=newarraylist();
    
  • 然后,您可以在代码中执行任何操作之前执行此检查-

     public void generateValues(ArrayList<Float> theList) {
    
    if (theList.size() > 0) {
        for (int j = 0; j < theList.size(); j++) {
            if (dummyValues.size() == 0) {
                dummyValues.add(theList.get(j));
            } else {
                try {
                    if (dummyValues.get(j) != null) {
                        dummyValues.set(j, theList.get(j));
                    }
                } catch (IndexOutOfBoundsException e) {
                    //no element present here .
                }
            }
    
        }
      }
    
    }
    
    public void generateValue(数组列表){
    如果(列表大小()>0){
    对于(int j=0;j
这将检查列表是否有任何值,然后启动循环。如果
dummyValues
为空,则添加第0个元素或继续用列表值替换dummyValues


请尝试一下,让我知道它是否适合您。

您确定
dummvalue
list
的大小相同吗?否则,您可能会忽略值,或者得到异常