題目是:
結果是:
不知道我錯在哪邊請求大大們教導謝謝。
import java.util.Arrays;
import java.util.Scanner;
public class LineraSearch{
public static void main(String args[]){
String name[] = new String[]{"陳一","林二","張三","李四","王五"};
int age[] = new int[]{56, 45, 51, 48, 35};
int t,pc;
String a;
Scanner scn = new Scanner(System.in);
System.out.print("選擇按年齡排序方式,請輸入1或2(1.遞增 2.遞減):");
pc = scn.nextInt();
if(pc == 1){
for (int i=age.length-2 ;i >= 0 ;i--){
for (int j=0 ;j <= i ;j++){
if(age[j] > age[j+1]){
t= age[j];
age[j] =age[j+1];
age[j+1]=t;
a=name[i];
name[i]=name[i+1];
name[i+1]=a;
}
}
}
for(int p=0; p<age.length ;p++){
System.out.print("排序後:"+name[p]+age[p]+"歲,");
}
}
else{
for (int i=age.length+2 ;i <= 0 ;i++){
for (int j=0 ;j >= i ;j--){
if(age[j] < age[j+1]){
t= age[j];
age[j] =age[j+1];
age[j+1]=t;
a=name[i];
name[i]=name[i+1];
name[i+1]=a;
}
}
}
for(int p=0; p<age.length ;p++){
System.out.print("排序後:"+age[p]);
}
}
}
}
for (int i=age.length+2 ;i <= 0 ;i++){
這個迴圈應該永遠不會跑吧
wiselou提到:
放開那個Java....
wiselou提到:
就跟國家考試考酸民主義一樣...中華民國現在是有在實施酸民主義膩....
無聊寫寫加減參考,這只是隨手寫寫的,不要太計較.
不要太執著在某些解不開的問題 , 後面的路還很長 , 例如物件導向.
因為Java是物件導向,而且我工作也沒什麼用過二維陣列,所以我就直接轉成物件處理.
切割多method是責任分派問題,單一method的事情越單純越好.你寫的method裡面塞太多,不易閱讀,導致連你自己都搞不懂問題出在哪.method責任切割完之後,debug才會比較容易.
實務上大部分sort都是直接用Collections.sort ,個人對演算法需要深入就另當別論.
<pre class="c" name="code">
public class TestMain {
public static void main(String[] args) {
String name[] = new String[]{"陳一", "林二", "張三", "李四", "王五"};
int age[] = new int[]{56, 45, 51, 48, 35};
List<Person> personList = new LinkedList<>();
for (int i = 0; i < name.length; i++) {
personList.add(new Person(name[i], age[i]));
}
checkList(personList);
System.out.println("----------------------------------");
int order = 1;
personList = bubbleSort(personList);
if (order != 1) {
Collections.reverse(personList);
}
checkList(personList);
}
private static void checkList(List<Person> collections) {
for (Person p : collections) {
System.out.print(p.toString() + ", ");
}
System.out.println();
}
public static LinkedList<Person> bubbleSort(List<Person> collections) {
System.out.println("Enter bubble sort");
int j;
boolean flag = true;
Person temp;
Person[] pArray = collections.toArray(new Person[collections.size()]);
while (flag) {
flag = false;
for (j = 0; j < pArray.length - 1; j++) {
if (pArray[j].getAge() > pArray[j + 1].getAge()) {
temp = pArray[j];
pArray[j] = pArray[j + 1];
pArray[j + 1] = temp;
flag = true;
}
}
}
return new LinkedList<>(Arrays.asList(pArray));
}
private static List<Person> sort(List<Person> collections) {
System.out.println("Enter sort");
Collections.sort(collections);
return collections;
}
}
外層Class
<pre class="c" name="code">
public class Person implements Comparable<Person> {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return name + " " + age + " 歲 ";
}
@Override
public int compareTo(Person person) {
return Integer.compare(this.age, person.age);
}
}
用別的語言玩玩!參考邏輯就好。
<pre class="c" name="code">
// kotlin
fun swap(arr: Array<Person>, i: Int, j: Int): Array<Person> {
val temp = arr[i]
arr[i] = arr[j]
arr[j] = temp
return arr
}
fun bubbleSort(arr: Array<Person>, order: String): Array<Person> {
for (i in 0..arr.size-2) {
for (j in i+1..arr.size-1) {
when (order) {
"Up" -> if (arr[i].age < arr[j].age) swap(arr, i, j)
"Down" -> if (arr[i].age > arr[j].age) swap(arr, i, j)
}
}
}
return arr
}
fun printTable(arr: Array<Person>) {
println("")
println(" 名字\t年齡")
println("-".repeat(20))
for (p in arr) {
println(" ${p.name}\t ${p.age}")
}
println("")
}
data class Person(val name: String, val age: Int)
fun main(args: Array<String>) {
var arr = array(
Person("陳一", 56),
Person("林二", 45),
Person("張三", 51),
Person("李四", 48),
Person("王五", 35)
)
while (true) {
printTable(arr)
print("選擇按年齡排序方式,請輸入1或2(1.遞增 2.遞減 3.退出):")
val input = readLine()
when (input) {
"1" -> bubbleSort(arr, "Up")
"2" -> bubbleSort(arr, "Down")
"3" -> break
else -> println("input error!")
}
}
println("Good job bye!")
}
/* 輸出結果:
名字 年齡
--------------------
陳一 56
林二 45
張三 51
李四 48
王五 35
選擇按年齡排序方式,請輸入1或2(1.遞增 2.遞減 3.退出):
*/
可以先簡化問題
先單獨處理 int[]{56, 45, 51, 48, 35};
如果再添加 String[]{"陳一", "林二", "張三", "李四", "王五"}; 來一起處理
但複合型資料(名字、年齡 或 名字、性別、年齡、薪資)感覺當用 結構 形式較好排序
struct Person{
name: String,
age: Int
}
分成
int[]{56, 45, 51, 48, 35};
String[]{"陳一", "林二", "張三", "李四", "王五"};
感覺怪怪的