【问题标题】:Error when calling insertionsort method and how to print an arraylist调用插入排序方法时出错以及如何打印数组列表
【发布时间】:2013-10-06 19:43:47
【问题描述】:

我创建了一个程序,它将温度(双精度)和日期(字符串)存储在数组列表中,然后使用可比较接口和插入排序对数组列表进行排序。现在我剩下的就是调用插入排序方法并打印出数组列表的原始顺序和排序顺序。但是,当我调用 insertsort 方法时,它会给我一个错误,指出“方法声明无效;需要返回类型”。为什么我会收到此错误?我的打印语句也可以正确打印出原始数组列表吗?我将如何更新它以打印出排序的数组列表?或者我可以从 insertsort 方法中打印出来吗?

这是我的代码:

import java.io.*;
import java.util.Scanner;
import java.util.Arrays;
import java.util.ArrayList;


public class DailyTemperature implements Comparable<DailyTemperature>
{
     //variables
    private Double temperature;
    private String day;

    //getTemp & setTemp methods
    public double getTemp()
    {
      return temperature;
    }

    public void setTemp(double newTemp)
    {
      temperature = newTemp;
    }

    //getDay & setTEmp methods
    public String getDay()
    {
      return day;
    }

    public void setDay(String newDay)
    {
      day = newDay;
    }


    public DailyTemperature(String day, double temperature) 
    {
      this.day = day;
      this.temperature = temperature;
    }

    public int compareTo(DailyTemperature other) 
    {
        if (temperature < other.temperature) return -1;
        if (temperature == other.temperature) return 0;
        return 1;
    }

    public String toString() 
    {
        return("Day of Week" + this.getDay() +
        "Temperature" + this.getTemp());
    }


}



import java.io.*;
import java.util.Scanner;
import java.util.ArrayList;

public class DailyTemperatureList 
{
    public static void main (String [] args) 
    {

    ArrayList<DailyTemperature> dailytemps = new ArrayList<DailyTemperature>();

    dailytemps.add(new DailyTemperature("Mon", 87.1));
    dailytemps.add(new DailyTemperature("Tue", 88.3));
    dailytemps.add(new DailyTemperature("Wed", 81.2));
    dailytemps.add(new DailyTemperature("Thu", 84.0));
    dailytemps.add(new DailyTemperature("Fri", 76.3));
   }

   public static <DailyTemperature extends Comparable<? super DailyTemperature>>
   void insertionSort(ArrayList<DailyTemperature> dailytemps)
   {
       DailyTemperature temp = null;
       int position = 0;

       //loop from 2nd element on
       for (int i = 1; i < dailytemps.size(); i++)
       {
           temp = dailytemps.get(i);
           position = i;

           while ( 0 < position && temp.compareTo(dailytemps.get(position - 1 )) < 0)
           {
               dailytemps.set(position, dailytemps.get(position - 1));
               position--;
           }
            dailytemps.set(position,temp);
        }
    }

    insertionSort(ArrayList<DailyTemperature> dailytemps);
    System.out.println( dailytemps.toString() );





}

【问题讨论】:

  • @WilliamGaul。哼!那不是返回类型,那是类型参数声明。方法的返回类型仅为void
  • 首先,在调用一个方法时,你没有给出你传递的参数的类型。它是从形式参数类型自动推断出来的。其次,您必须从方法内部调用该方法,例如main。目前,您正在从所有方法之外调用它。您不能在类中直接包含语句。
  • @RohitJain 哎呀...没有看到下一行的void。我想知道为什么“返回类型”的格式如此奇怪:P
  • 好的,我想你想把对insertionSort的调用和它下面的行添加到main方法中。也从该行中删除 ArrayList&lt;DailyTemperature&gt;。并从insertSort的签名中删除内的部分(static之后但void之前的部分)。应该这样做。
  • @DavidWallace 我修复了它,但它没有打印出排序后的数组它打印出随机顺序:这是输出“[星期几:星期五温度:76.3,星期几:星期四温度:84.0,星期几:星期三温度:81.2,星期几:星期二温度:88.3,星期几:星期一温度:87.1]"

标签: java methods arraylist insertion-sort


【解决方案1】:

但是,当我调用 insertsort 方法时,它给了我一个错误,指出“方法声明无效;需要返回类型”。为什么我会收到此错误消息?

您在 DailyTemperatureList 类内部调用了 insertSort(),但在任何无法编译的方法外部调用。 我将调用移到 main() 方法中,以便它编译,见下文。

我的打印语句打印出原始数组列表是否正确?我将如何更新它以打印出排序的数组列表?或者我可以从 insertsort 方法中打印出来吗?

调用insertionSort()前打印出原始列表,排序后打印出排序后的列表:

System.out.println( "original list:" );
System.out.println( dailytemps.toString() );

insertionSort( dailytemps);
System.out.println( "sorted list:" );

输出:

original list: [Day of WeekMonTemperature87.1, Day of WeekTueTemperature88.3, Day of WeekWedTemperature81.2, Day of WeekThuTemperature84.0, Day of WeekFriTemperature76.3] 

sorted list: [Day of WeekFriTemperature76.3, Day of WeekWedTemperature81.2, Day of WeekThuTemperature84.0, Day of WeekMonTemperature87.1, Day of WeekTueTemperature88.3]

更正 DailyTemperatureList 类:

import java.io.*;
import java.util.Collections;
import java.util.Scanner;
import java.util.ArrayList;

public class DailyTemperatureList
{
  public static void main (String [] args)
  {

    ArrayList<DailyTemperature> dailytemps = new ArrayList<DailyTemperature>();

    dailytemps.add(new DailyTemperature("Mon", 87.1));
    dailytemps.add(new DailyTemperature("Tue", 88.3));
    dailytemps.add(new DailyTemperature("Wed", 81.2));
    dailytemps.add(new DailyTemperature("Thu", 84.0));
    dailytemps.add(new DailyTemperature("Fri", 76.3));

    System.out.println( "original list:" );
    System.out.println( dailytemps.toString() );

    insertionSort( dailytemps);
    System.out.println( "sorted list:" );
    System.out.println( dailytemps.toString() );



  }

  //public static <DailyTemperature extends Comparable<? super DailyTemperature>>
  static void insertionSort(ArrayList<DailyTemperature> dailytemps)
  {
    DailyTemperature temp = null;
    int position = 0;

    //loop from 2nd element on
    for (int i = 1; i < dailytemps.size(); i++)
    {
      temp = dailytemps.get(i);
      position = i;

      while ( 0 < position && temp.compareTo(dailytemps.get(position - 1 )) < 0)
      {
        dailytemps.set(position, dailytemps.get(position - 1));
        position--;
      }
      dailytemps.set(position,temp);
    }
  }






}

【讨论】:

  • 非常感谢,它成功了!我能问一下它对你有什么作用吗?因为当我调用将调用方法和打印语句移动到主要方法时,我得到了这个命令:[星期几:星期五温度:76.3,星期几:星期四温度:84.0,星期几:星期三温度:81.2,星期几:星期二温度:88.3,星期几:星期一温度:87.1]" - 这不是原始顺序或排序顺序
  • 嗯,不知道,你应该得到一个排序列表。您似乎打印了原始列表,但顺序相反。您确定您没有更改任何其他内容,例如排序算法。还是 compareTo() 方法?
  • 我不确定这是否重要,但我从 DailyTemperature 类中获取了 Comparable 的工具,并且它起作用了。但是当我重新添加它时,我收到了我之前得到的输出。现在我把它拿出来了,我仍然收到同样的错误输出。
  • 这一行做了什么:Collections.sort(dailytemps);?这一行出错了。
  • 哦,对不起,它什么也没做,我只是在测试它,忘记删除它。我会编辑帖子并将其删除。
猜你喜欢
  • 2018-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-21
  • 1970-01-01
  • 2021-12-12
  • 2016-06-30
相关资源
最近更新 更多