在java中按总和对输出排序
我写了一个程序,从一个有数百组数字(每组有20个数字)的文件中读取数据。 该程序的目的是生成每个集合的和,偶数的和,奇数的和 这是我的密码:在java中按总和对输出排序,java,Java,我写了一个程序,从一个有数百组数字(每组有20个数字)的文件中读取数据。 该程序的目的是生成每个集合的和,偶数的和,奇数的和 这是我的密码: public static void main(String args[]) { System.out.println(String.format("%-10s%-10s%-10s", "sum", "even", "odd")); try { FileInputStream fstream =
public static void main(String args[])
{
System.out.println(String.format("%-10s%-10s%-10s", "sum", "even", "odd"));
try
{
FileInputStream fstream = new FileInputStream("data.txt");
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
while ((strLine = br.readLine()) != null) {
String[] numberStrs = strLine.split("\t");
int[] numbers = new int[numberStrs.length];
for(int i = 0;i < numberStrs.length;i++)
{
numbers[i] = Integer.parseInt(numberStrs[i]);
//System.out.println(numbers[i]);
}
int sumTotal = sum(numbers);
for (int j =0; j<numbers.length;j++)
{
if (isEven(numbers[j]) == true)
{
evenCounter++;
}
else
{
oddCounter++;
}
}
System.out.println(String.format("%-10s%-10s%-10s", sumTotal, evenCounter, oddCounter + "\n");
}
in.close();
}catch (Exception e){//Catch exception if any
System.err.println("Error: " + e.getMessage());
}
}
我想要的是对总和进行排序,并得到:
sum odd even
120 21 5
404 4 10
为了排序,您必须将计算出的数据存储在某个位置,而不是动态打印。 您可以将它们存储在一个3xn数组中,编写一个比较器,只比较其中的一个维度,然后使用比较器对数组进行排序 例如:
sum odd even
404 4 10
120 21 5
int[][] arr = new int[N][3];
// populate arr with data here
Arrays.sort(arr, new Comparator<int[]>(){
@Override
public int compare(int[] o1, int[] o2) {
return o1[0] - o2[0];
}
});
int[]arr=newint[N][3];
//在此处用数据填充arr
sort(arr,新的比较器(){
@凌驾
公共int比较(int[]o1,int[]o2){
返回o1[0]-o2[0];
}
});
您的数据需要存储,以便以后可以对其进行排序。最好的方法是设计一个类,负责:
- 存储数据
- 分类
- 维护总和、事件和奇数计数的计数
- 将自身表示为字符串
public class Sum implements Comparable<Sum>
{
private int sumTotal;
private int evenCount;
private int oddCount;
public void addNumber(int n)
{
sumTotal += n;
if ((n & 0x1) == 0x1)
{
oddCount++;
}
else
{
evenCount++;
}
}
@Override
public int compareTo(Sum other)
{
return Integer.compare(sumTotal, other.sumTotal);
}
@Override
public String toString()
{
return String.format("%-10s%-10s%-10s", sumTotal, evenCount, oddCount);
}
}
公共类和实现可比较
{
私人总收入;
私人帐户;
私人帐户;
公共无效地址编号(int n)
{
sumTotal+=n;
如果((n&0x1)=0x1)
{
oddCount++;
}
其他的
{
evenCount++;
}
}
@凌驾
公共整数比较(和其他)
{
返回整数.compare(sumTotal,other.sumTotal);
}
@凌驾
公共字符串toString()
{
返回String.format(“%-10s%-10s%-10s”,sumTotal,evenCount,oddCount);
}
}
以及您的修订代码:
public static void main(String[] args)
{
System.out.println(String.format("%-10s%-10s%-10s", "sum", "even",
"odd"));
try
{
// The maintained sum list
List<Sum> sumList = new ArrayList<Sum>();
InputStream fstream = new FileInputStream("data.txt");
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
while ((strLine = br.readLine()) != null)
{
// Prepare to insert a new sum object
Sum newSum = new Sum();
String[] numberStrs = strLine.split("\t");
for (String numberStr : numberStrs)
{
// The sum object manages its own tallies
newSum.addNumber(Integer.parseInt(numberStr));
}
// Append the new object to the list
sumList.add(newSum);
}
in.close();
// Sort the list
Collections.sort(sumList);
// Print the list
for (Sum sum : sumList)
{
/*
* The sum object is responsible for generating its own string
* representation
*/
System.out.println(sum);
}
}
catch (Exception e)
{
// Catch exception if any
System.err.println("Error: " + e.getMessage());
}
}
publicstaticvoidmain(字符串[]args)
{
System.out.println(String.format(“%-10s%-10s%-10s”,“sum”,“偶数”),
"单数);;
尝试
{
//维护的总和列表
List sumList=new ArrayList();
InputStream fstream=新文件InputStream(“data.txt”);
DataInputStream in=新的DataInputStream(fstream);
BufferedReader br=新的BufferedReader(新的InputStreamReader(in));
弦斯特林;
而((strLine=br.readLine())!=null)
{
//准备插入新的总和对象
Sum newSum=新的Sum();
字符串[]numberStrs=strLine.split(“\t”);
for(字符串numberStr:numberStrs)
{
//sum对象管理自己的计数
addNumber(Integer.parseInt(numberStr));
}
//将新对象附加到列表中
sumList.add(newSum);
}
in.close();
//对列表排序
Collections.sort(sumList);
//打印列表
for(总和:sumList)
{
/*
*sum对象负责生成自己的字符串
*代表
*/
系统输出打印项数(总和);
}
}
捕获(例外e)
{
//捕获异常(如果有)
System.err.println(“错误:+e.getMessage());
}
}
您可以拥有一个集合类,在其中保存总和、赔率和偶数。您保存一个集合数组,然后可以按和对其排序(您可以编写一个简单的比较器),然后显示它。好吧。。。排序,而不是立即打印。如果我将它们放入数组中,我如何只能对和进行排序,并随着和顺序的改变而移动相关的奇数和偶数。但是,我如何只能对和进行排序,并随着和顺序的改变而移动相关的奇数和偶数(改变)