輸入:這是我的字串
輸出:是我的這個字串
我必須根據單詞的長度在句子中排列單詞,如果兩個單詞的長度相同,則按字母順序列印它們(第一要務是長度)。
我的錯誤代碼:
import java.util.Scanner;
class accordingtolength
{
void main()
{
String result="";
Scanner sc=new Scanner(System.in);
System.out.println("Enter the String");
String str=sc.nextLine();
String arr[]=str.split(" ");
int l=arr.length;
for(int i=0;i<l-1;i )
{
String temp=arr[i] " ";
String temp1=arr[i 1] " ";
int a=temp.length();
int b=temp1.length();
if(a==b)
{
int c=temp.compareTo(temp1);
if(c>0)
result=temp1.concat(temp);
else
result=temp.concat(temp1);
}
else if(a>b)
result=temp1.concat(temp);
else
result=temp.concat(temp1);
}
System.out.println(result);
}
}
我知道我的代碼不正確,因此無需附加輸出。
請幫忙。
uj5u.com熱心網友回復:
有多種方法可以解決這個問題。最方便的兩種方式是。
如果您被允許使用流和比較器,那么您可以在一行中實作它。
Arrays.stream(arr) .sorted(Comparator .comparing(String::length) .thenComparing(Function.identity())) .forEach(System.out::println);使用 Arrays.sort() 對實際的陣列元素進行排序。
Arrays.sort(arr, (o1, o2) -> { if (o1.length() > o2.length()) { return 1; } else if (o2.length() > o1.length()) { return -1; } else { return o1.compareTo(o2); } }); System.out.println(Arrays.toString(arr));如果不想使用 java 提供的 API 和資料結構,可以實作不同版本的冒泡排序。
boolean isSwapped; for (int i = 0; i < arr.length - 1; i ) { isSwapped = false; for (int j = 0; j < arr.length - i - 1; j ) { if (arr[j].length() > arr[j 1].length() || arr[j].length() == arr[j 1].length() && arr[j].compareTo(arr[j 1]) > 0) { swap(arr, j, j 1); isSwapped = true; } } if (!isSwapped) break; }
uj5u.com熱心網友回復:
也許這就是你要找的。使用最少的外部類,這只是首先根據它們的長度按升序對單詞陣列進行排序,然后如果這些長度相等則按字母順序排序它使用variant所謂的選擇排序。它是一種基本排序,經常用作排序的介紹。但這不是很有效。
- 讀取字串并根據空格進行拆分(我修改了您的正則運算式以允許 1 個或多個空格)。
- 然后使用嵌套回圈遍歷串列,比較長度。
- 如果
outer回圈 (i) 索引的單詞比回圈 ( ) 索引的單詞長inner,則j交換單詞。 - 否則,如果相等長度將單詞相互比較并按字母順序排序(String 類實作Comparable介面)。
- 當兩個回圈都完成時,陣列將被排序
- 然后你可以迭代結果,構建一串由空格分隔的單詞。
public class AccordingToLength {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter the String:");
String str = sc.nextLine();
String arr[] = str.split("\\s ");
for (int i = 0; i < arr.length-1; i ) {
int outer = arr[i].length();
for (int j = i 1; j < arr.length; j ) {
int inner = arr[j].length();
if (outer > inner || outer == inner && arr[i].compareTo(arr[j]) > 0) {
String temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
outer = inner; // outer has new length (what was just swapped)
}
}
}
String result = "";
for (String word : arr) {
result = word " ";
}
System.out.println(result);
}
}
輸入="if a day now any easy when new test is done do den deed none";這個列印
a do if is any day den new now deed done easy none test when
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/414448.html
標籤:
