有没有办法在JAVA中没有任何ARRAY对整数的数字进行排序?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没有办法在JAVA中没有任何ARRAY对整数的数字进行排序?相关的知识,希望对你有一定的参考价值。

我试图在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;得到一个语法错误,即需要一个变量但是给出了一个值。

请帮帮我,我将永远感激你。

答案

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

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

零是一个特例。

另一答案

在递归解决方案中,您可以找到String中的最高位,将其添加到输出String,并将其从输入String中删除。重复,直到输入String为空。

删除String中给定索引处的字符可以通过连接索引前的字符和索引后的字符来实现。 (或者使用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;

然后

String sortedString = sort("462375623478142", "");
System.out.println(sortedString);

输出

877665444332221
另一答案

也许老师想测试你对新流API的了解。或者他可能希望您测试您对Collections.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]
另一答案

对不起,但经过这么多努力,我想通了。

int n=54321;char ch;
String s=Integer.toString(n);
int l= s.length();
for(int i=48;i<=57;i++)    //ascii values from 0 - 9

    for(int j=0;j<l;j++)
    
      ch=s.charAt(j);
      if(ch==(char)i)    // checking if a digit equals a number
      
        System.out.print(ch);
      
    

以上是关于有没有办法在JAVA中没有任何ARRAY对整数的数字进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法绕着扫描仪(Java)推进一条线

java中怎么求随机产生50个10以内的整数,输出其中重复次数最多的数?

有没有办法在存储过程中传递一个默认整数?

笔试题--在一个整数数组中找出第5大的数

有没有办法在编译时计算整数类型的宽度?

有没有办法将数字单词转换为整数?