有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

排序在JAVA中,有没有什么方法可以在没有任何数组的情况下对整数的数字进行排序?

我试图在JAVA中对整数的数字按降序排序,但不允许使用任何数组

这是课堂上给我的作业,下面是我尝试过但失败的代码

import java.util.Scanner;
class descend
{
    public static void main(String args[])
    {
        int a=0,loc=0,parse=0,temp=0,big=0;
        Scanner scan = new Scanner(System.in);
        System.out.print("Enter a number");
        a=scan.nextInt();
        String s=Integer.toString(a);
        int l=s.length();
        for(int i=0;i<l;i++)
        {
            big=(int)(s.charAt(i));
            loc=i;
            for(int j=i+1;j<l;j++)
            {
                parse=(int)(s.charAt(j));
                if(parse>big)
                {
                    big = parse;
                    loc=j;
                }
            }
            temp=parse;
            s.charAt(i)=s.charAt(loc);
            s.charAt(loc)=temp
        }
        System.out.print(s);
    }
}

这里我在s.charAt(i)=s.charAt(loc);s.charAt(loc)=temp;得到一个语法错误,即需要一个变量,但给出了一个值

请帮我解决这个问题,我将永远感激你


共 (2) 个答案

  1. # 1 楼答案

    字符串不能更改,只能替换,因此a = b; f(b);永远不会更改a

    仅使用10位数字,您可以从0到9进行迭代,逐步进行排序:

    int number = ... // or String number
    if (number == 0) { // or < 10
        System.out.println(number);
    } else {
        for (int digit = 0; digit <= 9; ++digit) {
            // While being able to remove the current digit:
            for (;;) {
                int scrapedNumber = numberWithoutDigitOnce(number, digit);
                if (scrapedNumber == number) {
                    break;
                }
                number = scrapedNumber;
                System.out.print(digit);
            }
        }
        System.out.println();
    }
    
    int numberWithoutDigitOnce(int number, int digit) {
        if (number % 10 == digit) {
            return number / 10;
        }
        int n = numberWithoutDigitOnce(number/10, digit)*10 + (number % 10);
    }
    

    零是一个特例

  2. # 2 楼答案

    也许老师想测试你对新的流API的知识。或者他想让你测试你对收藏的知识。sort()和LinkedList(不包含内部数组)

    1.)下面是一个使用流API的解决方案:

    int number = 52214;
    String.valueOf(number).chars()
       .sorted()
       .map(Character::getNumericValue).forEach(System.out::print);
    

    这将打印出:

    12245
    

    2.)以下是一个集合解决方案:

    List<Integer> list = new LinkedList<Integer>();
    StringCharacterIterator iterator = new StringCharacterIterator(String.valueOf(number));
    for (char c = iterator.first(); c != CharacterIterator.DONE; c = iterator.next()) 
    {
        list.add(Character.getNumericValue(c));
    }
    Collections.sort(list);
    System.out.println("list=" + list);
    

    这将打印出:

    list=[1, 2, 2, 4, 5]