给定一组n个正整数,根据各位数字之和从小到大进行排序。

数组排序
描述
给定一组n个正整数,根据各位数字之和从小到大进行排序。
输入
输入数据有多组,每组数据占一行,每行的第一个数正整数n,表示整数个数,后面接n个正整数。当n为0时,不作任何处理,输入结束。
输出
输出每组要求下原始数据排序的结果。
样例输入
2 1 2
3 121 10 111
0
样例输出
1 2
10 111 121

提示:创建一个数据对象Data,该对象有两个成员变量,一个为数据,另外一个为数据的各位数字和,定义一个计算数字和方法,在构造方法中调用该计算方法获得和然后赋值给成员变量。在主程序源文件中的类中,定义争对对象数组排序的方法,排序的对象依据Data对象的和成员,排序后输出对象数组的原数据成员。
//文件名:Question2.java
public class Question2{
public static void main(){
//创建输入扫描器
Int n=
While(n!=0){
//创建Data数组
//读一个数,创建Data对象,并给数组赋值
//调用sort方法
//输出数组对象的原数据成员值
}
}

public static void sort(Data[] datas){
//采用冒泡法排序
}
}

class Data{
int value;
int sumvalue;
Public Data(int value){
This.value=value;
Sumvalue = getSum(value);
}
public int getSum(int n){
Int sum=0;
while(n>0){
//自己完成代码
}
return sum;
}
}

import java.util.Scanner;

public class Test01 {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        //创建输入扫描器
        int n = in.nextInt();
        while (n != 0) {
            Data[] arr = new Data[n];//创建Data数组
            for (int i = 0; i < n; i++)
                arr[i] =new Data(in.nextInt());//读一个数,创建Data对象,并给数组赋值
                //values 交换排序
            for (int i = 0; i < n - 1; i++) {
                for (int j = 0; j < n - i - 1; j++) {
                    if (arr[j].sum >arr[j + 1].sum) {
                        Data tmp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = tmp;

                    }
                }
            }
            for (int i = 0; i < n; i++) {
                System.out.print(arr[i].num + " ");
            }
            System.out.println();
            n = in.nextInt();
        }

    }
//创建一个数据对象Data
    static class Data{
        int num,sum;
        public Data(int n) {
            this.num=n;
            sum=getsum(n);
        }
    }
    //定义一个计算数字和方法
    private static int getsum(int n) {
        int value = 0;
        while (n > 0) {
            value += n % 10;
            n /= 10;
        }
        return value;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值