JavaSE:第十七章:編程測試題
**練習:求1+2!+3!+...+20!的和**
long sum = 0;
for (int i = 1; i <= 20; i++) {
long temp= 1;
for (int j = 1; j <= i; j++) {
temp *= j;
}
sum += temp;
}
System.out.println(sum);
結果為:2561327494111820313
**練習:獲取字串中各個的字符數(shù)量**
public static void main(String[] args) {
String string = "中國,國國哥,好帥是個大帥,哥哥";
HashMap<Character, Integer> hashMap = new HashMap<>();
while(string.length()>0) {
Character c = string.charAt(0);
string = string.substring(1);
Integer integer = hashMap.get(c);
if(integer == null ) {
hashMap.put(c, 1);
}else {
hashMap.put(c, integer + 1);
}
}
Set<Entry<Character, Integer>> entrySet = hashMap.entrySet();
for (Entry<Character, Integer> entry : entrySet) {
System.out.println(entry);
}
}
結果:
哥=3
帥=2
大=1
個=1
,=3
中=1
國=3
好=1
是=1
**練習:消除集合中重復的元素**
public static void main(String[] args) {
List list = Arrays.asList(1,2,3,3,4,4,5,5,6,1,9,3,25,4);
HashSet<Integer> hashSet = new HashSet<>();
hashSet.addAll(list);
for (Integer integer : hashSet) {
System.out.println(integer);
}
}
結果:
1
2
3
4
5
6
9
25
**練習:找出數(shù)組中的一個值,使其左側(cè)值的和等于右側(cè)值的加和,例如:1,2,5,3,2,4,2,結果為第四個值。**
public static void main(String[] args) {
int[] arr = new int[] {1,2,5,3,2,4,2};//1,2,5,3,2,4,2,9,2,1,7,6,3
int targetIndex=0;
for (int i = 0; i < arr.length; i++) {
int leftSum=0;
int rightSum=0;
for (int j = 0; j < targetIndex; j++) {
leftSum += arr[j];
}
for (int j = targetIndex+1; j < arr.length; j++) {
rightSum+=arr[j];
}
if(leftSum == rightSum) {
break;
}
targetIndex++;
}
if(targetIndex == arr.length) {
System.out.println("未找到這樣的數(shù)值");
}else {
System.out.println("目標下標:" + targetIndex + "對應的值:" + arr[targetIndex]);
}
}
結果為:目標下標:3對應的值:3
**練習:**
請編寫一個 Application
實現(xiàn)如下功能:從控制臺給出的一個字母串,然后判斷該串的第一個字母是否為大寫,若是大寫則統(tǒng)計該串中大寫字母的個數(shù),并將所有大寫字母輸出;否則輸出信息串”第一個字母不是大寫字母!”。
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入一個字符串:");
String string = scanner.next();
char first = string.charAt(0);
int intf = (int)first;
System.out.println("第一個字母大小為:" + intf);
if(intf >= 65 && intf <= 90) {
int count = 0;
for (int i = 0; i < string.length(); i++) {
char charAt = string.charAt(i);
int intChar = (int)charAt;
if(intChar >= 65 && intChar <= 90) {
count++;
System.out.print(charAt + " ");
}
}
System.out.println(count);
}else {
System.out.println("第一個字母不是大寫字母!");
}
運行結果:
請輸入一個字符串:
ABCabcdBC
第一個字母大小為:65
A B C B C 5
**練習:**
一個應用程序,接受用戶輸入的一行字符串,統(tǒng)計字符個數(shù),然后反序輸出。
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入字符串:");
String string = scanner.next();
String back;
int index= string.length() - 1;//4-1=3
char[] charArray = new char[index + 1];
for (int i = 0; i < string.length(); i++) {
char charAt = string.charAt(i);
charArray[index - i] = charAt;
} //3 0123
String string2 = new String(charArray);
System.out.println("字符個數(shù)為:" + string.length() + "," + string2);
運行結果:
請輸入字符串:
sddfgghhj
字符個數(shù)為:9,jhhggfdds
**練習:**
實現(xiàn)這兩個字符串的拼接
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入字符串:");
String next1 = scanner.next();
System.out.println("請輸入再次輸入字符串:");
String next2 = scanner.next();
String concat = next1.concat(next2);
System.out.println(concat);
運行結果:
請輸入字符串:
fdsaf
請輸入再次輸入字符串:
dsfaaf
fdsafdsfaaf
**練習:寫一個冒泡排序**
排序思想:
相鄰兩元素進行比較,如有需要則進行交換,每完成一次循環(huán)就將最大元素排在最后(如從小到大排序),下一次循環(huán)是將其它的數(shù)進行類似操作。
簡單來說:
拿從小到大排序:拿二個數(shù)來比大小,大的數(shù)拿出來,繼續(xù)跟后面的數(shù)比較大小,繼續(xù)拿大的數(shù)出來這樣循環(huán),最后一個數(shù)反正是最大的。下一次循環(huán)操作類似。
案例:
int[] array = {11,5,9,7,3,2};
最開始數(shù)組:11 5 9 7 3 2
11比5大,拿11:5 11 9 7 3 2
11比9大,拿11:5 9 11 7 3 2
11比7大,拿11:5 9 7 11 3 2
...
比完第一輪后:
5 9 7 3 2 11
代碼參考:
int[] array = {11,5,9,7,3,2};
for (int i = 1; i < array.length; i++) {
if(array[i-1] > array[i]) {
int temp;
temp = array[i-1];
array[i-1] = array[i];
array[i] = temp;
}
}
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
已經(jīng)確定11為最大的數(shù),就不拿11繼續(xù)比較了
現(xiàn)在要比較的數(shù)組:5 9 7 3 2
和第一輪一樣
拿5和9比,9大,拿9:5 9 7 3 2
拿9和7比,9大,拿9:5 7 9 3 2
...
第二輪比較:5,7,3,2,9
第三輪比較:5,3,2,7
第四輪比較:3,2,5
...
我們可以發(fā)現(xiàn)比較的數(shù)的形狀有點像:
。。。。。。
。。。。。
。。。。
。。。
。。
。
實現(xiàn)代碼:
int[] array = {11,5,9,7,3,2};
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length - i; j++) {
System.out.print("。");
}
System.out.println();
}
發(fā)現(xiàn)內(nèi)外循環(huán)可以使用上面的操作了,我們可以繼續(xù)對倆個數(shù)進行換位置操作。之前我們學過二個數(shù)換位置,所以附上代碼:
if(小的數(shù)變量 > 大的數(shù)變量) {
int 臨時變量;
臨時變量= 小的數(shù)變量;
小的數(shù)變量 = 大的數(shù)變量;
大的數(shù)變量= 臨時變量;
}
放到數(shù)組中
if(array[j-1] > array[j]) {
int temp;
temp = array[j-1];
array[j-1] = array[j];
array[j] = temp;
}
最終代碼:
int[] array = {11,5,9,7,3,2};
for (int i = 1; i <= array.length; i++) {
for (int j = 1; j <= array.length - i; j++) {
if(array[j-1] > array[j]) {
int temp;
temp = array[j-1];
array[j-1] = array[j];
array[j] = temp;
}
}
}
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]);
}
好了冒泡排序完成