Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JAVA中,有没有任何方法可以在没有任何数组的情况下对整数的数字进行排序?_Java_Sorting - Fatal编程技术网

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

在JAVA中,有没有任何方法可以在没有任何数组的情况下对整数的数字进行排序?,java,sorting,Java,Sorting,我试图在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); Sys

我试图在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.charAti=s.charAtloc;s.charAtloc=温度;需要一个变量,但给出了一个值


请帮我解决这个问题,我将永远感谢您。

递归解决方案,您可以在字符串中找到最高的数字,将其添加到输出字符串中,然后从输入字符串中删除。 重复此操作,直到输入字符串为空

删除字符串中给定索引处的字符可以通过连接索引前的字符和索引后的字符来实现。或者使用StringBuilder,但我同意OP上的评论,即使用StringBuilder是欺骗

private static String sort(String digitsLeftToSort, String sortedString) {
    if(digitsLeftToSort.length() == 0) { // no more character to sort
        return sortedString;
    } else {
        // find the index of the highest digit
        int index = findIndexOfHighestDigit(digitsLeftToSort);
        // add the character at that index to your output String
        sortedString += digitsLeftToSort.charAt(index);
        // Remove it from your input String
        digitsLeftToSort = digitsLeftToSort.substring(0, index) + digitsLeftToSort.substring(index+1);
        // Recursive call with your new Strings
        return sort(digitsLeftToSort, sortedString);
    }
}

// This finds the index of the highest digit in the given String
private static int findIndexOfHighestDigit(String s) {
    int highestDigitValue = -1;
    int highestDigitIndex = -1;
    int integerValue;
    for(int i = 0; i< s.length(); i++) {
        integerValue = Character.getNumericValue(s.charAt(i));
        if(integerValue > highestDigitValue) {
            highestDigitValue = integerValue;
            highestDigitIndex = i;
        }
    }

    return highestDigitIndex;
}
输出

877665444332221

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

仅使用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);
}

Zero是一个特例。

老师可能想测试您对新流API的知识。或者,他可能希望您测试关于Collections.sort和LinkedList(不包含内部数组)的知识

一,。下面是一个使用流API的解决方案:

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

12245
list=[1, 2, 2, 4, 5]
二,。以下是一个包含集合的解决方案:

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);

对不起,我费了这么大劲才弄明白

int n=54321;char ch; 字符串s=Integer.toString; int l=s.长度;
福林Ⅰ=48;iA字符串实际上隐藏了一个数组,因此您的解决方案不可能没有数组。在任何情况下,都不能更改字符串对象,它是不可变的。您编写的代码相当于3=5—您不能为非变量或数组元素的表达式的结果赋值。此外,请确保遵循Java命名约定:类名是用PascalCase编写的。这意味着下降至少应该是下降。我想他们会要求你用一条小溪来解决这个问题。类似于:newString=yourString.chars.sortedYourComparatorHere的结果将是字符集合,而不是字符串。很抱歉
list=[1, 2, 2, 4, 5]