1、變量 運算符 類型轉換
1.1手動輸入一個學生的成績,對這個成績進行一次加分,加當前成績的20%,輸出加分后的成績
Scanner scan = new Scanner(System.in); System.out.println("請輸入一個成績"); double num = scan.nextDouble(); num += num*0.2; System.out.println(num);
1.2商場舉行店慶,抽幾折打幾折,先手動輸入消費金額,在輸入抽到的折扣,計算出折后的價格
Scanner scan = new Scanner(System.in); System.out.println("輸入消費金額:"); double num = scan.nextDouble();//獲取鍵盤數據 System.out.println("抽到的折扣:"); int dis = scan.nextInt();//獲取鍵盤,掃描對象scan依然可用 double price = (num*dis)/10; System.out.println("折后的價格:" + price);
1.3手動輸入一個4位數,求各位數之和
Scanner scan = new Scanner(System.in); System.out.println("請輸入一個4位數:"); int i = scan.nextInt(); //思路:除以10 100 1000實現小數點左移取整 模10得到個位數的值 int a,b,c,d; d = i%10; c = i/10%10; b = i/100%10; a = i/1000%10; int num = a+b+c+d; System.out.println(num);
2、分支結構
2.1商場消費返利活動,手動輸入顧客消費金額,如果金額打8折仍然滿1000元用戶就獲得200元代金券一張(不考慮多張)
Scanner scanner = new Scanner(System.in); System.out.println("請輸入消費金額:"); int i = scanner.nextInt();//這里只做整數計算 double dis = i*0.8;//打折后金額 if(dis>=1000){ dis -= 200; } System.out.println("最后支付費用為:"+dis);
2.2用戶輸入一個年份,如果是閏年輸出是閏年(算法:非整百年份能被4整除,且不能被100整除,或者能被400整除的年份)
Scanner scanner = new Scanner(System.in);//創建掃描對象同時建立引用 System.out.println("請輸入年份:"); int year = scanner.nextInt(); if(year%4==0&&year%100!=0||year%400==0){//思路:整百年份只有能被400整除的年份是閏年,非整百年份能被4整除,且不能被100整除) System.out.println("是閏年"); }else { System.out.println("不是閏年");
2.3手動輸入一個整型會員,如果輸入的是4位數字,輸出“登錄成功”,如果用戶輸入的不是4位數,輸出“您輸入的會員號有誤”
Scanner scanner = new Scanner(System.in); System.out.println("請輸入會4位員號:"); int num = scanner.nextInt(); int i = 0;//位計數 while (num != 0){ //巧用循環 i++; num /= 10; //除以10取整相當於小數點左移取整 } System.out.println(i); if (i == 4){ System.out.println("登錄成功"); }else { System.out.println("輸入有誤"); }
Scanner scanner = new Scanner(System.in); System.out.println("請輸入會4位員號:"); int num = scanner.nextInt(); int i = 0;//位計數 while (num != 0){ //巧用循環 i++; num /= 10; //除以10取整相當於小數點左移取整 } System.out.println(i); if (i == 4){ System.out.println("登錄成功"); }else { System.out.println("輸入有誤"); } scanner.close();
2.4手動輸入a b c三個變量的數值,要求通過數值交換,把輸入的數值從小到大排序放入abc中,並輸出
Scanner scanner = new Scanner(System.in); System.out.println("請輸入3個整數:"); int a = scanner.nextInt(); int b = scanner.nextInt(); int c = scanner.nextInt(); int i=0; //兩兩比較 if(a>b){ i=a; a=b; b=i; } if (a>c){ i=a; a=c; c=i; } if (b>c){ i=b; b=c; c=i; } System.out.print(a+"\t"+b+"\t"+c); scanner.close();
3、多分支結構
3.1商場根據會員積分打折,2000分以內打9折,4000以內打8折,8000分以內打7.5折,8000分以上打7折,使用if -else if 結構,實現手動輸入購物金額和積分,計算出應繳金額
Scanner scanner = new Scanner(System.in); System.out.println("請輸入會員的積分:"); int fen = scanner.nextInt(); System.out.println("請輸入本次消費金額:"); int shop = scanner.nextInt(); if(fen<2000){ shop *= 0.9; }else if(fen<4000){ shop *= 0.8; }else if(fen<8000){ shop *= 0.75; }else{ shop *= 0.7; } System.out.println("應繳金額為:"+shop+"元"); scanner.close();
3.2機票價格按照淡季旺季,頭等艙和經濟艙收費。輸入機票原價 月份和頭等艙或經濟艙,其中旺季(5-11月)頭等艙9折,經濟艙85折。淡季(11月-來年4月)頭等艙7折,經濟艙65折,最終輸出機票價格
Scanner scanner = new Scanner(System.in); System.out.println("請輸入機票原價:"); int piao = scanner.nextInt(); System.out.println("請輸入當前月份:"); int month = scanner.nextInt(); System.out.println("請選擇:1、頭等艙 2‘經濟艙"); int i = scanner.nextInt(); if(month>=5 && month<=11){ System.out.print("當前是旺季,"); if (i == 1){ piao *= 0.9; System.out.println("您的票是頭等艙,折扣票價為:"+ piao); }else { piao *= 0.85; System.out.println("您的票是經濟艙,折扣票價為:"+piao); } }else if(month==12 || month>=1 && month<=4){ System.out.print("當前是淡季,"); if (i == 1){ piao *= 0.7; System.out.println("您的票是頭等艙,折扣票價為:"+piao); }else { piao *= 0.65; System.out.println("您的票是經濟艙,折扣票價為:"+piao); } }else { System.out.println("月份錯誤"); } scanner.close();
3.3選擇一個形狀(1長方形 2正方形 3三角形 4圓形),根據不同的選擇讓用戶輸入不同的信息:長方形有長和寬,正方形有邊長,三角形有底和高,原型有半徑,計算輸出指定形狀的面積
Scanner scanner = new Scanner(System.in); //創建掃描對象 System.out.println("請選擇一個形狀:1長方形 2正方形 3三角形 4圓形"); int i = scanner.nextInt(); //獲取鍵盤 float pi = 3.141592f; double result; //對比輸入值 switch (i){ case 1: System.out.println("輸入長度:"); int length = scanner.nextInt(); System.out.println("輸入寬度:"); int wide = scanner.nextInt(); result = length * wide; System.out.println("長方形的面積是:"+ result); break; case 2: System.out.println("輸入邊長:"); int l = scanner.nextInt(); result = l*l; System.out.println("正方形的面積是:"+ result); break; case 3: System.out.println("輸入底長:"); int d = scanner.nextInt(); System.out.println("輸入高:"); double h = scanner.nextInt(); result = d*h/2; System.out.println("三角形的面積是:"+ result); break; case 4: System.out.println("輸入半徑:"); double r = scanner.nextDouble(); result = pi*r*r; System.out.println("圓的面積是:"+ result); break; } scanner.close();
4、循環結構
4.1隨機生成一個1-100之間的數字num,循環讓用戶輸入猜這個數。如果用戶輸入的數字大於num提示輸入的數字比較大,如果用戶輸入的數字小於num提示輸入的數字比較小。直到用戶輸入的數字和num相等為止,然后輸出用戶猜數的次數。
Random random = new Random();//創建隨機數生成器對象 int num = random.nextInt(100)+1;//int nextInt(int n):返回一個偽隨機數,它是取自此隨機數生成器序列的、在 0(包括)和指定值n(不包括)之間均勻分布的 int 值。 Scanner scanner = new Scanner(System.in); System.out.println("請猜一個數字:"); int i = 0; int count = 0; while(i!=num){ i = scanner.nextInt(); count++; if (i>num){ System.out.println("猜大了"); }else{ System.out.println("猜小了"); } } System.out.println("恭喜正確,您一共猜了"+ count +"次!"); scanner.close();
4.2打印出1-100之間所有不是7的倍數和不包含7的數字,並求和
int num = 0; for (int i = 1; i <= 100; i++) { if(i%7 != 0 && i%10 != 7 && i/10 != 7){ num += i; } } System.out.println(num);
int num = 0; for (int i = 1; i <= 100; i++) { if(i%7 == 0 || i%10 == 7 || i/10 == 7){ continue; } num += i; } System.out.println(num);
4.3循環輸入5個數,輸完后顯示這些數中有沒有負數
int count = 0; int flag = 0;//立旗 Scanner scanner = new Scanner(System.in); System.out.println("請輸入5個數字:"); while (count<5){ int num = scanner.nextInt(); if(num<0){ flag=1; } count++; } if(flag==0){ System.out.println("沒有負數"); }else { System.out.println("有負數"); } scanner.close();
5、循環結構(下)
5.1有一個有錢的神經病,她往銀行里存錢。第一天存1元,以后每天比前一天多存50%,完成下列計算任務
1)他存到第幾天,當天存的錢會超過10元
double money = 1; int day = 1; while (money<10){ money *= 1.5; day++; } System.out.println("第" + day +"天超過10元");
double money = 1; int day =1; //day在for中定義是局部變量,不能在外部直接輸出; for (;true;day++) { if(money>10){ break; } money *= 1.5; } System.out.println("第" + day +"天超過10元");
double money = 1; int day = 1; //使用if break的方式 while (true){ if(money>10){ break; } money *= 1.5; day++; } System.out.println("第" + day +"天超過10元");
2)一個月(30天)后他總共存了多少錢
double money = 1; double num = 0; for (int day = 1; day <= 30; day++) { num += money; System.out.println("day:"+day+",money:" + money); money *= 1.5; } System.out.println("一個月共存了" + money +"元");
5.2有一個400一圈的操場,一個人要跑10000米。第一圈50秒,其后每一圈都比前一圈慢1秒,按照這個規則計算跑完10000米需要多少秒
int time = 50; int round = 10000/400; int sum =0; for (int i = 1; i <= round; i++) { sum += time; time++; } System.out.println(sum);
5.3用戶輸入任意一個整數,求各位數之和
Scanner scanner = new Scanner(System.in); System.out.println("請輸入一個整數"); int num = scanner.nextInt(); int sum = 0; while (num>0){ sum += num%10;//模10得到個位的數字 num = num/10;//除以10取整得到個位前面的數字 } System.out.println("各位數字之和為:" + sum);
5.4井里有一只蝸牛,他每天往上爬5米,晚上掉3.5米,井深56.7米。計算蝸牛需要多少天才能從井底爬出來。
int day = 1; double sum = 5; while (sum <= 56.7){ sum -= 3.5; day++; sum += 5; } System.out.println("需要" +day+ "天"); }
int day = 1; double sum = 0; while (true){ sum +=5; if(sum>56.7){ break; } sum -= 3.5; day++; } System.out.println(day);
6、循環嵌套
6.1求1-1000以內的質數列表。質數是只能被1和自身整除的整數
int i,j; int count=0; //思路:遍歷測試從2-自身(包含)之間的因數,如果只有自身則說明是質數(如果這個因數小於自身,說明i有其它因數) for (i = 1; i <1000 ; i++) {//1不是質數,質數是指在大於1的自然數中,除了1和它本身以外不再有其他因數的自然數。 for(j = 2;j<=i;j++){ if(i%j==0){//找因數 break; } } if(i==j){ System.out.print(i+"\t"); count++; } if(count == 10){ System.out.println(); count = 0; } }
//思路:遍歷測試2-自身之間的數,如果沒有因數說明i是質數(如果有因數,則說明i不是質數 int j; for (int i=1;i<150;i++){//1不是質數 for (j=2;j<i;j++){ if (i%j == 0){//找因數 break; } } if(j<i){ continue; } System.out.print(i+" "); }
//思路:遍歷測試2-自身之間的數,如果沒有因數說明i是質數(如果有因數,則說明i不是質數 outhor: for (int i=1;i<150;i++){//1不是質數 for (int j=2;j<i;j++){ if (i%j == 0){//找因數 continue outhor; } } System.out.print(i+" "); }
7、數組
7.1定義一個數組int[] nums={8,7,3,9,5,4,1} 輸出數組中的最大值和它的下標
int[] nums = {8,7,3,9,5,4,1}; int max = nums[0]; int index = 0; //思路:遍歷數組元素,與max比較 for (int i = 1; i < nums.length; i++) { if(nums[i]>max){ max=nums[i]; index = i; } } System.out.println("最大值是:"+max+",下標是:"+index);
7.2向一個長度為10的整型數組中 隨機生成10個0-9的隨機整數,完成下列任務:1)升序輸出,降序輸出 2)輸出總和、平均數
int[] ints = new int[10]; Random random = new Random(); //生成數組 for (int i = 0; i < 10; i++) { ints[i] = random.nextInt(10); System.out.print(ints[i]+" "); } System.out.println(); //升序輸出 int n; for (int j = 9; j > 0; j--) { for (int i = 0; i < j; i++) { if(ints[i+1]<ints[i]){ n = ints[i]; ints[i] = ints[i+1]; ints[i+1] = n; } } } for (int i = 0; i < 10; i++) { System.out.print(ints[i]+" "); } System.out.println(); //降序輸出 for (int j = 9; j > 0; j--) { for (int i = 0; i < j; i++) { if(ints[i]<ints[i+1]){ n = ints[i]; ints[i] = ints[i+1]; ints[i+1] = n; } } } for (int i = 0; i < 10; i++) { System.out.print(ints[i]+" "); } //總和 平均數 System.out.println(); double sum=0; for (int i = 0; i < 10; i++) { sum += ints[i]; } System.out.print("數組元素的總和是:"+sum+",平均數是:"+sum/10);
//創建對象 Random ran = new Random(); int[] num = new int[10]; //生成數組 for (int i = 0; i < num.length; i++) { num[i] = ran.nextInt(10); } //使用sort方法排序 Arrays.sort(數組名,起始下標,終止下標); Arrays.sort(num); for (int i = 0; i < num.length; i++) { System.out.print(num[i] + " "); } System.out.println("------升序------"); //降序反向輸出 for (int i = num.length - 1; i >= 0; i--) { System.out.print(num[i] + " "); } System.out.println("------降序------"); // 總和 平均數 int sum = 0; for (int i = 0; i < num.length; i++) { sum = num[i] + sum; } System.out.println("總和:" + sum); System.out.println("平均數:" + sum / num.length);
7.3向一個長度為5的整型數組中 生成5個1-10的隨機整數。要求生成的數字中沒有重復
int[] num = new int[5]; Random ran = new Random(); for (int i = 0; i < num.length; i++) { num[i] = ran.nextInt(10)+1;//元素獲取隨機數 //思路:新元素值與前面的元素遍歷比較,如果相等,退回去重新生成隨機數,再次遍歷比較 for (int j = 0; j < i; j++) { if(num[i]==num[j]){ i--; break; } } } //foreach語法 遍歷數組 訪問集合中的元素 for (int x:num) { System.out.println(x); }
7.4向一個長度為10的整型數組中隨機生成10個0-9的整數,完成下列任務。1)統計每個數字出現了多少次 2)輸出出現次數最多的數字 3)輸出只出現一次的數字中最小的數字
//創建對象,生成一個隨機數組 int[] ints = new int[20]; Random random = new Random(); for (int i = 0; i < ints.length; i++) { ints[i] = random.nextInt(20); System.out.print(ints[i]+" "); } System.out.println(); //按照元素互相比較的方法進行統計的思路 int count = 0; int n = 0; int[][] numbs = new int[ints.length][2]; outhor: for (int i = 0; i < ints.length; i++) {//遍歷ints[i]的元素 //左側若有重復,則跳出循環遍歷下一個元素 for (int j = i-1; j >= 0; j--) { if(ints[i]==ints[j]){ continue outhor; } } //右側有重復,則計數累加,並輸出數字 for (int j = i; j < ints.length; j++) { if(ints[i]==ints[j]){ count++; } } System.out.println("數字"+ints[i]+ "出現了"+count+"次,");//輸出數字和出現次數 //用二維數組存儲下每個數字及出現次數,數組有效長度為n,這里數字已無重復 numbs[n][0] = ints[i]; numbs[n][1] = count; n++; count = 0; } for (int i = 0; i < n; i++) { System.out.println(numbs[i][0] +"\t"+ numbs[i][1]+",");//查看二維數組 } //提取最大的計數值(出現次數) int maxc = 0; for (int i = 0; i < n; i++) { if(numbs[i][1]>maxc){ maxc = numbs[i][1]; } } //輸出計數值(出現次數)為最多的所有數字 System.out.print("出現次數最多的數字是:"); for (int i = 0; i < n; i++) { if(numbs[i][1] == maxc){ System.out.print(numbs[i][0]+ " "); } } System.out.println(); //提取計數(出現次數)為1的數字,存儲在數組中,數組有效長度為m int[] num =new int[n]; int m = 0; System.out.print("只出現一次的數字是:"); for (int i = 0; i < n; i++) { if(numbs[i][1] == 1) { System.out.print(numbs[i][0] + " "); num[m] = numbs[i][0]; m++; } } //輸出最小數字 int min = num[0]; for (int i = 1; i < m; i++) { if(num[i]<min){ min = num[i]; } } System.out.println("其中最小的數字是:"+min);
2021-10-18
//即使再小的帆也能遠航~~~
