---
tags: Cmoney_Java題目
---
Java_Cmoney_ft8107
===


1.需要的 function 和 class
---
1.1 class Stu
---
1. attribute : seat, score
2. method : print()
```java=
class Stu {
int seat;
int score;
Stu(int seat, int score) {
this.seat = seat;
this.score = score;
}
void print() {
System.out.println(seat + "." + score);
}
}
```
1.2 增加陣列空間
---
之前都是用乘2的方式,雖然一直+1有點耗能,
但可以確保 stus.length == count,
如果用乘2的方式,其他用到 stus.length 的地方都要換成 count,
要不然會一直跑 nullpointerexception 。
```java=
public static Stu[] doubleArr(Stu[] stus) {
Stu[] newStus = new Stu[stus.length + 1];
for (int i = 0; i < stus.length; i++) {
newStus[i] = stus[i];
}
return newStus;
}
```
1.3 交換和泡沫排序
---
常犯錯誤
1. sortScore() 裡的 i 和 j 寫反
2. swap() 忘記用 tmp 寫成 `stus[i2] = stus[i1] ;`
**==這題如果分數一樣,也要交換,想不到吧==**

```java=
public static void sortScore(Stu[] stus) {
for (int i = 0; i < stus.length - 1; i++) {
for (int j = 0; j < stus.length - i - 1; j++) {
if (stus[j].score >= stus[j + 1].score)
swap(stus, j, j + 1);
}
}
}
public static void swap(Stu[] stus, int i1, int i2) {
Stu tmp = stus[i1];
stus[i1] = stus[i2];
stus[i2] = tmp;
}
```
1.4 全部印出(順序不同)
---
```java=
public static void printAlltoBig(Stu[] stus) {
for (int i = 0; i < stus.length; i++) {
stus[i].print();
}
}
public static void printAlltoSmall(Stu[] stus) {
for (int i = stus.length - 1; i > -1; i--) {
stus[i].print();
}
}
```
2.主程式
---
```java=
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Stu[] stus = new Stu[1];
int count = 0;
while (true) {
int score = sc.nextInt();
if (score == -1)
break;
if (count == stus.length)
stus = doubleArr(stus);
stus[count] = new Stu(count + 1, score);
count++;
}
sortScore(stus);
int dir = sc.nextInt();
if (dir == 1)
printAlltoBig(stus);
else
printAlltoSmall(stus);
}
```
3.完整程式
---
```java=
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Stu[] stus = new Stu[1];
int count = 0;
while (true) {
int score = sc.nextInt();
if (score == -1)
break;
if (count == stus.length)
stus = doubleArr(stus);
stus[count] = new Stu(count + 1, score);
count++;
}
sortScore(stus);
int dir = sc.nextInt();
if (dir == 1)
printAlltoBig(stus);
else
printAlltoSmall(stus);
}
public static void sortScore(Stu[] stus) {
for (int i = 0; i < stus.length - 1; i++) {
for (int j = 0; j < stus.length - i - 1; j++) {
if (stus[j].score >= stus[j + 1].score)
swap(stus, j, j + 1);
}
}
}
public static void swap(Stu[] stus, int i1, int i2) {
Stu tmp = stus[i1];
stus[i1] = stus[i2];
stus[i2] = tmp;
}
public static void printAlltoBig(Stu[] stus) {
for (int i = 0; i < stus.length; i++) {
stus[i].print();
}
}
public static void printAlltoSmall(Stu[] stus) {
for (int i = stus.length - 1; i > -1; i--) {
stus[i].print();
}
}
public static Stu[] doubleArr(Stu[] stus) {
Stu[] newStus = new Stu[stus.length + 1];
for (int i = 0; i < stus.length; i++) {
newStus[i] = stus[i];
}
return newStus;
}
}
class Stu {
int seat;
int score;
Stu(int seat, int score) {
this.seat = seat;
this.score = score;
}
void print() {
System.out.println(seat + "." + score);
}
}
```