我试图在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;
处收到语法错误,该错误是需要变量但给出了值。
请帮助我,我将永远感激你。
答案 0 :(得分:0)
一种递归解决方案,您在字符串中找到最高的数字,将其添加到输出字符串中,然后从输入字符串中将其删除。 重复直到输入的字符串为空。
通过将索引之前的字符和索引之后的字符串联起来,可以删除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
答案 1 :(得分:0)
字符串不能更改,只能替换,因此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 :(得分:0)
也许老师想测试您对新流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]
答案 3 :(得分:0)
对不起,但是经过这么多的努力,我想出了办法。
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);
}
}
}
它以升序对数字进行排序。要按降序排序,我们应该使用
for(int i=57;i>=48;i--)