gpt4 book ai didi

java - 比较无法正常工作

转载 作者:行者123 更新时间:2023-12-01 23:47:31 25 4
gpt4 key购买 nike

我想对 input.txt 文件进行排序并将其保存在 output.txt 中。我使用插入排序算法。现在我的问题是:compareTo 方法似乎工作不正确(或者至少不是我想要的工作方式)。它返回大于 1 的整数,因此该算法实际上并不特别适用于负数。希望大家能帮我解决这个问题,谢谢!

这是我的代码:

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

class Isort
{
public static void main(String[] args)
{
if(args[0].equals("int"))
{
ArrayList<Integer> array = new ArrayList<Integer>();
sort(array, args[1], args[2]);
}
else if(args[0].equals("float"))
{
ArrayList<Float> array = new ArrayList<Float>();
sort(array, args[1], args[2]);
}
else if(args[0].equals("String"))
{
ArrayList<String> array = new ArrayList<String>();
sort(array, args[1], args[2]);
}
else
{
//do nothing
}
}
public static <T extends Comparable<T>> void sort(ArrayList<T> array, String input, String output)
{
try
{
File file = new File(input);
BufferedReader reader = new BufferedReader(new FileReader(file));
reader.mark((int)file.length() + 1);
int count = 0;
while(reader.readLine() != null)
{
count++;
}
reader.reset();
for(int i = 0; i<count; i++)
{
array.add((T)(reader.readLine()));
}
reader.close();

int j;
T temp;
for(int i = 1; i < array.size(); i++)
{
j = i;
while(j > 0 && array.get(j-1).compareTo(array.get(j)) > 0)
{
temp = array.get(j);
array.set(j,array.get(j-1));
array.set(j-1,temp);
j -= 1;
System.out.println(array);
}
}
PrintWriter writer = new PrintWriter(output);
for(int i = 0; i<array.size(); i++)
{
writer.write(String.valueOf(array.get(i)));
writer.write(System.getProperty ("line.separator"));
}
writer.flush();
writer.close();
}
catch(FileNotFoundException e)
{

}
catch(IOException e)
{
e.printStackTrace();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}

最佳答案

我相信您对泛型的使用感到困惑。您正在制作通用ArrayListsInteger , LongString 。然后,您正在阅读一行文本并尝试将其转换为 T .

由于类型删除,这不会在运行时执行任何操作。在上述所有情况(int、long 和 string)中,您将传递 ArrayList<Object>并添加 String到列表中。当您阅读 String从文件中来看,除了将其转换为 Object 之外,转换不会执行任何操作。其中String已经是了。所以除非compareToString符合您对 int 的要求和long这是行不通的。

回复评论...

这就是重点。转换到T或者在这种情况下真正使用泛型并不能满足您的需要。在所有情况下,您都在阅读和比较 String 。相反,您需要三种方法 readInt , readLongreadString并根据您的期望调用适当的电话。一种选择是使用 readNextValue 接口(interface)并根据情况传入适当的实现。

关于java - 比较无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16811588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com