进度:第二周
入门
在开始开发之前,请确定你已经按照“使用工具”一节讲义中所介绍的方法正确的安装与使用了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™ 编码规范?
回答:应该遵守 Java语言编程规范。但是,除这之外不需要遵循别的派生的规范。