(7.2~7.5節)+(7.6~7.8節)+7.9節+(7.10~7.12節)
我只做到了21題,有點乏了,未完待續.........(以後更新)
(7.2~7.5節)
*7.1(指定等級)
import java.util.Scanner;
public class S1 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.print("Enter the number of students: ");
int numbers=input.nextInt();
System.out.print("Enter "+numbers+" scores: ");
int[] scores=new int[numbers];
for(int i=0; i<scores.length; i++) {
scores[i]=input.nextInt();
}
int best=scores[0];
for(int i=1; i<scores.length; i++) {
if(best<scores[i])
best=scores[i];
}
char[] ch= {'A','B','C','D','E','F'};
for(int i=0; i<scores.length; i++) {
if(scores[i]>=best-10)
System.out.println("Student "+i+" score is "+scores[i]+" and grade is "+ch[0]);
else if(scores[i]>=best-20)
System.out.println("Student "+i+" score is "+scores[i]+" and grade is "+ch[1]);
else if(scores[i]>=best-30)
System.out.println("Student "+i+" score is "+scores[i]+" and grade is "+ch[2]);
else if(scores[i]>=best-40)
System.out.println("Student "+i+" score is "+scores[i]+" and grade is "+ch[3]);
else
System.out.println("Student "+i+" score is "+scores[i]+" and grade is "+ch[4]);
}
input.close();
}
}
7.2(倒置輸入的數)
import java.util.Scanner;
public class S2 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.print("請輸入10個整數: ");
int[] numbers=new int[10];
for(int i=0; i<numbers.length; i++) {
numbers[i]=input.nextInt();
}
for(int i=numbers.length-1; i>=0; i--) {
System.out.print(" "+numbers[i]);
}
input.close();
}
}
**7.3(計算數字出現的次數)
參考大神博客會有不同解法:
在這裏我用count[1]存儲數字1的次數,用count[2]存儲數字2的次數,......,以此類推。
import java.util.Scanner;
public class S3 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.print("Enter tne integers between 1 and 100: ");
int number=input.nextInt();
int[] counts=new int[102];
int i=1;
while(number!=0) {
if(number>=1 && number<=100) {
counts[number]++;
}
number=input.nextInt();
}
for(int j=1; j<=100; j++) {
if(counts[j]>0) {
System.out.println(j+" occurs "+counts[j]+(counts[j]>1 ? " times." :" time."));
}
}
input.close();
}
}
7.4(分析成績)
某大神參考代碼:
https://blog.csdn.net/lee_fighting_jingyu/article/details/80009407
我改變了一下,數組長度我讓用戶自己輸入,以確定存儲分數的數組長度。
import java.util.Scanner;
public class S4 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("請輸入你將要輸入幾個考試分數: ");
int n=input.nextInt();
System.out.print("請輸入考試分數(以負數結束): ");
int[] scores = new int[n];
int i=0;
int count=0;
int sum=0;
int number=input.nextInt();
while(number>=0) {
if(number>=0 && number<=100) {
count++;
scores[i]=number;
sum += scores[i];
i++;
}
else {
System.out.println("Invalid input!");
}
number=input.nextInt();
}
double average= sum / count;
input.close();
int low=0;
int height=0;
for(int j=0; j<scores.length; j++) {
if(scores[j]>=average) {
height++;
}
else {
low++;
}
}
System.out.println("平均數是: "+average);
System.out.println("大於平均數的分數有: "+height);
System.out.println("小於平均數的分數有: "+low);
}
}
**7.5(打印不同的數)
我不會,我參考了一下大神的答案:
https://blog.csdn.net/lee_fighting_jingyu/article/details/80021289
https://blog.csdn.net/lee_fighting_jingyu/article/details/80009407
*7.6(修改程序清單 5-15)
略,讀不懂題目,有大神會的請給我留言,謝謝┭┮﹏┭┮(快哭了)
*7.7(統計一位數的個數)
public class S7 {
public static void main(String[] args) {
int[] numbers=new int[100];
int[] counts=new int[10];
for(int i=0; i<100; i++) {
numbers[i]=(int) (Math.random()*10);
counts[numbers[i]]++;
}
for(int i=0; i<10; i++) {
System.out.println(i+" 出現的次數爲: "+counts[numbers[i]]+" 次.");
}
}
}
(7.6~7.8節)
7.8(求數組的平均值)
import java.util.Scanner;
public class S8 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.print("請輸入10個doublex型的值:");
double[] n=new double[10];
for(int i=0; i<10; i++) {
n[i]=input.nextDouble();
}
System.out.println("平均數爲: "+average(n));
}
public static int average(int[] array) {
int count=0;
int sum=0;
for(int i=0; i<array.length; i++) {
count++;
sum += array[i];
}
return sum/count;
}
public static double average(double[] array) {
int count=0;
double sum=0;
for(int i=0; i<array.length; i++) {
count++;
sum += array[i];
}
return sum/count;
}
}
7.9(找出最小元素)
import java.util.Scanner;
public class S9 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.print("Enter ten numbers:");
double[] n=new double[10];
for(int i=0; i<10; i++) {
n[i]=input.nextDouble();
}
System.out.println("The minimum number is:"+min(n));
}
public static double min(double[] array) {
double min=array[0];
for(int i=1; i<array.length; i++) {
if(array[i]<min)
min=array[i];
}
return min;
}
}
7.10(找出最小元素的下標)
import java.util.Scanner;
public class S10 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.print("Enter ten numbers:");
double[] n=new double[10];
for(int i=0; i<10; i++) {
n[i]=input.nextDouble();
}
System.out.println("The minimum's index is:"+indexOfSmallestElement(n));
}
public static int indexOfSmallestElement(double[] array) {
int indexOfSmall=0;
double min=array[0];
if(array.length>1) {
for(int i=1; i<array.length; i++) {
if(array[i]<min) {
min=array[i];
indexOfSmall=i;
}
}
return indexOfSmall;
}
else {
return 0;
}
}
}
*7.11(統計學方面:計算標準差)
import java.util.Scanner;
public class S11 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.print("Enter ten numbers:");
double[] n=new double[10];
for(int i=0; i<10; i++) {
n[i]=input.nextDouble();
}
input.close();
System.out.printf("The mean is: %4.2f \n",mean(n));
System.out.printf("The standard deviation is: %7.5f",deviation(n));
}
//計算平均值
public static double mean(double[] x) {
double mean=0;
double sum=0;
for(int i=0; i<x.length; i++) {
sum += x[i];
}
mean=sum/x.length;
return mean;
}
//計算標準差
public static double deviation(double[] x) {
double deviation=0;
double sum=0;
for(int i=0; i<x.length; i++) {
sum += Math.pow( (x[i]-mean(x)), 2 );
}
deviation=Math.sqrt(sum/(x.length-1));
return deviation;
}
}
*7.12(倒置數組)
import java.util.Scanner;
public class S12 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.print("請輸入10個整數: ");
int[] numbers=new int[10];
for(int i=0; i<numbers.length; i++) {
numbers[i]=input.nextInt();
}
int[] n1=reverse(numbers);//注意:返回後的數組要再給一個新數組
System.out.print("倒置後的數組爲: ");
for(int i=0; i<10; i++) {
System.out.print(n1[i]+" ");
}
}
public static int[] reverse(int[] x) {
int[] n=new int[x.length];
for(int i=x.length-1,j=0; i>=0 && j<x.length; i--,j++) {
n[j]=x[i];
}
return n;
}
}
7.9節
*7.13(隨機數選擇器)
首先題目要多讀幾遍:(編寫一個方法,返回1-54之間的隨機數,不包括傳遞到參數中的numbers)
意思是說:產生的這個隨機數呀,與numbers數組裏的元素不同.
public class S13 {
public static void main(String[] args) {
//數組1:getRandom(34, 3, 54, 1, 28, 23, 39, 4 );
//匿名數組 2:getRandom(new int[]{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10});
System.out.println("產生與數組 1 裏元素各不相同的隨機數是:"+getRandom(34, 3, 54, 1, 28, 23, 39, 4 ));
System.out.println("產生與數組 2 裏元素各不相同的隨機數是:"+getRandom(new int[]{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}));
}
public static int getRandom(int... numbers) {
int random=(int) (1+Math.random()*54);
for(int i=0; i<numbers.length; i++) {
//如果產生的隨機數和數組中的某元素相等,則重新產生一個隨機數
if(numbers[i] == random) {
random=(int) (1+Math.random()*54);
}
}
return random;
}
}
7.14(計算gcd)
求最大公約數的方法:(可以參考第五章的編程練習題5.14)
1.首先找到5個數中的最小值 d 。
2.依次檢驗 d, d-1, d-2,..., 2, 1.是否是這5個數的公約數。
3.當然,第一個滿足條件的 d 就是最大公約數。
import java.util.Scanner;
public class S114 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.print("請輸入5個數: ");
int[] n=new int[5];
for(int i=0; i<5; i++) {
n[i]=input.nextInt();
}
System.out.println("該數組的最大公約數爲: "+gcd(n));
}
public static int gcd(int... numbers) {
int d=numbers[0];//d爲 5個數中的最小值
for(int i=1; i<5; i++) {
if(numbers[i]<d) {
d=numbers[i];
}
}
int gcd=-1;
while(d>=1 && gcd==-1) {
if(numbers[0]%d==0 && numbers[1]%d==0
&& numbers[2]%d==0 && numbers[3]%d==0
&& numbers[4]%d==0) {
gcd=d;
}
d--;
}
return gcd;
}
}
(7.10~7.12節)
7.15(消除重複)
我還是不太懂,還是看大神連接吧:(別人的參考答案)
https://blog.csdn.net/qq_36653524/article/details/93508892
https://blog.csdn.net/weixin_38750084/article/details/84196256
7.16(執行時間)
public class S16 {
public static void main(String[] args) {
int key=(int) (Math.random()*100000);
int[] list=new int[100000];
for(int i=0; i<list.length; i++) {
list[i]=(int) (Math.random()*100000);
}
linearSearch(list,key);
binarySearch(list,key);
}
public static void linearSearch(int[] list,int key) {
long startTime=System.currentTimeMillis();
for(int i=0; i<list.length; i++) {
if(key==list[i])
key=i;
}
key=-1;
long endTime=System.currentTimeMillis();
long executionTime1= endTime - startTime ;
System.out.println("The linearSearch executionTime is "+executionTime1);
}
public static void binarySearch(int[] list, int key) {
java.util.Arrays.sort(list);
long startTime=System.currentTimeMillis();
int low=0;
int height=list.length-1;
while(height >= low) {
int mid=(low+height)/2;
if(key<list[mid])
height=mid-1;
else if(key==list[mid])
key= mid;
else
low=mid+1;
}
key=-low-1;
long endTime=System.currentTimeMillis();
long executionTime2= endTime - startTime ;
System.out.println("The binarySearch executionTime is "+executionTime2);
}
}
**7.17(對學生排序)
個人感覺應該用面向對象的方法來做比較方便,等我學會了以後再回頭來寫這題吧,嘻嘻,我先留着
以下是我未完成的代碼:(我不知道成績和名字怎麼連接,目前,待我學了對象和類再來做)
import java.util.Scanner;
public class S17 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.print("請輸入學生的個數: ");
int n=input.nextInt();
String[] name=new String[n];
int[] scores=new int[n];
for(int i=0; i<name.length; i++) {
System.out.print("請輸入"+i+"號學生的姓名和成績: ");
name[i]=input.next();
scores[i]=input.nextInt();
}
java.util.Arrays.parallelSort(scores);
for(int i=name.length-1; i>=0; i--) {
System.out.println(scores[i]+": "+name[i]);
}
}
}
**7.18(冒泡排序)
import java.util.Scanner;
public class S18 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.print("請輸入10個數: ");
double[] n=new double[10];
for(int i=0; i<10; i++) {
n[i]=input.nextDouble();
}
bubbleSort(n);
input.close();
}
public static void bubbleSort(double[] n) {
for(int i=0; i<n.length-1;i++) {
for(int j=0; j<n.length-1-i; j++) {
if(n[j]>=n[j+1]) {
double temp=n[j];
n[j]=n[j+1];
n[j+1]=temp;
}
}
}
System.out.println("冒泡排序:");
for(int k=0; k<n.length; k++) {
System.out.printf(" %.1f ", n[k]);
}
}
}
**7.19(是否排好序了?)
import java.util.Scanner;
public class S19 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.print("Enter list: ");
int number=input.nextInt();
int[] n=new int[number];
for(int i=0; i<n.length; i++) {
n[i]=input.nextInt();
}
input.close();
if(isSorted(n))
System.out.println("The list is already sorted");
else
System.out.println("The list is not sorted");
}
public static boolean isSorted(int[] list) {
for(int i=1; i<list.length-1 ; i++) {
if(list[i-1] > list[i]) {
return false;
}
}
return true;
}
}
*7.20(修改選擇排序)
import java.util.Scanner;
public class S20 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.print("請輸入10個數: ");
double[] n=new double[10];
for(int i=0; i<10; i++) {
n[i]=input.nextDouble();
}
selectionSort(n);
}
public static void selectionSort(double[] list) {
for(int i=0;i<list.length-1;i++){
double currentMax=list[i];
int currentMaxIndex=i;
for(int j=i+1;j<list.length;j++){
if(currentMax<list[j]){
currentMax=list[j];
currentMaxIndex=j;
}
}
if(currentMaxIndex !=i){
list[currentMaxIndex]=list[i];
list[i]=currentMax;
}
}
for(int i1=0; i1<list.length; i1++) {
System.out.print(" "+list[i1]);
}
}
}
***7.21(遊戲:豆機)
不知道,略