黑马程序员技术交流社区

标题: 为获取技术分而开启的戴伟的自问自答区 [打印本页]

作者: 电玩    时间: 2013-4-19 22:32
标题: 为获取技术分而开启的戴伟的自问自答区
本帖最后由 电玩 于 2013-4-20 12:00 编辑

要成为一个实力强劲的码农,光看视频是不够的,还需要不断的敲代码,敲代码,敲代码。
敲代码要有意义,要有思想。所以,以问题驱动的方式敲代码是最有效的。
在这个帖子里,我打算将《java语言程序设计》(美 Y.Danilei Liang)这本书中的编程练习题敲一遍。


请管理员有空改改我的名字
目前ID:电玩
改名ID:戴伟
作者: 电玩    时间: 2013-4-19 22:39
本帖最后由 电玩 于 2013-4-24 11:38 编辑

第一章很简单,所以从第二章 基本程序设计 开始。
      《Java语言程序设计:基础篇(原书第8版)》第2章基本程序设计,本章将学习如何编程解决实际问题。通过这些问题,你将学到如何利用基本数据类型、变量、常量、运算符、表达式以及输入/输出来进行基本的程序设计。

2.1(将摄氏温度转换为华氏温度) 编写程序,从控制台读入double型的摄氏温度,然后将其转换为华氏温度,并且显示结果,转换公式如下所示:
     fahrenheit=(9/5)*celsius +32     (华氏温度=(9/5)*摄氏度+32)
提示: 在java中,9/5的结果是1,但是9.0/5的结果是1.8
作者: 电玩    时间: 2013-4-19 23:29
import java.util.Scanner;
public class  CelsiusToFahrenheit
{
        public static void main(String[] args)
        {
                Scanner input=new Scanner(System.in);
                System.out.print("请输入一个摄氏温度:");
                double celsius=input.nextDouble();

                double fahrenheit=(9.0/5)*celsius +32 ;
        System.out.print(celsius+"摄氏温度是"+fahrenheit+"华氏温度");
        }
}
/*输出的内容:
请输入一个摄氏温度:43
43.0摄氏温度是109.4华氏温度
*/
作者: 电玩    时间: 2013-4-19 23:32
本帖最后由 电玩 于 2013-4-19 23:37 编辑

2.2(计算圆柱体的体积)编写程序,读入圆柱体的半径和高,并使用下列公式计算圆柱的体积:
   面积=半径*半径*π(3.14159)
  体积=面积*高
作者: 电玩    时间: 2013-4-19 23:54
import java.util.Scanner;  //导入工具
public class  VolumeOfCylinder //圆柱体体积
{
        public static void main(String[] args)
        {
                final double PI=3.14159;//定义π的常量值

                Scanner input=new Scanner(System.in);
                System.out.print("请输入一个半径和一个高度:");
                double radius=input.nextDouble();//输入半径
        double height=input.nextDouble();//输入高度

                double area=radius*radius*PI;//计算面积
        double volume=area*height;   //计算体积
                System.out.println("面积是"+area+",体积是"+volume);
        }
}
/*
请输入一个半径和一个高度:5.5 12
面积是95.0330975,体积是1140.39717
*/
作者: 电玩    时间: 2013-4-20 12:03
2.3(将英尺转换为米)编写程序,读入英尺数,将其转换为米数并显示结果。一英尺等于0.305米。
作者: 电玩    时间: 2013-4-20 12:14
import java.util.Scanner;
public class FeetToMeters03  //英尺转换为米
{
        public static void main(String[] args)
        {
        Scanner input=new Scanner(System.in);
                System.out.print("请输入一个英尺数:");
                double feet=input.nextDouble();//接收英尺数

        double meters=feet*0.305;  //计算米
                System.out.println(feet+"英尺等于"+meters+"米。");
        }
}
/*
请输入一个英尺数:16
16.0英尺等于4.88米。
*/
作者: 电玩    时间: 2013-4-20 12:20
2.4(将磅转换为千克)编写程序,将磅数转换为千克数。程序提示用户输入磅数,然后转换为千克并显示结果。
1磅等于0.454千克。

import java.util.Scanner;
public class PoundsToKilograms04  //磅转换为千克
{
        public static void main(String[] args)
        {
        Scanner input=new Scanner(System.in);
                System.out.print("请输入一个镑数:");
                double pounds=input.nextDouble();//接收磅数

        double kilograms=pounds*0.454;  //计算千克
                System.out.println(pounds+"磅等于"+kilograms+"千克。");
        }
}
/*
请输入一个镑数:55.5
55.5磅等于25.197千克。
*/
作者: 电玩    时间: 2013-4-20 12:27
本帖最后由 电玩 于 2013-4-21 11:35 编辑

2.5(财务应用程序:计算小费)编写一个程序,读入一笔费用与酬金率,计算酬金和总钱数。
例如:如果用户输入10作为费用,15%作为酬金率,计算结果显示酬金为$1.5,总费用$11.5.

import java.util.Scanner;
public class CalculateTip05  //计算小费
{
public static void main(String[] args)
{
        Scanner input=new Scanner(System.in);
  System.out.print("请输入一笔费用和酬金率:");
  double calculate=input.nextDouble();//接收费用数
        double rate=input.nextDouble();//接收酬金率
        double tips=calculate*(rate/100);  //计算酬金(小费)
  double total=calculate+tips;//总费用
  System.out.println("酬金(小费)是"+(int)(tips*100)/100.0+",总费用是"+(int)(total*100)/100.0);//保留小数点后的两位数
}
}
/*
请输入一笔费用和酬金率:15.69 15
酬金(小费)是2.35,总费用是18.04
*/

作者: 黄文伯    时间: 2013-4-20 15:39
有没有原书的电子稿啊
作者: 电玩    时间: 2013-4-20 15:56
本帖最后由 电玩 于 2013-4-20 15:59 编辑

有的。Java语言程序设计-进阶篇(原书第8版。  http://download.csdn.net/detail/lx76939412/4768179
http://download.csdn.net/download/lx76939412/4768171  Java语言程序设计-基础篇(原书第8版   

去csdn下载吧。资源太大,我不好上传。
作者: HM汪磊    时间: 2013-4-20 18:03
希望您坚持住,加油!!!!
作者: 电玩    时间: 2013-4-21 11:40
本帖最后由 电玩 于 2013-4-21 12:17 编辑

谢谢斑竹的鼓励!

2.6(求一个整数个位数的和)编写程序,读取一个在0和1000之间的整数,并将该整数的各位数字相加。
例如:整数是932,各位数字之和为14.
提示:利用运算符%分解数字,然后使用运算符/去掉分解出来的数字。例如 932%10=2,     932/10=93.

import java.util.Scanner;
class   IntegerNumberAnd06  //整数各位数之和,取名不容易,得动用google翻译
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
  System.out.print("请输入一个0到1000之间的整数:");
  int number=input.nextInt();//接收整数
int singleDigit=number%10;//得到各位数
int tenDigit=(number/10)%10; //得到十位数
int hundredDigit=number/100; //得到百位数
  System.out.println("这个整数各位数之和是:"+(singleDigit+tenDigit+hundredDigit));
}
}
/*
请输入一个0到1000之间的整数:999
这个整数各位数之和是:27
*/

作者: 电玩    时间: 2013-4-21 12:22
本帖最后由 电玩 于 2013-4-21 12:34 编辑

2.7(求出年数)编写程序,提示用户输入分钟数(例如十亿)然后显示这些分钟代表多少年和多少天。
为了简化问题,假设一年365天。

import java.util.Scanner;
public class  YearsDays07 //求出年数和天数
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
  System.out.print("请输入分钟数:");
  int minutes=input.nextInt();//接收分钟数
        int years=minutes/(60*24)/365;  //得到年数
  int days=minutes/(60*24)-years*365;//得到剩余天数
  System.out.println(minutes+"分钟相当于"+years+"年,和"+days+"天。");
}
}
/*
请输入分钟数:1000000000
1000000000分钟相当于1902年,和214天。
*/

作者: 电玩    时间: 2013-4-21 12:36
本帖最后由 电玩 于 2013-4-21 18:34 编辑

2.8(求ASCII码对应的字符)编写程序接收一个ASCII码(从0到128的整数),然后显示它所代表的字符。
例如:如果用户输入的是97,程序显示的是字符a.

import java.util.Scanner;
public class  ASCIICharacters08 //ASCII对应的字符
{
public static void main(String[] args)
{
        Scanner input=new Scanner(System.in);
  System.out.print("请输入一个0到128的整数:");
  int number=input.nextInt();//接收整数
  char ch=(char)number;
        System.out.println(number+" 这个整数,ASCII码所对应的字符是  "+ch);
}
}
/*
请输入一个0到128的整数:69
69 这个整数,ASCII码所对应的字符是  E
*/

作者: 电玩    时间: 2013-4-21 18:38
本帖最后由 电玩 于 2013-4-21 19:17 编辑

2.9(财务应用程序:货币单位)改写程序清单2-10,解决将double型值转换为int型值时可能会造成精度损失的问题。输入的输入值是一个整数,则其最后两位代表的是分币值。
例如:1156就表示的是11美元56美分。

//程序清单2-10 美元整钱兑零 讨厌的美国硬币分这么多种,怪不得在美国只能把整数找零钱。像中国补零数的,他们是心算不来的。
//(美国的货币单位为美元(Dollar),1美元等于100美分。纸币面额最小为1美元,1美元以下用硬币,硬币有25美分(Quarter)、10美分(Dime,一角)、5美分(Nickel)、1美分(Cent))
import java.util.Scanner;
class  ComputerChange  //整钱兑零
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
        System.out.print("请输入一个钱数,例如11.56:");
  double amount=input.nextDouble();//接收钱数  11.56
  int centsAmount=(int)(amount*100);//转换为以分币为单位的数量 1156
  int dollars=centsAmount/100;  //得到美元数  11
        centsAmount=centsAmount%100;//剩下的以分币为单位的数量 56 centsAmount=centsAmount-dollars*100;
        int quarters=centsAmount/25;//得到25美分的数量值  2
        centsAmount=centsAmount%25;//剩下的以分币为单位的数量 6 centsAmount=centsAmount-quarters*25;
     
  int dimes=centsAmount/10;//得到10美分的数量值 0
  centsAmount=centsAmount%10;//剩下的以分币为单位的数量 6 centsAmount=centsAmount-dimes*10;
  int nickels= centsAmount/5;//得到5美分的数量值 1
  centsAmount=centsAmount%5;//剩下的以分币为单位的数量 1 centsAmount=centsAmount-nickels*5;
  int pennies=centsAmount;//得到1美分的数量值 1
  System.out.println("你的钱数"+amount+"可以兑换\n"+
   "\t"+dollars+" 个1美元\n"+
      "\t"+quarters+"  个25美分\n"+
   "\t"+dimes+"  个10美分\n"+
   "\t"+nickels+"  个5美分\n"+
   "\t"+pennies+"  个1美分\n");

}
}
/*
请输入一个钱数,例如11.56:11.56
你的钱数11.56可以兑换
        11 个1美元
        2  个25美分
        0  个10美分
        1  个5美分
        1  个1美分
*/


//比课本的要简单的多
import java.util.Scanner;
class  ComputerChange09  //整钱兑零
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
        System.out.print("请输入一个钱数,例如11.56:");
  double amount=input.nextDouble();//接收钱数  11.56
  int centsAmount=(int)(amount*100);//转换为以分币为单位的数量 1156 这样就不会损失double转为int的精度
  int dollars=centsAmount/100;  //得到美元数  11
        centsAmount=centsAmount%100;//剩下的以分币为单位的数量 56 centsAmount=centsAmount-dollars*100;
        System.out.println("你的钱数"+amount+"是"+dollars+"美元"+centsAmount+"美分。");
}
}
/*
请输入一个钱数,例如11.56:11.56
你的钱数11.56是11美元56美分。
*/

作者: 电玩    时间: 2013-4-21 19:20
本帖最后由 电玩 于 2013-4-21 19:33 编辑

2.10(使用图形用户界面输入)改写程序清单2-10,使用图形界面进行输入和输出。  (毕向东老师的第22天课才讲到的图形界面,这本书第一章就用了)


import javax.swing.JOptionPane;
class  ComputerChangeDialog10  //整钱兑零
{
public static void main(String[] args)
{
  String amountString=JOptionPane.showInputDialog("请输入一个钱数,例如11.56:");//接收钱数  11.56
  double amount=Double.parseDouble(amountString);//接收钱数  11.56
  int centsAmount=(int)(amount*100);//转换为以分币为单位的数量 1156
  int dollars=centsAmount/100;  //得到美元数  11
        centsAmount=centsAmount%100;//剩下的以分币为单位的数量 56 centsAmount=centsAmount-dollars*100;
        int quarters=centsAmount/25;//得到25美分的数量值  2
        centsAmount=centsAmount%25;//剩下的以分币为单位的数量 6 centsAmount=centsAmount-quarters*25;
     
  int dimes=centsAmount/10;//得到10美分的数量值 0
  centsAmount=centsAmount%10;//剩下的以分币为单位的数量 6 centsAmount=centsAmount-dimes*10;
  int nickels= centsAmount/5;//得到5美分的数量值 1
  centsAmount=centsAmount%5;//剩下的以分币为单位的数量 1 centsAmount=centsAmount-nickels*5;
  int pennies=centsAmount;//得到1美分的数量值 1
  String output="你的钱数"+amount+"可以兑换\n"+
   "\t"+dollars+" 个1美元\n"+
      "\t"+quarters+"  个25美分\n"+
   "\t"+dimes+"  个10美分\n"+
   "\t"+nickels+"  个5美分\n"+
   "\t"+pennies+"  个1美分\n";
JOptionPane.showMessageDialog(null,output);
}
}

截图02.png (7.33 KB, 下载次数: 38)

截图02.png

截图03.png (7.5 KB, 下载次数: 37)

截图03.png

截图04.png (9.48 KB, 下载次数: 41)

截图04.png

作者: 电玩    时间: 2013-4-21 22:49
本帖最后由 电玩 于 2013-4-22 00:08 编辑

2.11(财务应用程序:工资单)编写程序,读入下列信息并打印工资单:
雇员的名字(例如 张三)
每周工作小时数(例如 10)
每小时工资(例如 6.75)
联邦所得税税率(例如 20%)
州所得税税率(例如 9%)
编写两种版本的程序:(1)使用对话框获取输入并显示输出;
                    (2)使用控制台进行输入和输出。

实现第二种:
import java.util.Scanner;
public class  Payroll11 //工资单
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
  System.out.print("请输入雇员的姓名:");
  String name=input.next();//接收一个字符串 姓名
  System.out.print("请输入他每周工作的小时数:");
        double hours=input.nextDouble();//接收小时数
  System.out.print("请输入他每小时的工资:");
        double hourlyWage=input.nextDouble();//时薪
  System.out.print("请输入联邦所得税税率:");
        double federalTaxRate=input.nextDouble();//税率
  System.out.print("请输入州所得税税率:");
        double stateTaxRate=input.nextDouble();
        double total=hourlyWage*hours;//总工资
        System.out.println("------------------我是一条分割线---------------------------");
        System.out.print("雇员的姓名:"+name+"\n"+
      "每周工作时间:"+hours+"\n"+
   "时薪:  "+"$"+hourlyWage+"\n"+
   "工资总额:"+"$"+total+"\n"+
   "扣税:\n"+
       "\t"+"联邦所得税税率"+(federalTaxRate)+": $"+total*federalTaxRate+"\n"+
          "\t"+"州所得税税率"+(stateTaxRate)+": $"+(int)(total*stateTaxRate*100)/100.0+"\n"+
   "净工资:"+": $"+(int)(total*(1-federalTaxRate-stateTaxRate)*100)/100.0
   );
    }
}
/*
请输入雇员的姓名:张三
请输入他每周工作的小时数:10
请输入他每小时的工资:6.75
请输入联邦所得税税率:0.20
请输入州所得税税率:0.09
------------------我是一条分割线---------------------------
雇员的姓名:张三
每周工作时间:10.0
时薪:  $6.75
工资总额:$67.5
扣税:
        联邦所得税税率0.2: $13.5
        州所得税税率0.09: $6.07
净工资:: $47.92
*/

第一种实现:
import javax.swing.JOptionPane;
public class  PayrollDialog11 //工资单
{
public static void main(String[] args)
{
  
  String name=JOptionPane.showInputDialog("请输入雇员的姓名:");//接收一个字符串 姓名
        
        String hoursString=JOptionPane.showInputDialog("请输入他每周工作的小时数:");
  double hours=Double.parseDouble(hoursString);//接收小时数
        String hourlyWageString=JOptionPane.showInputDialog("请输入他每小时的工资:");
  double hourlyWage=Double.parseDouble(hourlyWageString);//时薪
        String federalTaxRateString=JOptionPane.showInputDialog("请输入联邦所得税税率:");
  double federalTaxRate=Double.parseDouble(federalTaxRateString);//税率
        String stateTaxRateString=JOptionPane.showInputDialog("请输入州所得税税率:");
  double stateTaxRate=Double.parseDouble(stateTaxRateString);
        double total=hourlyWage*hours;//总工资
        
        String output="雇员的姓名:"+name+"\n"+
      "每周工作时间:"+hours+"\n"+
   "时薪:  "+"$"+hourlyWage+"\n"+
   "工资总额:"+"$"+total+"\n"+
   "扣税:\n"+
       "\t"+"联邦所得税税率"+(federalTaxRate)+": $"+total*federalTaxRate+"\n"+
          "\t"+"州所得税税率"+(stateTaxRate)+": $"+(int)(total*stateTaxRate*100)/100.0+"\n"+
   "净工资:"+" $"+(int)(total*(1-federalTaxRate-stateTaxRate)*100)/100.0;
  JOptionPane.showMessageDialog(null,output);
    }
}

截图05.png (6.95 KB, 下载次数: 49)

截图05.png

截图06.png (7.12 KB, 下载次数: 37)

截图06.png

截图07.png (7.13 KB, 下载次数: 41)

截图07.png

截图08.png (7.13 KB, 下载次数: 50)

截图08.png

截图09.png (7.1 KB, 下载次数: 45)

截图09.png

截图10.png (11.26 KB, 下载次数: 34)

截图10.png

作者: 电玩    时间: 2013-4-22 09:20
本帖最后由 电玩 于 2013-4-22 09:56 编辑

2.12(财务应用程序:计算利息)如果你知道收支余额和年利率的百分比,你就可以使用下面的公式计算下个月要支付的利息额:
                         利息额=收支余额*(年利率/1200)
编写程序,读取收支余额和年百分利率,显示两个版本的下个利息:
(1)使用控制台进行输入和输出;
(2)使用对话框获取输入并显示输出。

第一种实现:
import java.util.Scanner;
public class ComputeInterest12  //计算利息
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
  System.out.print("请输入您收支余额和年利率(3相当于3%):");
  double balance=input.nextDouble();//接收收支平衡后的余额
  double interestRate=input.nextDouble();//接收年利息率
  double interests=balance*(interestRate/1200);          //  应付的下个月利息
  System.out.println("应付的下个月利息是"+(int)(interests*100)/100.0+"元。");
}
}
/*
请输入您收支余额和年利率(3相当于3%):1000 3.5
应付的下个月利息是2.91
*/

第二种实现:
import javax.swing.JOptionPane;
public class ComputeInterestDialog12  //计算利息
{
public static void main(String[] args)
{
  String balanceString=JOptionPane.showInputDialog("请输入您的收支余额:");
  double balance=Double.parseDouble(balanceString);//接收收支平衡后的余额
  
  String interestRateString=JOptionPane.showInputDialog("请输入您的年利率(3相当于3%):");
  double interestRate=Double.parseDouble(interestRateString);//接收年利息率
  double interests=balance*(interestRate/1200);          //  应付的下个月利息
  String output="应付的下个月利息是"+(int)(interests*100)/100.0+"元。";
        JOptionPane.showMessageDialog(null,output);
}
}


截图11.png (7.06 KB, 下载次数: 35)

截图11.png

截图12.png (7.39 KB, 下载次数: 41)

截图12.png

截图13.png (7.23 KB, 下载次数: 44)

截图13.png

作者: 电玩    时间: 2013-4-23 20:55
本帖最后由 电玩 于 2013-4-23 22:45 编辑

2.13(财务应用程序:计算未来投资值)编写程序,读取投资总额、年利率和年数,然后使用下面的公式显示未来投资金额:
futureInvestmentValue=investmentAmount*(1+annuallyInterestRate)[sup]numberOfYears*12
[/sup]
例如:如果输入的投资金额为1000,年利率为3.25%,年数为1,那么未来投资额为1032.98.
提示:使用方法Math.pow(a,b)来计算a的b次幂。


import java.util.Scanner;
public class FutureInvestmentValue13  //计算未来投资金额
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
  System.out.print("请输入您的投资总额:");
  double investmentAmount=input.nextDouble();//接收投资总额
        System.out.print("请输入您的年利率:");
  double interestRate=input.nextDouble();//接收年利息率
        System.out.print("请输入您的年数:");
  double years=input.nextDouble();//接收年数
double futureInvestmentValue=investmentAmount*Math.pow(1+interestRate/100,years*12);//未来投资金额
  
  System.out.println("您的未来投资金额是"+(int)(futureInvestmentValue*100)/100.0+"元。");
}
}
/* 为什么答案的未来投资金额是 1032.98????经过思考只有annuallyInterestRate  为月利息才行。Math.pow(1+interestRate/100/12,years*12);//
请输入您的投资总额:1000
请输入您的年利率:3.25
请输入您的年数:1
您的未来投资金额是1467.84元。
*/

作者: 电玩    时间: 2013-4-23 21:25
本帖最后由 电玩 于 2013-4-23 21:38 编辑

2.14(医疗应用程序:计算BMI)身体质量指数(BMI)是对体重的健康测量。它的值可以通过将体重(以公斤为单位)除以身高(以米为单位)的平方值得到。
编写程序,提示用户输入体重(以磅为单位)以及身高(以英寸为单位),然后显示BMI。
注意:一磅是0.45359237公斤而一英寸是0.0254米。

import java.util.Scanner;
public class Compute_BMI14  //计算BMI
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
  System.out.print("请输入您的磅体重:");
  double pounds=input.nextDouble();//接收磅体重
        double  kilogram=pounds*0.45359237;                  //磅转换为公斤
        System.out.print("请输入您的身高英寸:");
  double inches=input.nextDouble();//接收身高英寸
        double meter=inches*0.0254;    //英寸转换为米
       double bmi=kilogram/(meter*meter);//计算BMI
  
  System.out.println("您的BMI是"+bmi);
}
}
/*
请输入您的磅体重:95.5
请输入您的身高英寸:50
您的BMI是26.857257942215885
*/

作者: 电玩    时间: 2013-4-23 21:48
本帖最后由 电玩 于 2013-4-23 21:59 编辑

2.15(财务应用程序:复利值)假设你每月向银行账户存100美元,年利率为5%,那么每月利率是0.05/12=0.00417.
第一个月之后,账户上的值就变成: 100*(1+0.00417)=100.417
第二个月之后,账户上的值就变成:(100+100.417)*(1+0.00417)=201.252
第三个月之后,账户上的值就变成:(100+201.252)*(1+0.00417)=302.507
以此类推。
编写程序显示六个月后账户上的钱数。(在练习4.30中,你将使用循环来简化这里的代码,并能显示任何一个月之后的账户值)


public class Compounding15  //计算复利
{
public static void main(String[] args)
{   
  double money=0;
  for (int x=0;x<6 ;x++ )
  {
    money=(100+money)*(1+0.00417);//直接for循环
  }
  System.out.println("您的六个月之后的账户金额是"+(int)(money*100)/100.0+"元。");
}
}
/*
您的六个月之后的账户金额是608.81元。
*/
作者: 电玩    时间: 2013-4-23 22:06
本帖最后由 电玩 于 2013-4-23 22:13 编辑

其实,《java语言程序设计》(美 Y.Danilei Liang)这本书的编程题难是不难,但题量多,怪不得哈佛的学生要在图书馆通宵读书。而且与实践紧密相关。
2.16(科学方面:计算能量)编写程序,计算将水从初始温度加热到最终温度所需的能量。
程序应该提示用户输入水的重量(以千克为单位),以及水的初始温度和最终温度。
计算能量的公式是:Q=M*(最终温度-初始温度)*4184;
这里的M是以千克为单位的重量,温度以摄氏度为单位,而能量Q以焦耳为单位。

import java.util.Scanner;
public class ComputeEnergy16  //计算能量
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
  System.out.print("请输入水的重量(以千克为单位):");
  double kilogram=input.nextDouble();//接收水的重量
        System.out.print("请输入水的初始温度(以摄氏度为单位):");
  double initialTemperature=input.nextDouble();//接收初始温度
        System.out.print("请输入水的最终温度(以摄氏度为单位):");
  double finalTemperature=input.nextDouble();//接收最终温度
double energy=kilogram*(finalTemperature-initialTemperature)*4184;//计算能量
  
  System.out.println("能量需要"+energy+"焦耳。");
}
}
/*
请输入水的重量(以千克为单位):55.5
请输入水的初始温度(以摄氏度为单位):3.5
请输入水的最终温度(以摄氏度为单位):10.5
能量需要1625484.0焦耳。
*/

作者: 电玩    时间: 2013-4-23 22:38
本帖最后由 电玩 于 2013-4-23 22:58 编辑

2.17(科学方面:风寒温度)外面到底有多冷?只有温度是不足以提供答案的,包括风速、相对湿度以及阳光等其他的因素在确定室外是否寒冷方面都起了很重要的作用。2001年,国家气象服务(NWS)利用温度和风速,使用新的风寒温度来测量寒冷程度。计算公式如下所示:
t[sub]wc[/sub]=35.74+0.6215t[sub]0[/sub]-35.75V[sub]0.16[/sub]+0.4275t[sub]0[/sub] V[sup]0.16[/sup];


这里的的t[sub]0[/sub]是室外温度,以华氏摄氏度为单位,而V是速度,以每小时英里数为单位。t[sub]wc[/sub]是风寒温度。该公式不适用于风速低于2mph或温度在-58[sup]o[/sup]F以下和41[sup]o[/sup]F以上的情况。
编写程序,提示用户输入在-58oF和41oF之间的整数,同时大于或等于2的风速,然后显示风寒温度。使用Math.pow(a,b)来计算V[sup]0.16[/sup]

import java.util.Scanner;
public class ColdTemperature17  //计算风寒温度
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
  System.out.print("请输入室外温度(以华氏摄氏度为单位:-58度到41度之间的数字):");
  double temperature=input.nextDouble();//接收室外温度

        System.out.print("请输入风速(以每小时英里数为单位,输入大于等于2的数字):");
  double speed=input.nextDouble();//接收风速

        double coldTemperature=35.74+0.6215*temperature-35.75*Math.pow(speed,0.16)+0.4275*temperature*Math.pow(speed,0.16);//计算风寒温度
  
  System.out.println("风寒温度是"+coldTemperature+"华氏度。");
}
}
/*
请输入室外温度(以华氏摄氏度为单位:-58度到41度之间的数字):5.3
请输入风速(以每小时英里数为单位,输入大于等于2的数字):6
风寒温度是-5.567068455881625华氏度。
*/


作者: 电玩    时间: 2013-4-23 23:01
本帖最后由 电玩 于 2013-4-23 23:06 编辑

2.18(打印表格)编写程序,显示下面的表格:
a            b             pow(a,b)
1            2             1
2            3             8
3            4             81
4            4             1024
5            6             15625


class PrintForm18 //打印表格,这题太简单了。难道是复习第一单元的打印吗?
{
public static void main(String[] args)
{
  System.out.println("a            b             pow(a,b)");
  System.out.println("1            2             1");
  System.out.println("2            3             8");
  System.out.println("3            4             81");
  System.out.println("4            4             1024");
  System.out.println("5            6             15625");
}
}

作者: 电玩    时间: 2013-4-23 23:07
本帖最后由 电玩 于 2013-4-23 23:30 编辑

2.19(随机字符)编写程序,使用System.CurrentTimeMillis()显示任意一个大写字母。

class ShowCurrentTime 19
{
public static void main(String[] args)
{
  long totalMilliseconds=System.currentTimeMillis();//显示当前时间。从1970年1月1日午夜到现在的毫秒数
  char ch=(char)totalMilliseconds;
  System.out.println(ch);
}
}
/*好像不一定显示大写字母的,只能显示ASCII码,而且会随时间而变化

*/

作者: 电玩    时间: 2013-4-23 23:34
本帖最后由 电玩 于 2013-4-23 23:36 编辑

2.20(几何方面:两点间的距离)编写程序,提示用户输入两个点(x1,x2)和(y1,y2),然后显示两点间的距离。计算两点间距离的公式是
注意:可以使用Math.pow(a,0.5)来计算。

截图14.png (4.87 KB, 下载次数: 42)

截图14.png

作者: 电玩    时间: 2013-4-23 23:54
import java.util.Scanner;
public class DistanceTwoPoints20 //计算两点间距离
{
        public static void main(String[] args)
        {
                Scanner input=new Scanner(System.in);
                System.out.print("请输入第一个点的坐标 x1 y1:");
                double firstPointx1=input.nextDouble();//接收x1
        double firstPointy1=input.nextDouble();  //接收y1              
        

        System.out.print("请输入第二个点的坐标 x2 y2:");
                double secondPointx2=input.nextDouble();//接收x2
        double secondPointy2=input.nextDouble();   //接收y2

                double firstPoint=Math.pow(secondPointx2-firstPointx1,2);
        double secondPoint=Math.pow(secondPointy2-firstPointy1,2);
        double distanceTwoPoints=Math.pow(firstPoint+secondPoint,0.5);//计算两点间距离
               
                System.out.println("两点间距离是"+distanceTwoPoints);
        }
}
/*
请输入第一个点的坐标 x1 y1:1.5 -3.4
请输入第二个点的坐标 x2 y2:4 5
两点间距离是8.764131445842194
*/
作者: 电玩    时间: 2013-4-23 23:56
本帖最后由 电玩 于 2013-4-24 00:03 编辑

2.21(几何方面:三角形的面积)编写程序,提示用户输入三角形的三个点(x1,y1),(x2,y2),(x3,y3),然后显示它的买面积。计算三角形的公式是:
s=(side1+side2+side3)/2;

截图16.png (6.96 KB, 下载次数: 44)

截图16.png

作者: 电玩    时间: 2013-4-24 10:29
import java.util.Scanner;//此题是建立在第21题的基础上的 循序渐进  
虽然我已经快学完集合类了。这些题目看上去我都会做。但看的懂与实际上敲出来是有差距的。尤其当你还是一个新手,敲代码没有达到十万行时,多敲敲代码是很有好处的。
public class AreaOfTriangle21  //计算三角形面积
{
        public static void main(String[] args)
        {
                Scanner input=new Scanner(System.in);
                System.out.print("请输入坐标 x1 y1 x2 y2 x3 y3:");
                double firstPointx1=input.nextDouble();//接收x1
        double firstPointy1=input.nextDouble();  //接收y1              
        
        double secondPointx2=input.nextDouble();//接收x2
        double secondPointy2=input.nextDouble();   //接收y2

                double thirdPointx3=input.nextDouble();//接收x3
        double thirdPointy3=input.nextDouble();   //接收y3

                double firstPoint=Math.pow(secondPointx2-firstPointx1,2);
        double secondPoint=Math.pow(secondPointy2-firstPointy1,2);
        double side1=Math.pow(firstPoint+secondPoint,0.5);//计算(x1,y1)到(x2,y2)的两点间距离
               
                   firstPoint=Math.pow(thirdPointx3-firstPointx1,2);
        double thirdPoint=Math.pow(thirdPointy3-firstPointy1,2);
        double side2=Math.pow(firstPoint+thirdPoint,0.5);//计算(x1,y1)到(x3,y3)的两点间距离
               
                  secondPoint=Math.pow(thirdPointx3-secondPointx2,2);
          thirdPoint=Math.pow(thirdPointy3-secondPointy2,2);
        double side3=Math.pow(thirdPoint+secondPoint,0.5);//计算(x3,y3)到(x2,y2)的两点间距离
               
                double s=(side1+side2+side3)/2;
                double area=Math.pow(s*(s-side1)*(s-side2)*(s-side3),0.5);//计算三角形面积
               
                System.out.println("三角形的面积是"+(int)(area*100)/100.0);
        }
}
/*
请输入坐标 x1 y1 x2 y2 x3 y3:1.5 -3.4 4.6 5 9.5 -3.4
三角形的面积是33.6
*/
作者: 电玩    时间: 2013-4-24 10:34
2.22(几何方面:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。计算六边形面积的公式是:
这里的s就是边长。

截图18.png (3.8 KB, 下载次数: 39)

截图18.png

作者: 电玩    时间: 2013-4-24 10:42
import java.util.Scanner;
class  HexagonalArea22  //计算六边形的面积
{
        public static void main(String[] args)
        {
                Scanner input=new Scanner(System.in);
                System.out.print("请输入六边形的边长 :");
                double side=input.nextDouble();//接收边长

                double area=(3*Math.pow(3,0.5))/2*side*side;//计算六边形的面积
                System.out.print("六边形的面积是"+area);
        }
}
/*
请输入六边形的边长 :5.5
六边形的面积是78.59180539343781
*/
作者: 电玩    时间: 2013-4-24 10:46
本帖最后由 电玩 于 2013-4-24 10:52 编辑

2.23(物理方面:加速度)平均加速度定义为速度的变化量除以这个变化所用的时间,如下式所示:
a=(V[sub]1[/sub]-V[sub]0[/sub])/t
编写程序。
提示用户输入以米/秒为单位的起始速度V[sub]0[/sub],以米/秒为单位的终止速度V[sub]1[/sub],以及以秒为单位的时间段,最后显示平均加速度。

import java.util.Scanner;
class  Acceleration23 //计算平均加速度
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
  System.out.print("请输入起始速度和终止速度(以米/秒为单位)和时间段(以秒为单位) :");
  double v0=input.nextDouble();//接收起始速度
  double v1=input.nextDouble();//接收终止速度
  double t=input.nextDouble();//接收时间段

  double a=(v1-v0)/t;//计算平均加速度
  System.out.println("平均加速度是"+a);
}
}
/*
请输入起始速度和终止速度(以米/秒为单位)和时间段(以秒为单位) :5.5 50.9 4.5
平均加速度是10.088888888888889
*/


作者: 电玩    时间: 2013-4-24 11:25
本帖最后由 电玩 于 2013-4-24 11:32 编辑

2.24(物理方面:求出跑道长度)假设一个飞机的加速度是a而起飞速度是v,那么可以使用下面的公式计算出飞机起飞所需的最短的跑道长度:
length=V[sup]2[/sup]/2a
编写程序,提示用户输入以米/秒为单位的速度v和以米/秒的平方(m/s[sup]2[/sup])为单位的加速度a,然后显示最短跑道长度。

import java.util.Scanner;
class  LengthOfRunway24 //计算跑道长度
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
  System.out.print("请输入速度(以米/秒为单位)和加速度(以米/秒的平方为单位) :");
  double v=input.nextDouble();//接收速度
  double a=input.nextDouble();//接收加速度
  

  double length=v*v/(2*a);//计算跑道长度
  System.out.println("最短的跑道长度是"+length);
}
}
/*
请输入速度(以米/秒为单位)和加速度(以米/秒的平方为单位) :60 3.5
最短的跑道长度是514.2857142857143
*/


作者: 电玩    时间: 2013-4-24 11:35
本帖最后由 电玩 于 2013-4-24 12:06 编辑

2.25(当前时间)程序清单2-6给出了显示当前格林威治时间的程序。修改这个程序,使之能够做到程序提示用户输入相对于GMT的时区偏移量,然后显示在这个特定时区的时间。

//程序清单2-6 显示当前时间
class ShowCurrentTime
{
public static void main(String[] args)
{
  long totalMilliseconds=System.currentTimeMillis();//当前时间与1970年1月1日0点之间单位为毫秒的差值
long totalSeconds=totalMilliseconds/1000;//总秒数
long currentSecond=totalSeconds%60;//当前秒数
long totalMinutes=totalSeconds/60;//总分钟数
long currentMinutes=totalMinutes%60;//当前分钟数
long totalHours=totalMinutes/60;//总小时数
long currentHours=totalHours%60;//当前小时数
System.out.println("当前格林威治时间是:  "+currentHours+":"+currentMinutes+":"+currentSecond);
}
}
/*
当前时间是:  15:51:2


import java.util.Scanner;
class ShowCurrentTime25
{
public static void main(String[] args)
{
Scanner input=new Scanner(System.in);
System.out.print("请输入您所在的时区与格林威治时间的偏移量:");
int time=input.nextInt();//接收偏移量
  long totalMilliseconds=System.currentTimeMillis();//当前时间与1970年1月1日0点之间单位为毫秒的差值
long totalSeconds=totalMilliseconds/1000;//总秒数
long currentSecond=totalSeconds%60;//当前秒数
long totalMinutes=totalSeconds/60;//总分钟数
long currentMinutes=totalMinutes%60;//当前分钟数
long totalHours=totalMinutes/60;//总小时数
long currentHours=totalHours%60;//当前小时数
System.out.println("当前您的时间是:  "+(currentHours+time)+":"+currentMinutes+":"+currentSecond);
}
}
/*可是我现在的时间是12点,为什么会相差12个小时呢??格林威治时间比北京时间慢8小时 格林威治时间+8小时=北京时间
请输入您所在的时区与格林威治时间的偏移量:8
当前您的时间是:  24:3:30
*/

作者: 电玩    时间: 2013-4-24 12:10
总算做完第二章的题目了,可以开始第三章的题目了。但可能要过一两天才能开始,因为要先将第三章的内容中的代码先敲一遍。虽然与我们毕向东老师讲的知识点一样,但这本书拓展的更广、更深。通过做第二章的题目,我将第二章的几页纸都翻旧了。
作者: 电玩    时间: 2013-4-24 12:25
//程序清单 3-1 一个简单的数学学习工具
import java.util.Scanner;
class AdditionQuiz
{
        public static void main(String[] args)
        {
        int number1=(int)(System.currentTimeMillis()%10);//取随机数
                int number2=(int)(System.currentTimeMillis()*7%10);

        Scanner input=new Scanner(System.in);
        System.out.print("What is "+number1+" + "+number2+" ? ");//请用户输入答案

                int answer=input.nextInt();
        System.out.println(number1+" + "+number2+" = "+answer+" is "+(number1+number2==answer) );//给答案判断
        }
}
/* 可以给小学生算0-10以内的加减乘除
What is 0 + 0 ? 1
0 + 0 = 1 is false

What is 5 + 5 ? 10
5 + 5 = 10 is true
*/
作者: 电玩    时间: 2013-4-24 13:35
//程序清单3-2 给出一个程序,提示用户输入一个整数。如果该数字是5的倍数,打印HiFive。如果该数字能被2整除,打印HiEven。
import java.util.Scanner;
class  SimpleIfDemo
{
        public static void main(String[] args)
        {
                Scanner input=new Scanner(System.in);
               
                System.out.print("请输入一个整数: ");
                int number=input.nextInt();

                if(number%5==0)
                        System.out.println("HiFive");//5的倍数

                if(number%2==0)
                        System.out.println("HiEven");//被2整除
        }
}
/*
请输入一个整数: 10
HiFive
HiEven
*/
作者: 电玩    时间: 2013-4-24 13:56
//程序清单3-3 猜生日(其实猜出生月份中的日期(0--31))
import java.util.Scanner;
class  GuessBirthday
{
        public static void main(String[] args)
        {
                String set1=
                        "1  3  5  7\n"+
                        "9 11 13 15\n"+
                        "17 19 21 23\n"+
                        "25 27 29 31";
                String set2=
                        "2  3  6  7\n"+
                        "10  11 14 15\n"+
                        "18 19 22 23\n"+
                        "26 27 30 31";
                String set3=
                        "4  5  6  7\n"+
                        "12 13  14 15\n"+
                        "20 21  22 23\n"+
                        "28  29  30  31";
                String set4=
                        "8  9 10  11\n"+
                        "12  13 14 15\n"+
                        "24  25 26 27\n"+
                        "28   29 30  31\n";
                String set5=
                        "16 17 18 19\n"+
                        "20 21 22 23\n"+
                        "24 25 26 27\n"+
                        "28 29 30 31";

                int day=0;

                Scanner input=new Scanner(System.in);
                System.out.println("您的出生日期在set1 中吗?");
                System.out.println(set1);
                System.out.print("请输入0表示不是,输入1表示是:");
                int answer=input.nextInt();

                if(answer==1)
                        day +=1;

        System.out.println("您的出生日期在set2 中吗?");
                System.out.println(set2);
                System.out.print("请输入0表示不是,输入1表示是:");
                 answer=input.nextInt();

                if(answer==1)
                        day +=2;

                System.out.println("您的出生日期在set3 中吗?");
                System.out.println(set3);
                System.out.print("请输入0表示不是,输入1表示是:");
                 answer=input.nextInt();

                if(answer==1)
                        day +=4;

                System.out.println("您的出生日期在set4 中吗?");
                System.out.println(set4);
                System.out.print("请输入0表示不是,输入1表示是:");
                 answer=input.nextInt();

                if(answer==1)
                        day +=8;

                System.out.println("您的出生日期在set5 中吗?");
                System.out.println(set5);
                System.out.print("请输入0表示不是,输入1表示是:");
                 answer=input.nextInt();

                if(answer==1)
                        day +=16;

        System.out.println("\n您的出生日期是"+day+"!");

        }
}
/*五个集合中的数字是有规律的。1、2、4、8、16分别对应二进制1、10、100、1000、10000.
您的出生日期在set1 中吗?
1  3  5  7
9 11 13 15
17 19 21 23
25 27 29 31
请输入0表示不是,输入1表示是:1
您的出生日期在set2 中吗?
2  3  6  7
10  11 14 15
18 19 22 23
26 27 30 31
请输入0表示不是,输入1表示是:0
您的出生日期在set3 中吗?
4  5  6  7
12 13  14 15
20 21  22 23
28  29  30  31
请输入0表示不是,输入1表示是:1
您的出生日期在set4 中吗?
8  9 10  11
12  13 14 15
24  25 26 27
28   29 30  31

请输入0表示不是,输入1表示是:0
您的出生日期在set5 中吗?
16 17 18 19
20 21 22 23
24 25 26 27
28 29 30 31
请输入0表示不是,输入1表示是:1

您的出生日期是21!
*/
作者: 电玩    时间: 2013-4-24 14:12
//程序清单 3-4 一个改进的数学学习工具
import java.util.Scanner;
class SubtractionQuiz
{
        public static void main(String[] args)
        {
        int number1=(int)(Math.random()*10);//取随机数(0到9之间的整数)
                int number2=(int)(Math.random()*10);

                if (number1<number2) //比较两者大小,如果number1<number2,则互换数值
                {
                        int temp=number1;
                        number1=number2;
                        number2=temp;
                }

        System.out.print("What is "+number1+" - "+number2+" ? ");//请用户输入答案

        Scanner input=new Scanner(System.in);
        int answer=input.nextInt();

          
          if (number1-number2==answer)   //给答案判断       
                {
           System.out.println("你答对了!");
                }else {
                System.out.println("你答错了!\n"+number1+" - "+number2+" = "+(number1-number2) );
                }
        }
}
/*
What is 9 - 9 ? 0
你答对了!

What is 9 - 6 ? 1
你答错了!
9 - 6 = 3
*/
作者: 电玩    时间: 2013-4-26 11:17
//程序清单3-5 计算身体质量指数  参看前面2.14题
import java.util.*;
class  ComputeAndInterpretBMI//计算身体质量指数
{
        public static void main(String[] args)
        {
                Scanner input=new Scanner(System.in);

                System.out.print("请输入以磅为单位的重量:");
                double weight =input.nextDouble();//接收重量

       System.out.print("请输入以英尺为单位的高度:");
                double height =input.nextDouble();//接收高度

                final double KIOGRAMS_PER_POUND=0.45359237;//磅与千克的转换量 常量
final double METERS_PER_INCH=0.0254;//英尺与米德转换量  常量

double weightInKiograms=weight*KIOGRAMS_PER_POUND;//千克
double heightInMeters=height*METERS_PER_INCH;//米
double bmi=weightInKiograms/(heightInMeters*heightInMeters);//BMI计算公式

System.out.println("您的BMI是"+bmi);
if(bmi<16)
        System.out.println("您体重严重偏轻");
else if(bmi<18)
        System.out.println("您体重偏轻");
else if(bmi<24)
        System.out.println("您体重正常");
else if(bmi<29)
        System.out.println("您体重超重");
else if(bmi<35)
        System.out.println("您体重严重超重");
else
        System.out.println("您体重非常严重超重");

        }
}
/*
请输入以磅为单位的重量:146
请输入以英尺为单位的高度:70
您的BMI是20.948603801493316
您体重正常
*/
作者: 电玩    时间: 2013-4-26 12:25
//程序清单3-6 计算税款 做财会跟这些大数字打交道,一点都不能错,应该很辛苦的,眼睛会看花的。
import java.util.*;
class  ComputeTax  //计算税款,难是不难,考查人的耐心与眼力
{
        public static void main(String[] args)
        {
                Scanner input=new Scanner(System.in);
                System.out.print("(0表示单身纳税人,1表示已婚共同纳税人或证实的鳏寡,\n"+
                        "2表示已婚单独纳税人,3表示家庭户主纳税人)"+
                        "请输入您的报税身份: ");
                int status=input.nextInt();//接收数字,确定身份

       System.out.print("请输入您的收入:");
           double income=input.nextDouble();

           double tax=0;

           if(status==0){  //计算单身纳税人
           if(income<=8350)
                   tax=income*0.10;
           else if(income<=33950)
                   tax=8350*0.10+(income-8350)*0.15;
           else if(income<=82250)
                   tax=8350*0.10+(33950-8350)*0.15+(income-33950)*0.25;
           else if(income<=171550)
                   tax=8350*0.10+(33950-8350)*0.15+(82250-33950)*0.25+(income-82250)*0.28;
           else if(income<=372950)
   tax=8350*0.10+(33950-8350)*0.15+(82250-33950)*0.25+(171550-82250)*0.28+(income-171550)*0.33;
           else
tax=8350*0.10+(33950-8350)*0.15+(82250-33950)*0.25+(171550-82250)*0.28+(372950-171550)*0.33+(income-372950)*0.35;
           }
           else if(status==1){//计算已婚共同纳税人或证实的鳏寡
            if(income<=16700)
                   tax=income*0.10;
           else if(income<=67900)
                   tax=16700*0.10+(income-16700)*0.15;
           else if(income<=137050)
                   tax=16700*0.10+(67900-16700)*0.15+(income-67900)*0.25;
           else if(income<=208850)
                   tax=16700*0.10+(67900-16700)*0.15+(137050-67900)*0.25+(income-137050)*0.28;
           else if(income<=372950)
   tax=16700*0.10+(67900-16700)*0.15+(137050-67900)*0.25+(208850-137050)*0.28+(income-208850)*0.33;
           else
tax=16700*0.10+(67900-16700)*0.15+(137050-67900)*0.25+(208850-137050)*0.28+(372950-208850)*0.33+(income-372950)*0.35;
           
           }
           else if(status==2){//计算已婚单独纳税人
if(income<=8350)
                   tax=income*0.10;
           else if(income<=33950)
                   tax=8350*0.10+(income-8350)*0.15;
           else if(income<=68525)
                   tax=8350*0.10+(33950-8350)*0.15+(income-33950)*0.25;
           else if(income<=104425)
                   tax=8350*0.10+(33950-8350)*0.15+(68525-33950)*0.25+(income-68525)*0.28;
           else if(income<=186475)
   tax=8350*0.10+(33950-8350)*0.15+(68525-33950)*0.25+(104425-68525)*0.28+(income-104425)*0.33;
           else
tax=8350*0.10+(33950-8350)*0.15+(68525-33950)*0.25+(104425-68525)*0.28+(186475-104425)*0.33+(income-186475)*0.35;           
           
           
           }
           else if(status==3){//计算家庭户主纳税人
if(income<=11950)
                   tax=income*0.10;
           else if(income<=45500)
                   tax=11950*0.10+(income-11950)*0.15;
           else if(income<=117450)
                   tax=11950*0.10+(45500-11950)*0.15+(income-45500)*0.25;
           else if(income<=190200)
                   tax=11950*0.10+(45500-11950)*0.15+(117450-45500)*0.25+(income-117450)*0.28;
           else if(income<=372950)
   tax=11950*0.10+(45500-11950)*0.15+(117450-45500)*0.25+(190200-117450)*0.28+(income-171550)*0.33;
           else
tax=11950*0.10+(45500-11950)*0.15+(117450-45500)*0.25+(190200-117450)*0.28+(372950-171550)*0.33+(income-372950)*0.35;   
           
           
           }
           else{
           System.out.println("错误:无效状态");
           System.exit(0);
           }

           System.out.println("应付税款是 "+(int)(tax*100)/100.0);
        }
}
/*
(0表示单身纳税人,1表示已婚共同纳税人或证实的鳏寡,
2表示已婚单独纳税人,3表示家庭户主纳税人)请输入您的报税身份: 0
请输入您的收入:400000
应付税款是 117683.5
*/
作者: 电玩    时间: 2013-4-26 12:47
//程序清单3-7 检验一个数是否能被2和3整除,是被2整数还是被3整数,是否只能被2或3两者中的一个整除
import java.util.*;
class  TestBooleanOperators  //测试布尔运算符
{
        public static void main(String[] args)
        {
                Scanner input=new Scanner(System.in);
                System.out.print("请输入一个整数:");
                int number =input.nextInt();

System.out.println(number+"能被2和3整除吗?"+(number%2==0 && number%3==0)+"\n"+
        number+"能被2或3整除吗?"+(number%2==0 || number%3==0)+"\n"+
        number+"只能被2或3中的一个整除,但不能同时使用吗?"+(number%2==0 ^ number%3==0));
        }
}
/*
请输入一个整数:18
18能被2和3整除吗?true
18能被2或3整除吗?true
18只能被2或3中的一个整除,但不能同时使用吗?false
*/
作者: 电玩    时间: 2013-4-27 09:48
//程序清单 3-8 判定闰年 毕老师曾讲过 首先,要明白闰年的定义--某年可以被4整除而不能被100整除,或者可以被400整除。
import java.util.Scanner;
class  LeapYear //判定闰年
{
        public static void main(String[] args)
        {
                Scanner input=new Scanner(System.in);
                System.out.print("请您输入年份: ");
                int year=input.nextInt();

                boolean isLeapYear=(year%4==0 && year%100 !=0)||(year%400==0);//将定义用逻辑运算符实现
System.out.println(year+"年是闰年吗? "+isLeapYear);

        }
}
/*
请您输入年份: 2013
2013年是闰年吗? false

请您输入年份: 2008
2008年是闰年吗? true
*/
作者: 电玩    时间: 2013-4-27 10:30
/*
程序清单 3-9 彩票问题
假设你想开发一个玩彩票的游戏,程序随机地产生一个两位数的彩票,提示用户输入一个两位数,
然后按照下面的规则判定用户是否能赢:
1.如果用户的输入匹配彩票的实际顺序,奖金为10000美金。
2.如果用户输入的所有数字匹配彩票的所有数字,奖金为3000美金。
3.如果用户输入的一个数字匹配彩票的一个数字,奖金为1000美金。
*/
import java.util.Scanner;
class  Lottery //抽奖
{
        public static void main(String[] args)
        {
                int lottery=(int)(Math.random()*100);//随机生成一个彩票数
               
                Scanner input=new Scanner(System.in);
                System.out.print("请输入您的彩票选号(两位数字): ");
                int guess=input.nextInt();

                int lotteryDigit1=lottery/10;  //彩票的十位数
                int lotteryDigit2=lottery%10;  //彩票的个位数

                int guessDigit1=guess/10;  //选号的十位数
                int guessDigit2=guess%10;  //选号的个位数


                System.out.println("这期彩票的有奖号码是: "+lottery);
        if(guess==lottery)
                System.out.println(" 您猜中了所有的数字并且顺序一样:恭喜您获得10000美金的奖励,欢迎您再次光临");
else if(guessDigit2==lotteryDigit1 && guessDigit1==lotteryDigit2)
System.out.println(" 您猜中了所有的数字但顺序不一样:恭喜您获得3000美金的奖励,欢迎您再次光临");
        else if(guessDigit1==lotteryDigit1 ||guessDigit1==lotteryDigit2
                ||guessDigit2==lotteryDigit1||guessDigit2==lotteryDigit2)
        System.out.println(" 您只猜中了一个的数字:恭喜您获得1000美金的奖励,欢迎您再次光临");
        else
                System.out.println(" 很遗憾!您没猜中了任何数字:不要放弃,请再接再厉,下次获大奖的可能就是您哦!");
        }
}
/*我猜彩票的手气不好,大部分应该猜的都应该是 谢谢惠顾
请输入您的彩票选号(两位数字): 45
这期彩票的有奖号码是: 26
很遗憾!您没猜中了任何数字:不要放弃,请再接再厉,下次获大奖的可能就是您哦!
*/
作者: 电玩    时间: 2013-4-27 10:54
本帖最后由 电玩 于 2013-4-27 10:56 编辑

//程序清单 3-10 以对话框的形式编写 程序清单3-3 猜生日
import javax.swing.JOptionPane;
class  GuessBirthdayUsingConfimationDialog //猜生日使用确认对话框
{
        public static void main(String[] args)
        {
                String set1=
                        "1  3  5  7\n"+
                        "9 11 13 15\n"+
                        "17 19 21 23\n"+
                        "25 27 29 31";
                String set2=
                        "2  3  6  7\n"+
                        "10  11 14 15\n"+
                        "18 19 22 23\n"+
                        "26 27 30 31";
                String set3=
                        "4  5  6  7\n"+
                        "12 13  14 15\n"+
                        "20 21  22 23\n"+
                        "28  29  30  31";
                String set4=
                        "8  9 10  11\n"+
                        "12  13 14 15\n"+
                        "24  25 26 27\n"+
                        "28   29 30  31\n";
                String set5=
                        "16 17 18 19\n"+
                        "20 21 22 23\n"+
                        "24 25 26 27\n"+
                        "28 29 30 31";

                int day=0;

               
                int answer=JOptionPane.showConfirmDialog(null,"您的出生日期在set1 中吗?\n"+set1);

                if(answer==JOptionPane.YES_OPTION)
                        day +=1;

        answer=JOptionPane.showConfirmDialog(null,"您的出生日期在set2 中吗?\n"+set2);

                if(answer==JOptionPane.YES_OPTION)
                        day +=2;

                answer=JOptionPane.showConfirmDialog(null,"您的出生日期在set3 中吗?\n"+set3);

                if(answer==JOptionPane.YES_OPTION)
                        day +=4;

                answer=JOptionPane.showConfirmDialog(null,"您的出生日期在set4 中吗?\n"+set4);

                if(answer==JOptionPane.YES_OPTION)
                        day +=8;

                answer=JOptionPane.showConfirmDialog(null,"您的出生日期在set5 中吗?\n"+set5);

                if(answer==JOptionPane.YES_OPTION)
                        day +=16;

JOptionPane.showMessageDialog(null,"您的出生日期是"+day+"!");
        
               
        }
}

截图19.png (9.52 KB, 下载次数: 0)

截图19.png

截图20.png (9.82 KB, 下载次数: 0)

截图20.png

截图21.png (9.49 KB, 下载次数: 0)

截图21.png

截图22.png (9.46 KB, 下载次数: 0)

截图22.png

截图23.png (9.34 KB, 下载次数: 0)

截图23.png

截图24.png (7.08 KB, 下载次数: 0)

截图24.png

作者: 电玩    时间: 2013-4-27 10:59
本帖最后由 电玩 于 2013-4-27 11:05 编辑

哈哈!通过敲程序清单的代码,我翻完了第三章 选择。又可以开始编写第三章的编程练习题了。
不过之前我还是先看看 第三章的复习题。

可以从这本书的配套网站下载复习题的答案  http://www.cs.armstrong.edu/liang/intro8e/
第三章的复习题 答案:(不过是纯英文的)

作者: 电玩    时间: 2013-4-27 11:05
本帖最后由 电玩 于 2013-4-27 20:34 编辑

第三章的复习题 答案:(不过是纯英文的)具体的题目大家可以下载电子版看看
Java语言程序设计-进阶篇(原书第8版。  http://download.csdn.net/detail/lx76939412/4768179
http://download.csdn.net/download/lx76939412/4768171  Java语言程序设计-基础篇(原书第8版   

终于看集合类了,开始看 IO 视频。



  

作者: 电玩    时间: 2013-4-28 12:00
本帖最后由 电玩 于 2013-4-28 12:04 编辑

3.1(代数方面:解一元二次方程)可以使用下面的公式求一元二次方程ax[sup]2[/sup]+bx+c=0的两个根:
b[sup]2[/sup]-4ac称作一元二次方程的判别式。如果它是正值,那么一元二次方程就有两个正根。如果它为0,方程式就只有一个根。如果它是负值,方程式无实根。
编写程序,提示用户输入a,b,c的值,并且显示基于判别式的结果。如果这个判别式为正,显示两个根。如果判别式为0,显示一个根。否则,显示“该方程无实根”。
注意:可以使用Math.poe(x,0.5)来计算  根号x。

截图25.png (4.57 KB, 下载次数: 0)

截图25.png

作者: 电玩    时间: 2013-4-28 12:19
import java.util.Scanner;
class  QuadraticEquation01 //解一元二次方程
{
        public static void main(String[] args)
        {
        Scanner input=new Scanner(System.in);
                System.out.print("请输入a,b,c的值 :");
                double a=input.nextDouble();//接收a值
                double b=input.nextDouble();//接收b值
                double c=input.nextDouble();//接收c值

                double num=b*b-4*a*c;
                double r1=(-b+Math.pow(num,0.5))/2*a;
                double r2=(-b+Math.pow(num,0.5))/2*a;
                if (num>0 )
                {
          System.out.println("这个一元二次方程的两个根分别为"+r1+"和"+r2);
                }else if(num==0){
         System.out.println("这个一元二次方程只有一个根,是"+r1);
                }else
                System.out.println("该方程无实根");
        }
}
/*
请输入a,b,c的值 :1.0 3 1
这个一元二次方程的两个根分别为-0.3819660112501051和-0.3819660112501051

请输入a,b,c的值 :1 2.0 1
这个一元二次方程只有一个根,是-1.0

请输入a,b,c的值 :1 2 3
该方程无实根
*/
作者: 电玩    时间: 2013-4-28 12:21
本帖最后由 电玩 于 2013-4-28 12:28 编辑

3.2(检查一个数字是否是偶数)编写程序,读入一个整数并检查它是不是偶数。

import java.util.Scanner;
class  Even02 //检查一个数字是否是偶数
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
  System.out.print("请输入一个整数:");
  int number =input.nextInt();
if (number%2==0)
{
  System.out.println(number+"是偶数吗? "+(number%2==0));
}else
  System.out.println(number+"是偶数吗? "+(number%2==0));
}
}
/*
请输入一个整数:25
25是偶数吗? false
请输入一个整数:2000
2000是偶数吗? true
*/

作者: 电玩    时间: 2013-4-28 12:34
本帖最后由 电玩 于 2013-4-28 12:43 编辑

3.3(代数方面:求解2*2线性方程)可以使用Cramer规则解下面2*2线性方程组:
a*x+b*y=e    x=(e*d-b*f)/(a*d-b*c)      y=(a*f-e*c)/(a*d-b*c)
c*x+d*y=f
编写程序,提示用户输入a,b,c,d,e和f,然后显示结果。如果ad-bc为0,报考消息“方程式无解”。

import java.util.Scanner;
class LinearEquations03 //求解2*2线性方程
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
  System.out.print("请输入a,b,c,d,e,f的值 :");
  double a=input.nextDouble();//接收a值
  double b=input.nextDouble();//接收b值
  double c=input.nextDouble();//接收c值
  double d=input.nextDouble();//接收d值
  double e=input.nextDouble();//接收e值
  double f=input.nextDouble();//接收f值
  if (a*d-b*c!=0)
  {
System.out.println("该方程式中x是"+(e*d-b*f)/(a*d-b*c) +"  和y是  "+(a*f-e*c)/(a*d-b*c));
  }else
  System.out.println("该方程式无解!");
}
}
/*
请输入a,b,c,d,e,f的值 :9.0 4.0 3.0 -5.0 -6.0 -21.0
该方程式中x是-2.0  和y是  3.0
请输入a,b,c,d,e,f的值 :1.0 2.0 2.0 4.0 4.0 5.0
该方程式无解!
*/

作者: 电玩    时间: 2013-4-28 12:45
本帖最后由 电玩 于 2013-4-28 12:55 编辑

3.4(游戏:学习加法)编写程序,产生两个100以下的整数,然后提示用户输入这两个整数的和。如果答案正确。程序报告true,否则,报告flase.

import java.util.Scanner;
class LearningAddition04 //学习加法
{
public static void main(String[] args)
{
  int number1=(int)(Math.random()*100);//取随机数(10到90之间的整数)
  int number2=(int)(Math.random()*100);
        
  Scanner input=new Scanner(System.in);
  System.out.print(number1+"  +  "+number2+"  =  "+" ? " );
  int answer =input.nextInt();
  System.out.println(number1+"  +  "+number2+"  =  "+answer+"  是 "+(number1+number2==answer));
}
}
/*
8  +  39  =   ? 40
8  +  39  =  40  是 false
91  +  68  =   ? 159
91  +  68  =  159  是 true
*/

作者: 电玩    时间: 2013-4-28 12:59
本帖最后由 电玩 于 2013-4-28 13:04 编辑

3.5(游戏:三个数的加法)程序清单3-1中的程序产生了两个整数,并提示用户输入这两个整数的和。
修改该程序使之能产生三个一位整数,然后提示用户输入这三个整数的和。

import java.util.Scanner;
class AdditionQuiz05 //三个数的加法
{
public static void main(String[] args)
{
        int number1=(int)(System.currentTimeMillis()%10);//取随机数  一个一位整数 只要%10
  int number2=(int)(System.currentTimeMillis()*7%10);
  int number3=(int)(System.currentTimeMillis()*9%10);
        Scanner input=new Scanner(System.in);
        System.out.print("What is "+number1+" + "+number2+" + "+number3+" ? ");//请用户输入答案
  int answer=input.nextInt();
        System.out.println(number1+" + "+number2+" + "+number3+" = "+answer+" is "+(number1+number2+number3==answer) );//给答案判断
}
}
/*
What is 3 + 1 + 7 ? 11
3 + 1 + 7 = 11 is true
What is 9 + 3 + 1 ? 10
9 + 3 + 1 = 10 is false
*/

作者: 电玩    时间: 2013-4-28 13:07
本帖最后由 电玩 于 2013-4-28 13:17 编辑

3.6(医疗应用程序:BMI)修改程序清单3-5,让用户输入重量、英尺和英寸。例如:一个人身高是5英尺10英寸,输入的英尺值就是5而英寸值为10.


import java.util.Scanner;
class  ComputeAndInterpretBMI06//计算身体质量指数
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
  System.out.print("请输入以磅为单位的重量:");
  double weight =input.nextDouble();//接收重量
       System.out.print("请输入您身高高度中的英尺整数值:");
  int height1 =input.nextInt();//接收身高高度中的英尺值
  System.out.print("请输入您身高高度中的英寸整数值:");
  int height2 =input.nextInt();//接收身高高度中的英寸值
  double height=height1+height2*0.083333333333333;//身高高度   1英尺=12英寸,1英寸=0.083333333333333英尺

  final double KIOGRAMS_PER_POUND=0.45359237;//磅与千克的转换量 常量
final double METERS_PER_INCH=0.0254;//英尺与米的转换量  常量
double weightInKiograms=weight*KIOGRAMS_PER_POUND;//千克
double heightInMeters=height*METERS_PER_INCH;//米
double bmi=weightInKiograms/(heightInMeters*heightInMeters);//BMI计算公式
System.out.println("您的BMI是"+bmi);
if(bmi<16)
System.out.println("您体重严重偏轻");
else if(bmi<18)
System.out.println("您体重偏轻");
else if(bmi<24)
System.out.println("您体重正常");
else if(bmi<29)
System.out.println("您体重超重");
else if(bmi<35)
System.out.println("您体重严重超重");
else
System.out.println("您体重非常严重超重");
}
}
/*
请输入以磅为单位的重量:146
请输入您身高高度中的英尺整数值:5
请输入您身高高度中的英寸整数值:10
您的BMI是3016.598947415041
您体重非常严重超重
*/


作者: 电玩    时间: 2013-4-29 21:06
本帖最后由 电玩 于 2013-4-29 21:19 编辑

3.7(财务应用程序:整钱兑零)修改程序清单2-10,使之只显示非零的币值单位。用单词的单数形式显示一个单位,例如:1 美元和1美分 1 dollar and 1 penny;用单词的复数形式显示多于一个单位的值,例如 2美元和3美分 2 dollars and 3 pennies.  (使用输入值23.67来测试该程序)

import java.util.Scanner;
class  ComputerChange07  //整钱兑零 单位的单复数 我们美丽的汉语就没有这么麻烦  
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
        System.out.print("请输入一个钱数,例如23.67:");
  double amount=input.nextDouble();//接收钱数  23.67
  int centsAmount=(int)(amount*100);//转换为以分币为单位的数量 2367
  int dollars=centsAmount/100;  //得到美元数  23
        centsAmount=centsAmount%100;//剩下的以分币为单位的数量 67 centsAmount=centsAmount-dollars*100;
        int quarters=centsAmount/25;//得到25美分的数量值  2
        centsAmount=centsAmount%25;//剩下的以分币为单位的数量 17 centsAmount=centsAmount-quarters*25;
     
  int dimes=centsAmount/10;//得到10美分的数量值 1
  centsAmount=centsAmount%10;//剩下的以分币为单位的数量 7 centsAmount=centsAmount-dimes*10;
  int nickels= centsAmount/5;//得到5美分的数量值 1
  centsAmount=centsAmount%5;//剩下的以分币为单位的数量 2 centsAmount=centsAmount-nickels*5;
  int pennies=centsAmount;//得到1美分的数量值 2
  System.out.println("你的钱数"+amount+"可以兑换");
  if (dollars!=1)
  {
            System.out.println(dollars+" dollars and");
  }else
   System.out.println(dollars+" dollar and");
  if (quarters!=1)
  {
   System.out.println(quarters+" quarters and");
  }else
             System.out.println(quarters+" quarter and");
  if (dimes!=1)
  {
   System.out.println(dimes+" dimes and");
  }else
             System.out.println(dimes+" dime and");
  if (nickels!=1)
  {
   System.out.println(nickels+" nickels and");
  }else
             System.out.println(nickels+" nickel and");
  if (pennies!=1)
  {
   System.out.println(pennies+" pennies ");
  }else
             System.out.println(pennies+" pennie");
     
}
}
/*
请输入一个钱数,例如23.67:23.67
你的钱数23.67可以兑换
23 dollars and
2 quarters and
1 dime and
1 nickel and
2 pennies
*/

作者: 电玩    时间: 2013-4-29 21:22
本帖最后由 电玩 于 2013-4-29 21:58 编辑

3,8(对三个整数排序)编写程序对这些整数排序。这些整数都是由输入对话框输入,并分别存储在变量num1,num2,num3中。程序对这些数进行排序,使之满足num1<=num2<=num3.

import javax.swing.JOptionPane;
class  SortOfThreeIntegers08 //对三个整数排序
{
public static void main(String[] args)
{
  
  String number1String=JOptionPane.showInputDialog("请您输入第一个整数");
        int number1=Integer.parseInt(number1String);
String number2String=JOptionPane.showInputDialog("请您输入第二个整数");
        int number2=Integer.parseInt(number2String);
  String number3String=JOptionPane.showInputDialog("请您输入第三个整数");
        int number3=Integer.parseInt(number3String);
if (number1>number2)
{
int temp=number1;
    number1=number2;
number2=temp;
}
if (number1>number3)
{
int temp=number1;
    number1=number3;
number3=temp;
}
if (number2>number3)
{
int temp=number2;
    number2=number3;
number3=temp;
}
      
String output="这三个整数顺序是: \n " +number1+"<="+number2+"<="+number3;
JOptionPane.showMessageDialog(null,output);
}
}

截图26.png (7 KB, 下载次数: 0)

截图26.png

截图27.png (7 KB, 下载次数: 0)

截图27.png

截图28.png (7.17 KB, 下载次数: 0)

截图28.png

截图29.png (7.32 KB, 下载次数: 0)

截图29.png

作者: 梁海君    时间: 2013-4-29 21:40
LZ 好样~~
作者: 电玩    时间: 2013-4-29 22:08
本帖最后由 电玩 于 2013-4-29 22:45 编辑

3.9(商业方面:检查ISBN)ISBN(国际标准书号)以前是一个10位整数d1d2d3d4d5d6d7d8d9d10,最后的一位是校验和,它是使用下面的公式用另外9个数计算出来的:
(d1*1+d2*2+d3*3+d4*4+d5*5+d6*6+d7*7+d8*8+d9*9)%11
如果校验和为10,那么按照ISBN的习惯,最后一位应该表示为X。
编写程序,提示用户输入前9个数,然后显示10位ISBN(包括前面起始位置的0)。
程序应该读取一个整数输入。例如:输入的是013601267,那么程序就该显示0136012671.

import java.util.Scanner;
class  CheckISBN09 //检查ISBN
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
        System.out.print("请输入ISBN(一个九位整数,例如013601267:");
  int number=input.nextInt();//接收ISBN
int d9=number%10;
int d8=number/10%10;
int d7=number/100%10;
int d6=number/1000%10;
int d5=number/10000%10;
int d4=number/100000%10;
int d3=number/1000000%10;
int d2=number/10000000%10;
int d1;
if (number/100000000<1)
{
d1=0;
}else
d1=number/100000000;
  int d10=(d1*1+d2*2+d3*3+d4*4+d5*5+d6*6+d7*7+d8*8+d9*9)%11;
  if(d10==10){
      if(d1==0)
       System.out.println("ISBN为:"+"0"+number+"X");
       else
   System.out.println("ISBN为:"+number+"X");
  }
  else {if(d1==0)
       System.out.println("ISBN为:"+"0"+number+d10);
        else
   System.out.println("ISBN为:"+number+d10);}
}
}
/*
请输入ISBN(一个九位整数,例如013601267:013601267
ISBN为:0136012671
*/

作者: 电玩    时间: 2013-4-29 22:08
梁海君 发表于 2013-4-29 21:40
LZ 好样~~

谢谢!                                      
作者: 电玩    时间: 2013-4-29 22:46
本帖最后由 电玩 于 2013-4-29 22:51 编辑

3.10(游戏:加法测验)程序清单3-4随机产生一个减法。修改这个程序,随机产生一个计算两个小于100的整数的加法问题。

import java.util.Scanner;
class AdditionTest10 //加法测验
{
public static void main(String[] args)
{
        int number1=(int)(Math.random()*100);//取随机数(10到90之间的整数)
  int number2=(int)(Math.random()*100);

        System.out.print("What is "+number1+" + "+number2+" ? ");//请用户输入答案
        Scanner input=new Scanner(System.in);
        int answer=input.nextInt();
   
   if (number1+number2==answer)   //给答案判断
  {
           System.out.println("你答对了!");
  }else {
  System.out.println("你答错了!\n"+number1+" + "+number2+" = "+(number1+number2) );
  }
        }
}
/*
What is 80 + 57 ? 147
你答错了!
80 + 57 = 137
What is 22 + 71 ? 93
你答对了!
*/

作者: 电玩    时间: 2013-4-30 09:42
本帖最后由 电玩 于 2013-4-30 10:10 编辑

3.11(给出一个月的总天数)编写程序,提示用户输入月份和年份,然后显示这个月的天数。
例如:如果用户输入的月份是2而年份是2000.那么程序应该显示 2000年2月有29天。
如果用户输入的月份为3 而年份为2005天,那么程序就应该显示 2005年3月有31天。

import java.util.Scanner;
class TotalOfDaysInMonth11 //给出一个月的总天数
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
  System.out.print("请您输入年份: ");
  int year=input.nextInt();
  System.out.print("请您输入月份: ");
  int month=input.nextInt();
int day=0;
  boolean isLeapYear=(year%4==0 && year%100 !=0)||(year%400==0);//将定义用逻辑运算符实现是否是闰年
        
  if(isLeapYear){
  switch(month){
  case 1: day=31;
         break;
     case 2: day=29;
         break;
     
    case 3: day=31;
         break;
   case 4: day=30;
         break;
     case 5: day=31;
         break;
    case 6: day=30;
         break;
   case 7: day=31;
         break;
     case 8: day=31;
         break;
    case 9: day=30;
         break;
   case 10: day=31;
         break;
     case 11: day=30;
         break;
    case 12: day=31;
         break;
      }
}else{
  switch(month){
  case 1: day=31;
         break;
     case 2: day=28;
         break;
     
    case 3: day=31;
         break;
   case 4: day=30;
         break;
     case 5: day=31;
         break;
    case 6: day=30;
         break;
   case 7: day=31;
         break;
     case 8: day=31;
         break;
    case 9: day=30;
         break;
   case 10: day=31;
         break;
     case 11: day=30;
         break;
    case 12: day=31;
         break;
      
      }
      
      }
  
  
  
  
  System.out.println(year+"年"+month+"月有"+ day+"天。");
  
}
}
/*
请您输入年份: 2000
请您输入月份: 2
2000年2月有29天。
请您输入年份: 2005
请您输入月份: 3
2005年3月有31天。
*/

作者: Sword    时间: 2013-4-30 10:28
额,这是要干什么?代码最好试着自己写,狂敲代码的同时更重要的是思考
作者: 电玩    时间: 2013-4-30 22:09
Sword 发表于 2013-4-30 10:28
额,这是要干什么?代码最好试着自己写,狂敲代码的同时更重要的是思考

谢谢!
不过这里的代码差不多都是我自己写的,不是照着答案无思考的敲的。
否则,我也不会20分钟才做出一道题,1个小时只能最多做4道而已。






作者: 电玩    时间: 2013-4-30 22:19
本帖最后由 电玩 于 2013-4-30 22:32 编辑

3.12(检测数字)编写程序,提示用户输入一个整数,然后判断这个整数是否能被5和6整除,或者不能被它们中的任何一个整除,或者只能被其中一个整除。

import java.util.Scanner;
class  TestBooleanOperators12  //检测数字
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
  System.out.print("请输入一个整数:");
  int number =input.nextInt();
if (number%5==0 && number%6==0)
{
System.out.println(number+"能被5和6整除");
}
else if (number%5==0 || number%6==0)
{
System.out.println(number+"能被5或6整除");
}else
System.out.println(number+"不能被5和6任何一个数整除");
}
}
/*
请输入一个整数:10
10能被5或6整除
请输入一个整数:30
30能被5和6整除
请输入一个整数:23
23不能被5和6任何一个数整除
*/


作者: 电玩    时间: 2013-4-30 22:35
本帖最后由 电玩 于 2013-4-30 22:38 编辑

3.13(财务应用程序:计算税款)程序清单3-6给出计算单身登记人税款的源代码。整个程序清单3-6,给出的就是完整的源代码。


import java.util.Scanner;
class  ComputeTax13  //计算税款  完整版
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
  System.out.print("(0表示单身纳税人,1表示已婚共同纳税人或证实的鳏寡,\n"+
   "2表示已婚单独纳税人,3表示家庭户主纳税人)"+
   "请输入您的报税身份: ");
  int status=input.nextInt();//接收数字,确定身份
       System.out.print("请输入您的收入:");
    double income=input.nextDouble();
    double tax=0;
    if(status==0){  //计算单身纳税人
    if(income<=8350)
     tax=income*0.10;
    else if(income<=33950)
     tax=8350*0.10+(income-8350)*0.15;
    else if(income<=82250)
     tax=8350*0.10+(33950-8350)*0.15+(income-33950)*0.25;
    else if(income<=171550)
     tax=8350*0.10+(33950-8350)*0.15+(82250-33950)*0.25+(income-82250)*0.28;
    else if(income<=372950)
   tax=8350*0.10+(33950-8350)*0.15+(82250-33950)*0.25+(171550-82250)*0.28+(income-171550)*0.33;
    else
tax=8350*0.10+(33950-8350)*0.15+(82250-33950)*0.25+(171550-82250)*0.28+(372950-171550)*0.33+(income-372950)*0.35;
    }
    else if(status==1){//计算已婚共同纳税人或证实的鳏寡
     if(income<=16700)
     tax=income*0.10;
    else if(income<=67900)
     tax=16700*0.10+(income-16700)*0.15;
    else if(income<=137050)
     tax=16700*0.10+(67900-16700)*0.15+(income-67900)*0.25;
    else if(income<=208850)
     tax=16700*0.10+(67900-16700)*0.15+(137050-67900)*0.25+(income-137050)*0.28;
    else if(income<=372950)
   tax=16700*0.10+(67900-16700)*0.15+(137050-67900)*0.25+(208850-137050)*0.28+(income-208850)*0.33;
    else
tax=16700*0.10+(67900-16700)*0.15+(137050-67900)*0.25+(208850-137050)*0.28+(372950-208850)*0.33+(income-372950)*0.35;
   
    }
    else if(status==2){//计算已婚单独纳税人
if(income<=8350)
     tax=income*0.10;
    else if(income<=33950)
     tax=8350*0.10+(income-8350)*0.15;
    else if(income<=68525)
     tax=8350*0.10+(33950-8350)*0.15+(income-33950)*0.25;
    else if(income<=104425)
     tax=8350*0.10+(33950-8350)*0.15+(68525-33950)*0.25+(income-68525)*0.28;
    else if(income<=186475)
   tax=8350*0.10+(33950-8350)*0.15+(68525-33950)*0.25+(104425-68525)*0.28+(income-104425)*0.33;
    else
tax=8350*0.10+(33950-8350)*0.15+(68525-33950)*0.25+(104425-68525)*0.28+(186475-104425)*0.33+(income-186475)*0.35;   
   
   
    }
    else if(status==3){//计算家庭户主纳税人
if(income<=11950)
     tax=income*0.10;
    else if(income<=45500)
     tax=11950*0.10+(income-11950)*0.15;
    else if(income<=117450)
     tax=11950*0.10+(45500-11950)*0.15+(income-45500)*0.25;
    else if(income<=190200)
     tax=11950*0.10+(45500-11950)*0.15+(117450-45500)*0.25+(income-117450)*0.28;
    else if(income<=372950)
   tax=11950*0.10+(45500-11950)*0.15+(117450-45500)*0.25+(190200-117450)*0.28+(income-171550)*0.33;
    else
tax=11950*0.10+(45500-11950)*0.15+(117450-45500)*0.25+(190200-117450)*0.28+(372950-171550)*0.33+(income-372950)*0.35;   
   
   
    }
    else{
    System.out.println("错误:无效状态");
    System.exit(0);
    }
    System.out.println("应付税款是 "+(int)(tax*100)/100.0);
}
}
/*
(0表示单身纳税人,1表示已婚共同纳税人或证实的鳏寡,
2表示已婚单独纳税人,3表示家庭户主纳税人)请输入您的报税身份: 0
请输入您的收入:400000
应付税款是 117683.5
*/

作者: 电玩    时间: 2013-4-30 22:41
本帖最后由 电玩 于 2013-4-30 22:59 编辑

3.14(游戏:猜硬币的正反面)编写程序,让用户猜一猜是硬币的正面还是反面。这个程序随机产生一个整数0或者1,它们分别表示硬币的正面和反面。
程序提示用户输入一个猜测值,然后报告这个猜测值是正确的还是错误的。

import java.util.Scanner;
class  GuessSidesOfCoin14 //猜一猜硬币的正反面
{
public static void main(String[] args)
{
int number=(int)(Math.random()*10)%2;//随机生成一个硬币的正反数
  Scanner input=new Scanner(System.in);
  System.out.print("请猜一猜硬币的正反面(0表示正面,1表示反面):  ");
  int guess =input.nextInt();

  if (guess==number)
  {
   System.out.println("恭喜您,猜对了!");
  }else
  System.out.println("很遗憾,您猜错了!");
}
}
/*
请猜一猜硬币的正反面(0表示正面,1表示反面):  0
很遗憾,您猜错了!
*/

作者: 电玩    时间: 2013-4-30 23:04
本帖最后由 电玩 于 2013-4-30 23:19 编辑

3.15(游戏:彩票)修改程序清单3-9,产生三位整数的彩票。程序提示用户输入一个三位整数,然后依照下面的规则判定用户是否赢得奖金:
(1)如果用户输入的所有数匹配彩票的确切顺序,奖金是10000美金。
(2)如果用户输入的所有数匹配彩票的所有数字,奖金是3000美金。
(3)如果用户输入的其中一个数匹配彩票号码中的一个数,奖金是1000美金。

import java.util.Scanner;
class  LotteryTicket15 //彩票 这道题是清单3-9的加强版
{
public static void main(String[] args)
{
  int lottery=(int)(Math.random()*1000);//随机生成一个彩票数(三位数100--900)
  
  Scanner input=new Scanner(System.in);
  System.out.print("请输入您的彩票选号(三位数字): ");
  int guess=input.nextInt();
        int lotteryDigit3=lottery/100;  //彩票的百位数
  int lotteryDigit2=lottery/10;  //彩票的十位数
  int lotteryDigit1=lottery%10;  //彩票的个位数
        
  int guessDigit3=guess/100;  //选号的百位数
  int guessDigit2=guess/10;  //选号的十位数
  int guessDigit1=guess%10;  //选号的个位数

  System.out.println("这期彩票的有奖号码是: "+lottery);
        if(guess==lottery)
                System.out.println(" 您猜中了所有的数字并且顺序一样:恭喜您获得10000美金的奖励,欢迎您再次光临");
else if( guessDigit1==lotteryDigit2 && guessDigit1==lotteryDigit3
&& guessDigit2==lotteryDigit1 && guessDigit2==lotteryDigit3
&& guessDigit3==lotteryDigit1 && guessDigit3==lotteryDigit2)
System.out.println(" 您猜中了所有的数字但顺序不一样:恭喜您获得3000美金的奖励,欢迎您再次光临");
else if(guessDigit1==lotteryDigit1 ||guessDigit1==lotteryDigit2 ||guessDigit1==lotteryDigit3
  ||guessDigit2==lotteryDigit1||guessDigit2==lotteryDigit2 || guessDigit2==lotteryDigit3
  ||guessDigit3==lotteryDigit1||guessDigit3==lotteryDigit2 || guessDigit3==lotteryDigit3)
System.out.println(" 您只猜中了一个的数字:恭喜您获得1000美金的奖励,欢迎您再次光临");
else
  System.out.println(" 很遗憾!您没猜中了任何数字:不要放弃,请再接再厉,下次获大奖的可能就是您哦!");
  
}
}
/*
请输入您的彩票选号(三位数字): 123
这期彩票的有奖号码是: 575
很遗憾!您没猜中了任何数字:不要放弃,请再接再厉,下次获大奖的可能就是您哦!
*/

作者: 电玩    时间: 2013-4-30 23:49
本帖最后由 电玩 于 2013-5-1 00:25 编辑

3.16(任意字符)使用Math.random()编写程序,显示任意一个大写字母。

class  DisplayAnyCapitalLetters16 //显示任意一个大写字母。查询了ASCII码表  A-Z 分别对应的是 65-90
{
public static void main(String[] args)
{
  int number = 65+(int)(Math.random()*26) ;//复习题3.9  得到 65<=number <91
        System.out.println((char)number);  //编程题2.8 ASCII码对应的字符
  }
}

作者: 曹睿翔    时间: 2013-5-1 07:10
入学呢,面试什么的,会按照视频的知识点串着问,要兼顾学习了
作者: 电玩    时间: 2013-5-1 09:09
曹睿翔 发表于 2013-5-1 07:10
入学呢,面试什么的,会按照视频的知识点串着问,要兼顾学习了

谢谢斑竹提醒!
我现在已经看到 java IO部分了。学习java,不仅仅是为了应付考试,更重要的是自己真的能解决java问题的思路。
作者: 电玩    时间: 2013-5-2 09:27
本帖最后由 电玩 于 2013-5-2 09:54 编辑

3.17(游戏:剪刀、石头、布)编写可以玩最流行的剪刀-石头-布游戏的程序。(剪刀可以剪布,石头可以砸剪刀,而布可以包石头)程序提示用户随机产生一个数,这个数为0、1、2,分别表示石头、剪刀和布。程序提示用户输入值0、1、2,然后显示一个消息,表明用户和计算机谁赢了游戏,谁输了游戏,或是打成平手。

import java.util.Scanner;
class RockPaperScissors17 //剪刀石头布
{
public static void main(String[] args)
{
  int number=(int)(Math.random()*10)%3;//随机生成一个剪刀石头布的数
  Scanner input=new Scanner(System.in);
  System.out.print("请出拳(0表示石头,1表示剪刀,2表示布):  ");
  int guess =input.nextInt();

  switch(guess){               
  case 0:  System.out.println("您出的拳是石头。");
           break ;
  case 1: System.out.println("您出的拳是剪刀。");
           break ;
  case 2:  System.out.println("您出的拳是布。");
           break ;
  }
      switch(number){
  case 0:  System.out.println("计算机出的拳是石头。");
           break ;
  case 1: System.out.println("计算机出的拳是剪刀。");
           break ;
  case 2:  System.out.println("计算机出的拳是布。");
           break ;
  }
  
  if (guess==number)
  {
   System.out.println("你们打平了");
  }else if((guess=='0'&& number=='1')   
   ||(guess=='1'&&number=='2')
   ||(guess=='2'&&number=='0'))
  System.out.println("恭喜您,您获胜了!");
  else
  System.out.println("很遗憾,您输了!");
      }
}
/*
请出拳(0表示石头,1表示剪刀,2表示布):  0
您出的拳是石头。
计算机出的拳是石头。
你们打平了
*/

作者: 电玩    时间: 2013-5-2 09:55
本帖最后由 电玩 于 2013-5-2 10:14 编辑

3.18(使用输入对话框)使用输入对话框改写程序清单3-8。

import javax.swing.JOptionPane;
class  LeapYearDialog18 //判定闰年对话框
{
public static void main(String[] args)
{
  String yearString=JOptionPane.showInputDialog("请您输入年份: ");
  int year=Integer.parseInt(yearString);
  boolean isLeapYear=(year%4==0 && year%100 !=0)||(year%400==0);//将定义用逻辑运算符实现
   
   if(isLeapYear){
   String output=year+"年是闰年! ";
   JOptionPane.showMessageDialog(null,output);}
   else{
     String output=year+"年不是闰年! ";
     JOptionPane.showMessageDialog(null,output);}
   
}
}

截图30.png (6.99 KB, 下载次数: 0)

截图30.png

截图31.png (6.99 KB, 下载次数: 0)

截图31.png

截图32.png (6.94 KB, 下载次数: 0)

截图32.png

截图33.png (6.93 KB, 下载次数: 0)

截图33.png

作者: 电玩    时间: 2013-5-4 18:49
本帖最后由 电玩 于 2013-5-4 18:58 编辑

3.19(验证三角形的有效性)编写程序。读取三角形的三条边,并确定输入是否有效。如果任意两条边的和大于第三边则输入有效。

import java.util.Scanner;
class VerificationTriangle19 //验证三角形的有效性
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
  System.out.print("请依次输入三角形的三边 :  ");
  double a =input.nextDouble();
  double b =input.nextDouble();
  double c =input.nextDouble();
  if((a+b)>c && (a+c)>b && (b+c)>a)
  System.out.println("这个三角形是有效的");
  else
   System.out.println("这个三角形是无效的");
}
}
/*
请依次输入三角形的三边 :  2.5 2 1
这个三角形是有效的
请依次输入三角形的三边 :  1 2.5 1
这个三角形是无效的
*/

作者: 电玩    时间: 2013-5-4 19:04
本帖最后由 电玩 于 2013-5-4 19:19 编辑

3.20(科学方面:风寒温度)练习题2.17给出计算风寒温度的公式。这个公式适用于温度在华氏-58摄氏度到41摄氏度之间,并且风速大于或等于2的情况。编写一个程序,提示用户输入温度值和一个风速值。如果输入值是合法的,那么显示温度,否则显示一条消息,表明温度或风速是不是合法值。

import java.util.Scanner;
class ColdTemperature20 //风寒温度
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
  double temperature,speed;
  do{
  System.out.print("请输入室外温度(以华氏摄氏度为单位:-58度到41度之间的数字):");
   temperature=input.nextDouble();//接收室外温度
  if(temperature<-58 || temperature>41 )
   System.out.println("你输入的室外温度不是合法数值。");
  }while(temperature<-58 || temperature>41);
          do{
        System.out.print("请输入风速(以每小时英里数为单位,输入大于等于2的数字):");
   speed=input.nextDouble();//接收风速
  if(speed<2)
              System.out.println("你输入的风速不是合法数值。");
    }while(speed<2);
        double coldTemperature=35.74+0.6215*temperature-35.75*Math.pow(speed,0.16)+0.4275*temperature*Math.pow(speed,0.16);//计算风寒温度
  
  System.out.println("风寒温度是"+coldTemperature+"华氏度。");
  
}
}
/*
请输入室外温度(以华氏摄氏度为单位:-58度到41度之间的数字):44
你输入的室外温度不是合法数值。
请输入室外温度(以华氏摄氏度为单位:-58度到41度之间的数字):5.3
请输入风速(以每小时英里数为单位,输入大于等于2的数字):1
你输入的风速不是合法数值。
请输入风速(以每小时英里数为单位,输入大于等于2的数字):6
风寒温度是-5.567068455881625华氏度。
*/

作者: 电玩    时间: 2013-5-5 08:15
本帖最后由 电玩 于 2013-5-5 08:38 编辑

3.21(科学方面:某天是星期几)泽勒一致性是由克里斯汀.泽勒开发的用于计算某天是星期几的算法。这个公式是:
h=(q+[26*(m+1)/10]+k+k/4+j/4+5*j)%7
其中:h是一个星期中的每一天(0为星期六,1为星期天,2为星期一,4为星期二,依次类推)
      q是某月的天数
      m是月份(3为3月,4为4月,12为12月)一月和二月分别记为上年的13月和14月。
      j是世纪数 即 year/100
        k是世纪的年数  year%100
编写程序,提示用户输入年、月和该月的哪一天,然后显示它是一周中的星期几。

提示: 对整数n而言 [n]=(int)n.一月和二月在这个公式里是用13和14表示的。所以需要将用户输入的月份1转换为13,将用户输入的月份2转换为14,同时将年份改为前一年。

import java.util.Scanner;
class DayOfWeek21 //某天是星期几
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
  System.out.print("请输入年份(例如2008): ");
        int year=input.nextInt();
  System.out.print("请输入月份(1-12): ");
        int month=input.nextInt();
  if(month==1){
   month=13;
   year=year-1;
    }else if(month==2){
    month=14;
    year=year-1;
    }
  System.out.print("请输入该月的哪一天(1-31): ");
        int day=input.nextInt();
  int h=(day+(26*(month+1)/10)+year%100+year%100/4+year/100/4+5*year/100)%7;
  String week="";
switch(h){
  case 0:week="星期六";
         break;
     case 1:week="星期天";
         break;
     case 2:week="星期一";
         break;
     case 3:week="星期二";
         break;
     case 4:week="星期三";
         break;
     case 5:week="星期四";
         break;
     case 6:week="星期五";
         break;
  
  
  }

if(month==14){
month=2;
year=year+1;
}else if(month==13){
month=1;
year=year+1;
}
  System.out.println(year+"年"+month+"月"+day+"日是"+week);
}
}
/*
请输入年份(例如2008): 2002
请输入月份(1-12): 3
请输入该月的哪一天(1-31): 26
2002年3月26日是星期二
请输入年份(例如2008): 2013
请输入月份(1-12): 1
请输入该月的哪一天(1-31): 1
2013年1月1日是星期二
*/

      

作者: 电玩    时间: 2013-5-6 08:56
本帖最后由 电玩 于 2013-5-6 08:59 编辑

3.22(几何方面:点是否在圆内)编写程序,提示用户输入一个点(x,y),然后检查这个点是否在以原点(0,0)为圆心,半径为10的圆内。例如:(4,5)是圆内的一点,而(9,9)是圆外的一点,如图3-7a所示。
提示:如果一个点到(0,0)的距离小于或等于10,那么该点就在圆内,计算距离的公式是  

截图34.png (4.78 KB, 下载次数: 0)

截图34.png

作者: 电玩    时间: 2013-5-6 09:12
import java.util.Scanner;
class PointInsideCircle22 //点是否在圆内
{
        public static void main(String[] args)
        {
                Scanner input=new Scanner(System.in);
                System.out.print("请输入一个点(x  y): ");
        double x =input.nextDouble();
                double y =input.nextDouble();

double distance=Math.pow(x*x+y*y ,0.5);//计算距离
if (distance<=10)
{
        System.out.println("点("+x+","+y+")在圆内");
}else
        System.out.println("点("+x+","+y+")在圆外");
}
}
/*
请输入一个点(x  y): 4 5
点(4.0,5.0)在圆内

请输入一个点(x  y): 9 9
点(9.0,9.0)在圆外
*/
作者: 电玩    时间: 2013-5-6 09:16
本帖最后由 电玩 于 2013-5-10 11:54 编辑

3.23(几何方面:点是否在矩形内)编写程序,提示用户输入点(x,y),然后检测该点是否在以原点(0,0)为中心,宽为10、高为5的矩形中。例如:(2,2)在矩形内而(6,4)在矩形外。
提示:如果到点(0,0)的水平距离小于等于10/2且到点(0,0)的垂直距离小于5/2,该点就在矩形内。

import java.util.Scanner;
class  PointInsideRectangle23 //点是否在矩形内
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
  System.out.print("请输入一个点(x  y): ");
        double x =input.nextDouble();
  double y =input.nextDouble();
if (Math.abs(x) <=5 && Math.abs(y)<= 2.5)
{
System.out.println("点("+x+","+y+")在矩形内");
}else
System.out.println("点("+x+","+y+")在矩形外");
}
}
/*
请输入一个点(x  y): 2 2
点(2.0,2.0)在矩形内
请输入一个点(x  y): 6 4
点(6.0,4.0)在矩形外
*/

作者: 周泰良    时间: 2013-5-10 01:01
强悍的哥们,向你学习。
作者: 曹睿翔    时间: 2013-5-10 07:18
怎么不继续了?
作者: 电玩    时间: 2013-5-10 10:56
曹睿翔 发表于 2013-5-10 07:18
怎么不继续了?

这个星期太忙了 人很累 终于放双休一次了
作者: 电玩    时间: 2013-5-10 11:01
本帖最后由 电玩 于 2013-5-10 11:21 编辑

3.24(游戏:挑一张牌)编写程序,模拟从一副52张的牌中选择一张牌。程序应该显示牌的大小(Ace ,2,3,4,5,6,7,8,9,10,jack,queen,king)以及牌的花色(Clubs(黑梅花),(Diamond)红方块,(Heats)红心,(Spades)黑桃)。

class  PickCard24  //挑一张牌
{
public static void main(String[] args)
{
  String[] sizeOfCard={"Ace","2","3","4","5","6","7","8","9","10","jack","queen","king"};//牌的大小.这章还没有数组知识,先用了
  int x=(int)(Math.random()*14) ;// 产生随机值 0<= x<14 x是数组的角标
String[] cardSuit={"黑梅花","红方块","红心","黑桃"};//牌的花色
          int y=(int)(Math.random()*5) ;// 产生随机值 0<=y<5 y是数组的角标
  System.out.println("随机产生的牌是"+cardSuit[y]+sizeOfCard[x]);
}
}
/*
随机产生的牌是黑梅花9
随机产生的牌是红方块6
*/
作者: 电玩    时间: 2013-5-10 11:24
本帖最后由 电玩 于 2013-5-10 11:30 编辑

3.25(计算一个三角形的周长)编写程序,读取三角形的三条边,如果输入值合法就计算这个三角形的周长;否则,显示这些输入值不合法。如果任意两条边的和大于第三边,那么输入值都是合法的。

import java.util.Scanner;
class  TriangularPerimeter25//一个三角形的周长 利用19题
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
  System.out.print("请依次输入三角形的三边 :  ");
  double a =input.nextDouble();
  double b =input.nextDouble();
  double c =input.nextDouble();
  if((a+b)>c && (a+c)>b && (b+c)>a)
  System.out.println("这个三角形的周长是"+(a+b+c));
  else
   System.out.println("这个三角形是无效的");
  }
}
/*
请依次输入三角形的三边 :  1 2.5 1
这个三角形是无效的
请依次输入三角形的三边 :  2.5 2 1
这个三角形的周长是5.5
*/

作者: 电玩    时间: 2013-5-10 11:33
本帖最后由 电玩 于 2013-5-10 11:40 编辑

3.26(使用运算符&&、||、和^)编写一个程序,提示用户输入一个整数值,然后判定它是否能被5和6整除,是否能被5或6整除,以及是否能被5或6整除但是不能同时被他们整除。

import java.util.Scanner;
class  UsingOperators26  //使用运算符  利用程序清单3-7
{
public static void main(String[] args)
{
Scanner input=new Scanner(System.in);
  System.out.print("请输入一个整数:");
  int number =input.nextInt();
System.out.println(number+"能被5和6整除吗?"+(number%5==0 && number%6==0)+"\n"+
number+"能被5或6整除吗?"+(number%5==0 || number%6==0)+"\n"+
number+"只能被5或6中的一个整除,但不能同时使用吗?"+(number%5==0 ^ number%6==0));
  }
}
/*
请输入一个整数:10
10能被5和6整除吗?false
10能被5或6整除吗?true
10只能被5或6中的一个整除,但不能同时使用吗?true
*/

作者: 电玩    时间: 2013-5-10 11:43
本帖最后由 电玩 于 2013-5-10 12:22 编辑

3.27(几何方面:点是否在三角形内?)假设一个直角三角形放在一个平面上。直角点在(0,0)处,其他两个点分别在(200,0)和(0,100)处。编写一个程序,提示用户输入一个点的坐标X坐标和Y坐标,然后判定这个点是否在该三角形内。

/*计算一次函数y=kx+b  k=(y2-y1)/(x2-x1)
   斜率  笔算出 y=-0.5x+100
如果没学过解析几何的又该如何                       
*/
import java.util.Scanner;
class  PointInsideTriangle27  //点是否在三角形内
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
  System.out.print("请输入一个点(x  y): ");
        double x =input.nextDouble();
  double y =input.nextDouble();
               
if ( y<=( -0.5*x+100))
{
System.out.println("点("+x+","+y+")在三角形内");
}else
System.out.println("点("+x+","+y+")在三角形外");
}
}
/*
请输入一个点(x  y): 100.5 25.5
点(100.5,25.5)在三角形内
请输入一个点(x  y): 100.5 50.5
点(100.5,50.5)在三角形外
*/

作者: 电玩    时间: 2013-5-10 12:25
本帖最后由 电玩 于 2013-5-10 16:41 编辑

3.28(几何方面:两个矩形)编写一个程序,提示用户输入两个矩形中点的X坐标和Y坐标以及它们的宽度和高度。然后判定第二个矩形是在第一个矩形内
,还是和第一个矩形有交集,或者是没有交集。

这个是我向论坛求助后,long 大侠 写的代码
public class Rectangle{
        public static int getInt(){
                int i = 0;
                try{
                        byte[] buf = new byte[20];
                        System.in.read(buf);
                        String s = new String(buf);
                        i = Integer.parseInt(s.trim());
                }
                catch(Exception e){
                        System.out.println("程序遇到异常,即将终止");
                        System.exit(0);
                }
                finally{
                        return i;
                }
        }
        public static void sop(Object o){
                System.out.print(o);
        }
                        
        public static void main(String[] args){
                //先定义并初始化两个矩形的变量
                int rx1 = 0; //第一个矩形的x坐标
                int ry1 = 0; //第一个矩形的y坐标
                int width1 = 0; //第一个矩形的宽度
                int height1 = 0; //第一个矩形的高度
               
                int rx2 = 0; //第二个矩形的x坐标
                int ry2 = 0; //第二个矩形的y坐标
                int width2 = 0; //第二个矩形的宽度
                int height2 = 0; //第二个矩形的高度
               
                sop("请输入第一个矩形的x坐标(按回车键结束):");
                rx1 = getInt();
                sop("请输入第一个矩形的y坐标(按回车键结束):");
                ry1 = getInt();
                sop("请输入第一个矩形的宽度(按回车键结束):");
                width1 = getInt();
                sop("请输入第一个矩形的高度(按回车键结束):");
                height1 = getInt();
                sop("\n");
               
                sop("请输入第二个矩形的x坐标(按回车键结束):");
                rx2 = getInt();
                sop("请输入第二个矩形的y坐标(按回车键结束):");
                ry2 = getInt();
                sop("请输入第二个矩形的宽度(按回车键结束):");
                width2 = getInt();
                sop("请输入第二个矩形的高度(按回车键结束):");
                height2 = getInt();
               
                int left1 = rx1 - width1/2; //矩形一的左下角的x坐标,确定矩形一最左边
                int right1 = rx1 + width1/2; //矩形一的右上角的x坐标,确定矩形一最右边
                int up1 = ry1 + height1/2; //矩形一的右下角的y坐标,确定矩形一最高点
                int down1 = ry1 - height1/2; //矩形一的左下角的y坐标,确定矩形一最低点
               
                int left2 = rx2 - width2/2; //矩形二的左下角的x坐标,确定矩形二最左边
                int right2 = rx2 + width2/2; //矩形二的右上角的x坐标,确定矩形二最右边
                int up2 = ry2 + height2/2; //矩形二的右下角的y坐标,确定矩形二最高点
                int down2 = ry2 - height2/2; //矩形二的左下角的y坐标,确定矩形二最低点
               
                //判定第二个矩形是否在第一个矩形内
                if(left1 <= left2 && right1 >= right2 && up1 >= up2 && down1 <= down2){
                        sop("第二个矩形在第一个矩形内。");
                        return;
                }
                //判定第二个矩形和第一个矩形是否没有交集
                else if(right1 <= left2 || left1 >= right2 || down1 >= up2 || up1 <= down2){
                        sop("第二个矩形和第一个矩形没有交集。");
                        return;
                }
                else
                        sop("第二个矩形和第一个矩形有交集。");               
        }
}

自己再写了一遍

import java.util.Scanner;
class TwoRectangles28 //两个矩形
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
  System.out.print("请输入第一个矩形的中点坐标(x  y)和宽度、高度: ");
        double x1 =input.nextDouble();
  double y1=input.nextDouble();
  double w1=input.nextDouble();
  double h1=input.nextDouble();

  System.out.print("请输入第二个矩形的中点坐标(x  y)和宽度、高度: ");
        double x2 =input.nextDouble();
  double y2=input.nextDouble();
  double w2=input.nextDouble();
        double h2=input.nextDouble();

  double left1 = x1 - w1 /2; //矩形一的左下角的x坐标,确定矩形一最左边
        double right1 = x1 + w1 /2; //矩形一的右上角的x坐标,确定矩形一最右边
        double up1 = y1 + h1 /2; //矩形一的右下角的y坐标,确定矩形一最高点
        double down1 = y1 - h1 /2; //矩形一的左下角的y坐标,确定矩形一最低点
               
        double left2 = x2 - w2 /2; //矩形二的左下角的x坐标,确定矩形二最左边
        double right2 = x2 + w2 /2; //矩形二的右上角的x坐标,确定矩形二最右边
        double up2 = y2 + h2 /2; //矩形二的右下角的y坐标,确定矩形二最高点
        double down2 = y2 - h2 /2; //矩形二的左下角的y坐标,确定矩形二最低点

           //判定第二个矩形是否在第一个矩形内
                if(left1 <= left2 && right1 >= right2 && up1 >= up2 && down1 <= down2){
                        System.out.println("第二个矩形在第一个矩形内。");
                        
                }
                //判定第二个矩形和第一个矩形是否没有交集
                else if(right1 <= left2 || left1 >= right2 || down1 >= up2 || up1 <= down2){
                        System.out.println("第二个矩形和第一个矩形没有交集。");
                        
                }
                else
                       System.out.println("第二个矩形和第一个矩形有交集。");           
  
}
}
/*
请输入第一个矩形的中点坐标(x  y)和宽度、高度: 2.5 4 2.5 43
请输入第二个矩形的中点坐标(x  y)和宽度、高度: 1.5 5 0.5 3
第二个矩形在第一个矩形内。

请输入第一个矩形的中点坐标(x  y)和宽度、高度: 1 2 3 5.5
请输入第二个矩形的中点坐标(x  y)和宽度、高度: 3 4 4.5 5
第二个矩形和第一个矩形有交集。

请输入第一个矩形的中点坐标(x  y)和宽度、高度: 1 2 3 3
请输入第二个矩形的中点坐标(x  y)和宽度、高度: 40 45 3 2
第二个矩形和第一个矩形没有交集。
*/


作者: 电玩    时间: 2013-5-10 12:39
本帖最后由 电玩 于 2013-5-10 16:28 编辑

3.29(几何方面:两个圆)编写程序,提示用户输入两个圆的中心坐标和各自的半径值,然后决定第二个圆是否在第一个圆内,还是和第一个圆重叠。
提示:如果两个圆心的距离 <= | r1-r2  |,就认为圆2在圆1内。如果两个圆心的距离<=r1+r2,就认为圆1和圆2重叠。

import java.util.Scanner;
class  TwoCircles29 //两个圆
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
  System.out.print("请输入第一个圆的中心坐标(x  y)和半径值: ");
        double x1 =input.nextDouble();
  double y1=input.nextDouble();
  double r1=input.nextDouble();
  System.out.print("请输入第二个圆的中心坐标(x  y)和半径值: ");
        double x2 =input.nextDouble();
  double y2=input.nextDouble();
  double r2=input.nextDouble();
double distance=Math.pow(Math.pow(x2-x1,2)+Math.pow(y2-y1,2),0.5); //计算两个圆心的距离
if (distance<=Math.abs(r1-r2))  //Math.abs(r1-r2)  ==|r1-r2|
    System.out.println("圆2在圆1内");
else if (distance<=r1+r2)
System.out.println("圆2与圆1有交集");
else
System.out.println("圆2与圆1没有任何交集");
}
}
/*
请输入第一个圆的中心坐标(x  y)和半径值: 0.5 5.1 13
请输入第二个圆的中心坐标(x  y)和半径值: 1 1.7 4.5
圆2在圆1内
请输入第一个圆的中心坐标(x  y)和半径值: 3.4 5.7 5.5
请输入第二个圆的中心坐标(x  y)和半径值: 6.7 3.5 3
圆2与圆1有交集
请输入第一个圆的中心坐标(x  y)和半径值: 3.4 5.5 1
请输入第二个圆的中心坐标(x  y)和半径值: 5.5 7.2 1
圆2与圆1没有任何交集
*/

作者: 电玩    时间: 2013-5-10 12:47
本帖最后由 电玩 于 2013-5-10 16:42 编辑

最后两个难题做不出来,准备抛到论坛上。这两个题目似乎还需要一些数学知识。
自己先跑步进入第四章 循环 学习。

最后一道做出来了。倒数第二道是论坛大侠帮写的。然后自己又重写了一遍。
作者: 电玩    时间: 2013-5-10 12:58
//程序清单4-1 猜数字
import java.util.Scanner;
class  GuessNumberOneTime  //提示用户一次猜测值
{
        public static void main(String[] args)
        {
                int number=(int)(Math.random()*101);  // 0<=随机值<101
                Scanner input=new Scanner(System.in);
                System.out.println("请猜一个魔法数字(0-100)");
                System.out.print("\n请输入您的数字:");
                int guess=input.nextInt();
                if (guess==number)
                {
                        System.out.println("您猜对了,魔法数字是:"+number);
                }else if (guess>number)
                {
                        System.out.println("您猜的数字太大了");
                }else
          System.out.println("您猜的数字太小了");
        }
}
/*
请猜一个魔法数字(0-100)

请输入您的数字:50
您猜的数字太大了
*/
作者: 电玩    时间: 2013-5-10 13:06
//程序清单4-2 猜数字的加强版
import java.util.Scanner;
class  GuessNumber //猜数字
{
        public static void main(String[] args)
        {
                int number=(int)(Math.random()*101);  // 0<=随机值<101
                Scanner input=new Scanner(System.in);
                System.out.println("请猜一个魔法数字(0-100)");

                int guess=-1; //初始化
                while (guess!=number)  //循环
                {
                        System.out.print("\n请输入您的数字:");
                   guess=input.nextInt();

                if (guess==number)
                     System.out.println("您猜对了,魔法数字是:"+number);
                else if (guess>number)
               
                        System.out.println("您猜的数字太大了");
                else
          System.out.println("您猜的数字太小了");
}
               
        }
}
/*
请猜一个魔法数字(0-100)

请输入您的数字:50
您猜的数字太大了

请输入您的数字:25
您猜的数字太小了

请输入您的数字:38
您猜的数字太大了

请输入您的数字:30
您猜的数字太小了

请输入您的数字:33
您猜的数字太大了

请输入您的数字:32
您猜的数字太大了

请输入您的数字:31
您猜对了,魔法数字是:31
*/
作者: 电玩    时间: 2013-5-10 17:11
//程序清单4-3 高级数学学习工具
import java.util.Scanner;
class  SubtractionQuizLoop //减法测验循环
{
        public static void main(String[] args)
        {
                final int NUMBER_OF_QUESTIONS=5; //问题数5,常数
                int correctCount=0;  //做对的题数
                int count=0;        //做了几道题
                long startTime=System.currentTimeMillis();  //计时开始
                String output="";
                Scanner input=new Scanner(System.in);

                while (count<NUMBER_OF_QUESTIONS)//循环出5道减法题
                {
                        int number1=(int)(Math.random()*10);  //随机产生两个 0-9的整数
                        int number2=(int)(Math.random()*10);
                         
                         if (number1<number2)  //如果第一个数小于第二个数 则换位
                         {
                                 int temp=number1;
                                 number1=number2;
                                 number2=temp;
                         }

System.out.print(number1+"-"+number2+"="+"?   ");
int answer=input.nextInt();

if (number1-number2==answer)
{
System.out.println("你算对了!\n");
correctCount++;
}else
        System.out.println("你算错了!\n"+number1+"-"+number2+"="+(number1-number2)+"\n");

count++; //做了几道题
output=output+"\n"+number1+"-"+number2+"="+answer+"    "+((number1-number2==answer)?"正确":"错误");//三元判断
                }
long endTime=System.currentTimeMillis();//计时结束
long testTime=endTime-startTime; //测试时间

                System.out.println("您做对了"+correctCount+"题。\n"+"测试时间为"+testTime/1000+"秒。\n"+output);
        }
}
/*
4-4=?   0
你算对了!

3-0=?   3
你算对了!

2-2=?   1
你算错了!
2-2=0

3-1=?   7
你算错了!
3-1=2

6-3=?   3
你算对了!

您做对了3题。
测试时间为14秒。

4-4=0    正确
3-0=3    正确
2-2=1    错误
3-1=7    错误
6-3=3    正确
*/
作者: 电玩    时间: 2013-5-10 17:22
//程序清单4-4 使用标志值控制循环
import java.util.Scanner;
class  SentinelValue //计算个数不确定的整数之和
{
        public static void main(String[] args)
        {
                Scanner input=new Scanner(System.in);
                System.out.print("请输入一个整数(如果输入0则表示输入结束): ");
                int date=input.nextInt();

                int sum=0;
                while (date!=0)
                {
sum=sum+date;
System.out.print("请输入一个整数(如果输入0则表示输入结束): ");
                 date=input.nextInt();
                }
                System.out.println("总数和为"+sum);
               
        }
}
/*
请输入一个整数(如果输入0则表示输入结束): 2
请输入一个整数(如果输入0则表示输入结束): 3
请输入一个整数(如果输入0则表示输入结束): 4
请输入一个整数(如果输入0则表示输入结束): 0
总数和为9
*/
作者: 电玩    时间: 2013-5-10 17:26
//程序清单4-5 do-while循环
import java.util.Scanner;
class  TestDoWhile //计算个数不确定的整数之和 加强版
{
        public static void main(String[] args)
        {
                int date=0;
                int sum=0;
                Scanner input=new Scanner(System.in);
                do
                {
                        System.out.print("请输入一个整数(如果输入0则表示输入结束): ");
                 date=input.nextInt();
                 sum=sum+date;
                }
                while (date!=0);
                System.out.println("总数和为"+sum);
        }
}
/*
请输入一个整数(如果输入0则表示输入结束): 3
请输入一个整数(如果输入0则表示输入结束): 5
请输入一个整数(如果输入0则表示输入结束): 6
请输入一个整数(如果输入0则表示输入结束): 0
总数和为14
*/
作者: 电玩    时间: 2013-5-10 17:40
// 程序清单4-6 使用嵌套for循环打印一个乘法表
class  MultiplicationTable//乘法表
{
        public static void main(String[] args)
        {
                System.out.println("           九九乘法表");
        System.out.print("       ");
                for (int j=1;j<=9 ;j++ )
                     System.out.print("  "+j);
                System.out.println("\n---------------------------------------------  ");

                for (int i=1;i<=9 ;i++ )
                {
                         System.out.print(i+" | ");
                for (int j=1;j<=9 ;j++ )
                {
System.out.printf("%4d",i*j);
                }
System.out.println();
                }
        }
}
/*与毕老师不同的样子
           九九乘法表
         1  2  3  4  5  6  7  8  9
---------------------------------------------
1 |    1   2   3   4   5   6   7   8   9
2 |    2   4   6   8  10  12  14  16  18
3 |    3   6   9  12  15  18  21  24  27
4 |    4   8  12  16  20  24  28  32  36
5 |    5  10  15  20  25  30  35  40  45
6 |    6  12  18  24  30  36  42  48  54
7 |    7  14  21  28  35  42  49  56  63
8 |    8  16  24  32  40  48  56  64  72
9 |    9  18  27  36  45  54  63  72  81
*/
作者: 电玩    时间: 2013-5-10 17:47
本帖最后由 电玩 于 2013-5-10 17:56 编辑

//程序清单4-7 浮点数的数值误差是不可避免的 最小化数值误差
class  TestSum //计算0.01到1.0的数列之和
{
        public static void main(String[] args)
        {
                float sum=0;
                for (float i=0.01f;i<=1.0f ;i=i+0.01f )//变量i从0.01开始,每次迭代增加0.01,当I超过1.0时循环终止。
                sum=sum+i;
                System.out.println("总和数是"+sum);
        }
}
//精确结果应该是50.50.
总和数是50.499985

作者: 电玩    时间: 2013-5-11 22:22
//程序清单4-8 求最大公约数 提示用户输入两个正整数,然后找到它们的最大公约数
import java.util.Scanner;
class  GreatestCommonDivisor
{
        public static void main(String[] args)
        {
                Scanner input=new Scanner(System.in);

                System.out.print("请输入第一个整数: ");
                int n1=input.nextInt();
                System.out.print("请输入第二个整数: ");
                int n2=input.nextInt();

                int gcd=1; //公约数
                int k=2;
                while (k<=n1 && k<=n2)
                {
                        if (n1%k==0 && n2%k==0)
                                gcd=k;
                                k++;
                        }
                        System.out.println(n1+"和"+n2+"的最大公约数是"+gcd);
                }
}
/*
请输入第一个整数: 125
请输入第二个整数: 2525
125和2525的最大公约数是25
*/
作者: 电玩    时间: 2013-5-13 10:37
//程序清单4-9 预测未来学费 假设某大学今年的学费是10000美金,而且以每年7%的速度增加。多少年之后学费会翻倍?
class  FutureTuition
{
        public static void main(String[] args)
        {
                double tuition=10000; //一年学费10000
                int year=1;
                while (tuition<20000)
                {
                        tuition=tuition*1.07;
                        year++;
                }
                System.out.println("学费涨到20000美元,要"+year+"年。");
        }
}
/*
学费涨到20000美元,要12年。
*/
作者: 电玩    时间: 2013-5-16 10:16
//程序清单4-10 蒙特卡罗模拟 使用随机数和概率来分析问题
class MoterCarloSimulation //用蒙特卡罗来估算π
{
        public static void main(String[] args)
        {
                final int NUMBER_OF_TRIALS=10000000;
                int numberOfHits=0;
                for (int i=0;i<NUMBER_OF_TRIALS ;i++ )
                {
                        double x=Math.random()*2.0-1;
                        double y=Math.random()*2.0-1;
                        if (x*x+y*y<=1)
                        {
                                numberOfHits++;
                        }
                }
                double pi=4.0*numberOfHits/NUMBER_OF_TRIALS;
                System.out.println("π等于"+pi);
        }
}
/*
π等于3.1419248
*/
作者: 葛杨杨    时间: 2013-5-16 11:05
不是吧, 这样也可以?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2