注意:在循环控制中 , 不要使用浮点值来比较值是否相等 。 因为浮点值都是某些值的近似值 , 使用它们可能导致不精确的循环次数和不准确的结果 。
变量 item 从 1 开始,每执行一次循环体就减去 0.1 。当 item 变为 0 时循环应该终止。 但是,因为浮点數在算术上是近似的,所以不能确保 item 会变成真正的 0。从表面上看 ,这个循环似乎没问題 , 但实际上它是一个无限描环。
-
1.求最大公约数(5.8.3)
方案:找到比最小的数小1的数d,从d开始往1走,找到第一个能够被两个整数同时整除的数就是最大公约数。
Scanner input=new Scanner(System.in);
System.out.print("输入第一个数");
int number1=input.nextInt();
System.out.print("输入第二个数");
int number2=input.nextInt();
int d=(number1<number2)?number1:number2;
int max=1;
while (d>1){
if(number1%d==0&number2%d==0) {
max = d;
break;
}
d--;
}
System.out.println("最大公约数:"+max);
-
2.十进制转换为十六进制
public class 练习4_10进制数转换为16进制数 {
public static void main(String[] args){
System.out.print("请输入十进制数:");
Scanner input=new Scanner(System.in);
int decimal=input.nextInt();
int in=decimal;
String hex="";
while (decimal!=0){
int hexValue=decimal%16;
char hexch= (hexValue>=0&&hexValue<=9)?(char)(hexValue+'0'):(char)(hexValue-10+'A');
hex=hexch+hex;
decimal=decimal/16;
}
System.out.println(in+"的十六进制为:"+hex);
}
}
-
3.判断回文串
如果一个字符串从前往后 , 以及从后往前是一样的 , 那么它就是一个回文 。 例如 ,“ mom ” 、 “ dad ” , 以及 “ noon ” , 都是回文 。
方案:左右分别定义两个变量i,j。i<j循环判断头和尾是否相等
public class 练习5_判断回文串 {
public static void main(String[] args){
System.out.print("输入字符串:");
Scanner input =new Scanner(System.in);
String inString=input.nextLine();
boolean isPail=true;
for(int low=0,high=inString.length()-1;low<high;low++,high--){
if(inString.charAt(low)!=inString.charAt(high)){
isPail=false;
break;
}
}
if(isPail)
System.out.println(inString+"是回文串");
else
System.out.println(inString+"不是回文串");
}
}
-
4..显示素数
分 5 行显示前 50 个素数 , 每行包含10 个数字 。
提示:如果一个数不是素数是合数,那么一定可以由两个自然数相乘得到,其中一个大于或等于它的平方根,一个小于或等于它的平方根.并且成对出现.
public class 练习6_判断素数 {
public static void main(String[] args){
final int MAX_COUNT=50;
final int MAX_COUNT_LINE=10;
int suCount=0;
int number=2;
while(suCount<MAX_COUNT){
boolean isSu=true;
for(int i=2;i<=Math.sqrt(number);i++){
if(number%i==0) {
isSu = false;
break;
}
}
if(isSu) {
suCount++;
if (suCount % MAX_COUNT_LINE == 0)
System.out.println(number);
else
System.out.print(number + " ");
}
number++;
}
}
}
-
5.分解因子
编写程序 , 读入一个整数 , 然后以升序显示它的所有最小因子 。 例如 ,若输人的整数是 120 , 那么输出就应该是 : 2 , 2 , 2 , 3 , 5 。
方案:将num从2开始除直到找到能被整除的因子,就是第一个因子。
num=num/2 再从2开始除,找到被整除的就是第二个因子
直到num值<2。
public class 课后text3 {
public static void main(String[] args){
System.out.print("请输入数字:");
Scanner input =new Scanner(System.in);
int num=input.nextInt();
int k=2;
while (k<=num){
if(num%k==0){
System.out.print(k+" ");
num=num/k;
k=2;
continue;
}
k++;
}
}
}
-
6.显示闰年
编写程序 , 显示从101到 2100 期间所有的闰年 , 每行显示10个 。 数字之间用一个
空格字符隔开 , 同时显示这期间闰年的数目 。
注:闰年的判断条件能整除4&&不能整除100,或能整除400
public class 课后text5 {
public static void main(String[] args){
int count=0;
for (int i=101;i<=2100;i++){
if((i%4==0&&i%100!=0)||i%400==0){
count++;
if(count%10==0) System.out.println(i);
else System.out.print(i+" ");
}
}
}
}
-
7.显示每月第一天是星期几
编写程序 , 提示用户输人年份和代表该年第一天是星期几的数字 ,然后在控制台上显示该年每月第一天的星期 。
例如 , 如果用户输人的年份是 2013 和代表 2013年 1 月1日为星期二的 2 ,
程序应该显示如下输出 :
January 1 , 2013 is Tuesday
December 1 , 2013 is Sunday
public class 课后text6 {
public static void main(String[] args){
System.out.println("Enter year and day");
Scanner input=new Scanner(System.in);
int year=input.nextInt();
int firstday=input.nextInt();
int monthOfday=0;
for(int month=1;month<=12;month++){
switch (month){
case 1:System.out.print("January 1,"+year+" is ");monthOfday=31;break;
case 2:System.out.print("Febrary 1,"+year+" is ");monthOfday=((year%4==0&&year%100!=0)||year%400==0)?29:28;break;
case 3:System.out.print("March 1,"+year+" is ");monthOfday=31;break;
case 4:System.out.print("April 1,"+year+" is ");monthOfday=30;break;
case 5:System.out.print("May 1,"+year+" is ");monthOfday=31;break;
case 6:System.out.print("June 1,"+year+" is ");monthOfday=30;break;
case 7:System.out.print("July 1,"+year+" is ");monthOfday=31;break;
case 8:System.out.print("Augest,"+year+" is ");monthOfday=31;break;
case 9:System.out.print("september,"+year+" is ");monthOfday=30;break;
case 10:System.out.print("October,"+year+" is ");monthOfday=31;break;
case 11:System.out.print("November,"+year+" is ");monthOfday=30;break;
case 12:System.out.print("December,"+year+" is ");monthOfday=31;break;
}
switch (firstday){
case 0:System.out.println("Sunday");break;
case 1:System.out.println("monday");break;
case 2:System.out.println("Tuesday");break;
case 3:System.out.println("wednsday");break;
case 4:System.out.println("Thusday");break;
case 5:System.out.println("Friday");break;
case 6:System.out.println("Satuday");break;
}
firstday=(firstday+monthOfday)%7;
}
}
}
-
8.完全数
如果一个正整数等于除它本身之外其他所有除数之和,就称之为完全数。 例如 : 6 是第一个完全数 , 因为 6 =1 + 2 + 3 。 下一个完全数是 28 =14 + 7 + 4 + 2 + 1
10 000 以下的完全数有四个 ,编写程序 , 找出这四个完全数。
public class 课后text7 {
public static void main(String[] args){
for(int number=6;number<=10000;number++){
int sum=0;
for(int divisor=number-1;divisor>=1;divisor--){
if(number%divisor==0){
sum=sum+divisor;
}
}
if(sum==number){
System.out.println(number);
}
}
}
}
-
9.十进制转换为二进制
public class 课后text9 {
public static void main(String[] args){
Scanner input=new Scanner(System.in);
System.out.print("请输入十进制数:");
int digit=input.nextInt();
String hex="";
while (digit!=0){
hex=digit%2+hex;
digit=digit/2;
}
System.out.println("16进制为:"+hex);
}
}
-
10. 十进制转换为八进制
public class 课后text10 {
public static void main(String[] args){
System.out.print("请输入十进制数:");
Scanner input=new Scanner(System.in);
int digit=input.nextInt();
String octal="";
while (digit!=0){
octal=digit%8+octal;
digit=digit/8;
}
System.out.println("八进制为"+octal);
}
}
-
11.统计最大数出现的次数,输入以0结束
输入:3 5 2 5 5 5 0
输出:最大数5出现4次
public class 课后text11 {
public static void main(String[] args){
Scanner input=new Scanner(System.in);
System.out.print("请输入:");
int num=input.nextInt();
int max=0;
int count=0;
while (num!=0){
if(num>max)
{
max=num;
count=1;
num=input.nextInt();
continue;
}
else if (num==max) {
count++;
num=input.nextInt();
}
else {
num=input.nextInt();
}
}
System.out.println("最大数为:"+max+" 出现次数:"+count);
}
-
12.字符串的逆序
Enter a string : ABCD
The reversed string is DCBA
public class 课后text13 {
public static void main(String[] args){
System.out.print("Enter a string:");
Scanner input=new Scanner(System.in);
String s=input.next();
String reverString="";
for(int i=s.length()-1;i>=0;i--){
reverString=reverString+s.charAt(i);
}
System.out.println(reverString);
}
}
-
13.最长共同前缀
public class 课后text17 {
public static void main(String[] args){
Scanner input=new Scanner(System.in);
System.out.print("Enter the first string:");
String s1=input.nextLine();
System.out.print("Enter the second string:");
String s2=input.nextLine();
int length=s1.length()<s2.length()?s1.length():s2.length();
String result="";
for(int i=0;i<length;i++){
if(s1.charAt(i)==s2.charAt(i))
result=result+s1.charAt(i);
else
break;
}
if(result.length()>0)
System.out.println("The common prefix is "+result);
else
System.out.println(s1+"and"+s2+"have no common prefix");
}
}