MIT OpenCourseWare
OCW Home Course List About OCW Help with OCW Feedback


Search
» 高级搜索
 课程主页
 教学大纲
 教学日程
 参考读物
 讲义
 复习
 实验
 作业
 考试
 项目
 工具
 相关资源

练习 1: Java入门


进度:第二周

入门

在开始开发之前,请确定你已经按照“使用工具”一节讲义中所介绍的方法正确的安装与使用了Java™。

要了解整个问题集,请阅读Java教程第三版的第一到第五章。各单独的问题也都列出了相应的资料。

如果你对解决练习中的某些问题提出了一些设想,请将它们清楚的列在你的解决方案里面。你的设想必须是连贯的、合理的。

问题 1: 语言基础 [10 分]

阅读:语言基础:变量、运算符、表达式、语句。
请看下面计算按英尺和英寸计算圆半径的代码,假设圆的面积已经给出。

下载源代码

 public class MathCalc



                     {



                       public static void main(String[] args)



                     {



                       double radius = 0.0;



                       double circleArea = 100.0;



                       int feet = 0;



                       int inches = 0;



                       radius = Math.sqrt(circleArea/Math.PI);



                       feet = (int)Math.floor(radius);



                       inches = (int)Math.round(12.0*(radius - feet));



                       System.out.println("The radius of a circle with area" + circleArea



                       + " square feet is\n " + feet + " feet " + inches + " inches");



                     }



                     }




太阳的直径大约是865,000英里。地球的直径大约是7600英里。使用Math类中的方法计算:

(a) 以立方英里表示地球的体积
(b) 以立方英里表示太阳的体积
(c)太阳和地球体积的比值

然后输出这些数据。太阳和地球都可以作为球体对待。球的体积公式是:4 pi r^3/3, 其中r是球的半径。

运行你所编写的代码,然后提交你的代码和你的程序的输出。输出应该是以下形式:地球的体积是 X 立方英里, 太阳的体积是 Y 立方英里,太阳和地球的体积的比值是 Z。


问题 2:语言基础 [10 分]

阅读:语言基础:控制语句

 



                   public class Primes



                     {



                      public static void main(String[] args)



                     {



                      int nValues = 50;



                      boolean isPrime = true;



                      for(int i = 2; i <= nValues; i++)



                      {



                       isPrime = true;



                       for (int j = 2; j < i; j++)



                        {



                         if (i % j == 0)



                         {



                          isPrime = false;



                          break;



                         }



                        }



                       if (isPrime)



                       System.out.println(i);



                      }



                     }



                     }



建立一个有以下特征的新程序。 下载源代码
(a) 使用标记的continue语句代替break。
(b) 不使用isPrime变量。
(c) 当测试一个整数是否素数时,只需按等于已经测试过数字的平方根的数字划分就够了。


提交你重新编写的代码。


问题 3:对象基础 [15 分]

阅读:对象基础和简单的数据对象、对象的生命周期、字符和字符串

在下面的代码中,一个句子中的所有内容将按顺序进行分析,以确定该句子中的元音字母、空格以及字母的使用情况。补充计算空格数量、元音字母数量和辅音字母数量的代码。 下载源代码

                     public class StringCharacters



                     {



                     public static void main(String[] args)



                     {



                      String text = "To be or not to be, that is the question;"



                      +"Whether `tis nobler in the mind to suffer"



                      +" the slings and arrows of outrageous fortune,"



                      +" or to take arms against a sea of troubles,"



                      +" and by opposing end them?";



                      int spaces = 0, 



                      vowels = 0,



                      letters = 0;



                      //在这里填写你的代码



                    System.out.println("The text contained vowels: " + vowels + "\n" +



                      consonants " + (letters - vowels) + "\n"+ spaces: " + spaces);



                     }



                     }



当完成编码后运行你的程序。提交程序代码以及程序运行的输出结果。


 

问题 4:对象基础 [25 分]

阅读:对象基础和简单的数据对象

数字
数组
编写一个建立以前面问题中的句子为内容的字符串变量的程序,从该句子中提取所有的单词,并将它们按照字典序排序。如果需要的话,你可以定义'words'变量(应该解释原因),但是在提交作业的时候你应该提交你对'words'的定义。你可以选择你所喜欢的排序方法。最简单的排序方法是冒泡排序法,它的工作原理如下:

  • 从数组的第一个元素开始将数组中每个元素与下一个元素进行比较(0和1、1和2、2和3等等)。
  • 如果前一个元素比后一个大,则交换这两个元素。
  • 对整个数组重复此过程,直到不需要再进行交换。这时数组中的所有元素将是按升序排列的了。
  • 在完成编码后运行你的程序。提交你的程序代码以及程序运行的输出结果。

问题5:类和继承 [25 分]

阅读:类和继承:建立类

我们定义了一个描述点的基本类: 下载源代码

                     class Point



                     {



                      double x;



                      double y;



                      



                      // Create a point from coordinates



                      Point(double xVal, double yVal)



                      {



                       x = xVal;



                       y = yVal;



                      }



                     }



使用点对象来定义一个线段类。这应该包括一个从两个点创建一个线段的构造器,一个计算线段长度的方法,以及一个将线段转化为字符串类型从而实现打印输出的方法。

最后,编写一个求交点函数,这个函数应该由一个线段对象调用,并返回两个线段的交点。(参阅关于两线段交点的资料)

提交你所编写的代码。请确定你的代码能够通过编译。


问题6:类和继承 [15 分]

阅读:类和继承:管理继承

假设我们定义了如下一个用来描述动物的类Animal:下载源代码

                 public class Animal



                   {



                    public Animal(String aType)



                   {



                    type = new String(aType);



                   } 



                    public String toString()



                   {



                    return "This is a " + type;



                   } 



                    private String type;



                   }



现在定义另一个基于Animal的类:狗类。包括两个私有的字符串来表示狗的名字和品种。

对狗子类定义两个构造器,一个只接受表示狗名字的变量,另一个接受表示狗名字和品种的两个变量。确保父类中的成员变量type被合适的初始化。

提交你所编写的代码。

问题&回答

这部分将对练习中一些常见问题进行澄清和回答。我们将尽力保持对这部分的更新,因此,当你遇到问题时这部分应该是你最先查看的地方(在仔细阅读问题描述讲义和规格说明之后)。

问题: 问题2中,有人提出关于“面条代码”中的标记continue(goto)相关的问题。非常感谢提出这个问题的同学,这使得我们的工作人员能够认识到该问题并对之进行解释。

回答:

  • Java中的跳转和分支语句(continue、exit、return、exception)与其他语言中的(goto)并不一样。请查阅Java语言说明中的Blocks和语句部分。或者查阅非条件跳转中的信息,它指出“Java只允许结构化的流控制语句,因此不支持非条件跳转”。
  • Continue和exit语句常常能改进程序的结构,这当然比增加大量的标志好,那会使得一个程序难以理解而且会降低程序的效率。
  • 参阅Go To Statement Considered Harmful, Edsger W. Dijkstra,以及与它观点相反的Donald Knuth, Structured Programming with go to Statements, ACM Computing Surveys, 6(4):261--301, December 1974。
  • 参阅包含一些代码实例的关于支持和反对GOTO语句的讨论
  • Java开发者联盟(JDC)中有一个关于GOTO语句和Java编程的介绍,当中列举了一些C++(使用goto语句)代码和Java(使用标记语句)代码的比较。


问题:我们应该遵循怎样的Java™ 编码规范?

回答:应该遵守 Java语言编程规范。但是,除这之外不需要遵循别的派生的规范。




 
MIT Home
Massachusetts Institute of Technology Terms of Use Privacy