《Java面向对象程序设计》课后答案

  • 更新时间:
  • 9891人关注
  • 点击下载

给大家带来的是关于Java相关的课后习题答案下载,介绍了关于Java、面向对象、程序设计方面的内容,由龚春竹 网友提供,本资源目前已被411人关注,高等院校Java类教材综合评分为:9.9分

《Java面向对象程序设计实验指导与习题解答》是《Java面向对象程序设计》(作者耿祥义,清华大学出版社出版,2010)的配套实验指导和习题解答。本书每章的上机实践由若干个实验组成。每个实验由相关知识点、实验目的、实验要求、实验模版、实验指导和实验报告组成。在进行实验之前,首先通过实验目的了解实验要完成的关键主题、通过实验要求知道本实验应达到怎样的标准,然后,完成实验模板,填写实验报告。本书的附录为主教材的习题参考解答。 《Java面向对象程序设计实验指导与习题解答》适合作为高等学校计算机专业及相关专业的学习用书,也可供相关领域技术人员参考。本书由耿祥义、张跃平编著。

目录

  • ●章 Java入门
  • ● 实验1 一个简单的应用程序
  • ● 实验2 教室、教师和学生
  • ● 实验 答案
  • ●第2章 基本数据类型
  • ● 实验1 输出特殊偏旁的汉字
  • ● 实验2 输入、输出学生的基本信息
  • ● 实验3 超大整数的加法
  • ● 实验答案
  • ●第3章 运算符、表达式与语句
  • ● 实验1 托运行李
  • ● 实验2 自动售货机
  • ● 实验3 猜数字游戏
  • ● 实验答案
  • ●第4章 类与对象
  • ● 实验1 Tank类
  • ● 实验2 计算机与光盘
  • ● 实验3 家族的姓氏
  • ● 实验答案
  • ●第5章 继承与接口
  • ●部分目录
展开阅读
精选笔记1:java面向对象之人机猜拳小游戏

8小时23分钟前回答

人机猜拳小游戏,只要用到的java面向对象的思维模式。本游戏中有游戏玩家和计算机两个参与者。玩家和计算机都有的属性是姓名和得分。共分为4个类。下图是游侠小程序控制台截图:

 
 

以下是源代码:

Computer.java类

package com.whf.guess.game;
/** 
 * @author :辰
 * @version 
 * 创建时间:2017年2月24日 上午8:38:29 
 * 
 */
public class Computer {

  String name = "电脑";//名字
  int score = 0;//积分

  public int showFist() {
    //产生随机数

    int show = (int) ((Math.random()*10)%3+1); // 产生随机数,表示电脑出拳

    //输出出拳结果并返回
    switch (show) {
    case 1:
      System.out.println(name+"你出拳:剪刀");
      break;
    case 2:
      System.out.println(name+"你出拳:石头");
      break;
    case 3:
      System.out.println(name+"你出拳:布");
      break;
    }

    return show;
  }



}

Person.java 类

package com.whf.guess.game;

import java.util.Scanner;

/** 
 * @author :辰
 * @version
 * 创建时间:2017年2月24日 上午8:45:41 
 * 
 */
public class Person {

  String name = "匿名"; //名字
  int score = 0;   //积分  

  public int showFist(){
    //接收用户的选择
    Scanner input = new Scanner(System.in);
    System.out.println("\n请出拳:1.剪刀 2.石头  3.布");
    int show = input.nextInt();
    //输出出拳结果,并且返回
    switch (show) {
    case 1:
      System.out.println(name+"你出拳:剪刀");
      break;
    case 2:
      System.out.println(name+"你出拳:石头");
      break;
    case 3:
      System.out.println(name+"你出拳:布");
      break;
    }
    return show;
  }

}

Game.java类。包含游戏的比赛核心代码

package com.whf.guess.game;

import java.util.Scanner;

/** 
 * @author :辰
 * @version
 * 创建时间:2017年2月24日 上午8:37:06 
 * 
 */
public class Game<computer> {

  Person person ; //甲方

  Computer computer;// 乙方

  int count;// 对战次数

  public void inital(){
    person = new Person();
    computer = new Computer();
    count = 0;
  }
  //开始游戏
  public void startGame(){
    System.err.println("-------------欢迎进入猜拳游戏---------------");
    System.out.println();
    System.out.println("******************************************");
    System.out.println("——————出拳规则:1.剪刀  2.石头  3.布——————————");
    System.out.println("-------------》》》猜拳开始《《《------------");
    System.err.println("-------------------------------------------");
    Scanner input = new Scanner(System.in);
    String exit="n";//退出系统
    do {
      inital();//初始化
      //选择对手
      System.out.println("选择你的对手1.马云   2.马化腾   3.马大姐  ");
      int role = input.nextInt();
      if (role ==1) {
        computer.name="马云";
      }else if (role == 2) {
        computer.name="马化腾";
      }else if (role == 3) {
        computer.name="马大姐";
      }

      //游戏玩家输入姓名
      System.out.println("请输入你的姓名:");
      person.name=input.next();
      System.out.println(person.name+"  VS  "+computer.name+"对战\n");
      //开始游戏
      System.out.println("要开始吗?(y/n)");
      //开始一局游戏
      String start = input.next();
      int perFist;//游戏用户出拳
      int comFist;//计算机出拳
      while (start.equals("y")) {
        //出拳
        perFist = person.showFist();
        comFist = computer.showFist();
        //判断胜负
        if ((perFist==1&&comFist==1)||(perFist==2&&comFist==2)||(perFist==3&&comFist==3)) {
          System.err.println("结果:和局,真衰!\n");//平局
        }else if ((perFist==2&&comFist==1)||(perFist==3&&comFist==2)||(perFist==1&&comFist==3)) {
          System.err.println("结果:你赢了,真帅!\n");//胜利
          person.score++;
        }else {
          System.err.println("结果是:^_^,你输了,下载再战!\n");//计算机赢
          computer.score++;
        }
        count++;
        System.out.println("是否进行下一轮(y/n)");
        start = input.next();

      }
      //显示结果
      showResult();
      System.out.println("\n要开始下一局吗?(y/n):");
      exit = input.next();
      System.out.println();

    } while (!exit.equals("n"));

    System.out.println("系统退出");
  }
  private void showResult() {
    // TODO Auto-generated method stub
    //显示对战次数
    System.out.println("------------------------------");
    System.out.println(computer.name+"  VS  "+person.name);
    System.out.println("对战次数:"+count);
    //显示最终得分
    System.out.println("\n姓名\t得分");
    System.out.println(person.name+"\t"+person.score);
    System.out.println(computer.name+"\t"+computer.score+"\n");

    //显示对战结果
    int result = calcResult();
    if (result==1) {
      System.err.println("结果:打成平手,下次再和你一分高下");
    }else if (result==2) {
      System.err.println("结果:恭喜恭喜你赢得比赛");
    }else
    {
      System.err.println("结果:不气馁,下次再来");//计算机赢
    }
    System.out.println("--------------------------");


  }

  //计算比赛结果
  private int calcResult() {
    // TODO Auto-generated method stub
    if (person.score == computer.score) {
      return 1;//战平
    }else if (person.score > computer.score) {
      return 2;//游戏玩家赢
    }else {
      return 3;//惜败
    }
  }

}

StartGuess.java类

package com.whf.guess.game;
/** 
 * @author :辰
 * @version
 * 创建时间:2017年2月24日 上午9:35:36 
 * 
 */
public class StartGuess {
  public static void main(String[] args) {
    Game game = new Game();

    game.inital();

    game.startGame();
  }

}

以上就是完整的人机猜拳java面向对象的小游戏源码.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。

展开阅读
精选笔记2:JavaScrpt的面向对象全面解析

1小时49分钟前回答

每次说到javascript的面向对象,总感觉自己心里懂,但是却不知道该怎么说,这就是似懂非懂到表现,于是乎,每次一说,就要到处去查找资料,零零碎碎到看了一些,感觉有懂了,但是过段时间,好像又不知道是怎么回事了,于是乎,又到处找资料,然道是我本来就缺对象?才不理解对象是啥,以至于现实中找找对象,javascript中也在找对象!哎,好尴尬啊!直到我看到了一个妹纸写到“不可不知的javascript面向对象”,我才明白面向对象是什么,这是不是说我要找到对象就是这个妹纸呢😄,先记录一下备忘吧,下面是妹纸写到主要内容:

对象的创建:

1 创建一个面向对象

var obj = new Object(); 
obj.name = 'haha';
obj.showName = function(){ 
 alert(obj.name);
}
obj.showName();

缺点:当我们想创建多个面向对象的时候,重复代码过多,需要封装,所以有了工厂方法。

2 工厂方式

function CreatePerson(name){ 
 var obj = new Object(); //原料
 obj.name = name;   //加工
 obj.showName = function(){
  alert(this.name);
 } 
 return obj;//出厂
}
var p1 = CreatePerson('haha');
p1.showName();
var p2 = CreatePerson('hehe');
p2.showName();
//其实就是简单的封装函数,整个过程像工厂的流水线,所以叫工厂方式

缺点:无法识别创建的对象的类型。因为全部都是Object,没有区分度,不像Date、Array等,因此出现了构造函数模式。

3 构造函数模式

function CreatePerson(name){ 
 this.name = name; 
 this.showName = function(){ 
  alert(this.name);
 } 
} 
var p1 =new CreatePerson('haha'); 
p1.showName();
var p2 = new CreatePerson('hehe'); 
p2.showName(); 

我们通过这二个方面来改变:

1 函数名首字母大写

这是为了区别于普通的函数,构造函数本身其实就是普通的函数,只是我们专门用它来实现了构造的功能,所以专门起了一个名字叫构造函数,任何函数都可以成为构造函数,这取决于你调用函数的方式,当使用了New的方式调用就成了构造函数。

2 New 关键字调用

调用函数的时候用了 New关键字,那么New到底做了什么?用不用New有什么区别?再来看下面的例子

function CreatePerson(name){
 this.name = name;
 this.showName = function(){
  alert(this.name); 
 }; 
 console.log(this);
} 
new CreatePerson('haha'); //CreatePerson
CreatePerson('haha'); //window

我们会发现当用New去调用一个函数的时候,this的指向会不一样。其实New主要做了下面这些事,不过下面写的只是大概的行为,并不是内部源码。

function CreatePerson(name){ 
 var obj = {}; //声明一个空对象obj 
 obj._proto_= CreatePerson.prototype;
 //把这个对象的_proto_属性指向构造函数的原型对象,这样obj就可以调用CreatePerson原型对象下的所有方法 ,这里原型先知道结论,下面会讲。
 CreatePerson.apply(obj); //用apply方法让this指向obj对象
 this.name = name; //obj对象添加属性,方法
 this.showName = function(){ 
  alert(this.name);
  }; 
 return obj;//返回这个对象
}

函数构造模式存在的问题:

alert(p1.showName==p2.showName);//false

缺点:可见这两个对象并不是共用一个方法,每new一次,系统都会新创建一个内存,这两个对象各自有各自的地盘,但他们具有相同的功能,还不共用,肯定不是我们所希望的。所以就有了下一种方法,原型+构造模式

4 原型+构造模式

原型:每个函数都有一个prototype属性,它是一个对象,也称作原型对象,我们可以把方法和属性写在它上面(不过原型对象不仅仅有我们写的属性和方法,还有别的,下面会介绍),而通过这个函数创建出来的实例对象,都能共享这个原型对象下的方法和属性。所以我们只需要把想要共享的东西放在函数的prototype下,不想共享的东西通过构造函数来创建就可以了。
看个栗子(原型+构造)

function CreatePerson(name){ 
 this.name = name;
}
CreatePerson.prototype.showName = function(){ 
 alert(this.name);
}
var p1 =new CreatePerson('haha');
p1.showName();
var p2 = new CreatePerson('hehe');
p2.showName();
alert(p1.showName==p2.showName);//true

测试为true,可见showName()方法是共享的,也就是说他们共用一个内存,更进一步的说它们存在引用关系,也就是说你更改了p1的showName也会影响p2的showName。

_proto_属性:

同一个函数造出来的实例对象能共享这个函数的prototype下的方法和属性,但是它是如何做到的呢?这里要出场的就是_proto_属性.

每个实例化对象都有_proto_属性,它是一个指针,指向函数的prototype,也就是保存了它的地址。(JS中任何对象的值都是保存在堆内存中,我们声明的变量只是一个指针,保存了这个对象的实际地址,所以有了地址就能找到对象),
所以总得来说,每个实例化对象都有_proto_属性,保存了构造函数的原型对象的地址,通过这个属性就可以拥有原型对象下的所有属性和方法,_proto_属性实际就是实例化对象和原型对象之间的连接

原型链:

每个函数都可以成为构造函数,每个函数都有原型对象,每个原型对象也可以是一个实例化对象,比如,你创建了一个函数fun,它是构造函数function的实例化对象,而function的原型对象,又是Object的实例对象。所以fun有个_proto_属性可以访问到function的原型对象,function原型对象也是个实例对象,也有个_proto_属性,可以访问到Object的原型对象,所以通过_proto_属性,就形成了一条原型链。每个实例化对象都可以访问到链子上方的方法和属性,所以fun是可以访问Object原型对象下的方法和属性的。实际上所有对象都可以访问到Object的原型对象。

原型链的访问规则:先在自身的下面寻找,再去一级一级的往原型链上找。

如下:

function Aaa(){}
Aaa.prototype.num = 3;
var a1 = new Aaa();
a1.num =10;
alert(a1.num); //10

JavaScrpt的面向对象全面解析

原型对象:

原型对象下可能有三种属性:

1 原型对象所带方法和属性 2 constructor 3_proto_属性

constructor:构造函数属性,每个函数的原型对象都有的默认属性,指向函数。

每个实例化对象本身是没有constructor属性的,他们下面默认只有一个_proto_属性,用来连接原型对象,而和构造函数本身是没有直接的联系的。所以它的constructor是访问的原型对象上的。所以当原型对象的constructor变化了,实例化对象的constructor也会改变。但是如果这个对象本身既是原型对象,又是实例化对象,那就拥有了constructor属性,无需从原型对象上面访问。**

看下面的例子,来验证我们所说的:

function CreatePerson(name){ 
 this.name = name;
}
CreatePerson.prototype.showName = function(){ 
 console.log(this.name);
 };
var p1 =new CreatePerson('haha');
p1.showName();
console.log(p1.constructor); // CreatePerson 来自CreatePerson.prototype
console.log(CreatePerson.prototype); 
// {showName:{},constructor:CreatePerson,__proto__:Object.prototype}
//可见,原型对象保存了
  1 自身添加的方法,
  2 构造函数constructor 
  3 _proto_(和上一层构造函数原型对象的连接)
console.log(CreatePerson.prototype.__proto__===Object.prototype);
// true 这个原型对象本身又是object的实例化对象,所有_proto_指向Object的原型对象
console.log(CreatePerson.prototype.__proto__===Object);
// false 可见是和构造函数下原型对象的连接,不是构造函数
console.log(CreatePerson.prototype.constructor);
//CreatePerson CreatePerson.prototype是Object实例化对象,也是原型对象,所以自身拥有constructor属性
console.log(Object.prototype.__proto__); 
// null 原型链的终点是null
console.log(CreatePerson.__proto__); //function.prototype
// CreatePerson本身既是构造函数又是function的实例化对象,拥有_proto_属性,指向function的原型对象
console.log(CreatePerson.constructor); 
// function 继承自function.prototype
console.log(CreatePerson.prototype instanceof CreatePerson ) 
//验证是否在一条原型链上 false

字面量法定义原型:

为了创建对象的代码更方便,你一定见过这样的代码,就是字面量法:

function Aaa(){}
Aaa.prototype = { 
 showName:function(){},
 showSex:function(){}
}; 
var a1 = new Aaa();
console.log(Aaa.prototype);
//{showName:function(){},_proto_} 
//你会发现constructor不见了,因为这种方式相当于重新赋值了Aaa.prototype 
console.log(Aaa.prototype.constructor);
//Object 因为自身没有了constructor属性,就去上级原型对象找,找到了Object
console.log(a1.constructor );
//Object 也变了,验证了它是访问的原型对象上的

因此我们在写的时候需要修正一下原型的指向:

function Aaa(){}
Aaa.prototype = { 
constructor:Aaa, 
num1:function(){alert(10);}
}
var a1 = new Aaa();
a1.constructor // Aaa

 以上所述是小编给大家介绍的JavaScrpt的面向对象全面解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对码农之家网站的支持!

展开阅读

Java相关资源

  • JavaScript高级程序设计

    JavaScript高级程序设计

    《 JavaScript高級编程设计(第3版) 》是JavaScript超級畅销书的*版。ECMAScript5和HTML5在规范之战中同时获胜,使很多特有保持和手机客户端拓展宣布进到标准,另外也为JavaScript增加了许多融入发展方

    大小:23 MBJS程序设计

    立即下载
  • Head First JavaScript程序设计

    Head First JavaScript程序设计

    大小:71.2 MBJavaScript

    立即下载
  • Java程序设计基础

    Java程序设计基础

    《Java程序设计基础》是一本关于java的电子书资源,涉及Java、程序设计等相关内容,本文提供大小为158MB的扫描第5PDF格式电子书下载,希望大家能够喜欢。

    大小:158 MBjava

    立即下载
  • JavaScript高级程序设计(第4版)

    JavaScript高级程序设计(第4版)

    《JavaScript高级程序设计(第4版) 》是JavaScript经典图书的新版。第4版涵盖ECMAScript 2019,全面、深入地介绍了JavaScript开发者必须掌握的前端开发技术,涉及JavaScript的基础特性和高级特性。书中详尽讨论了JavaScript的各个方面,从JavaScript的起源开始,逐步讲解到新出现的技术,其中重点介绍ECMAScript和DOM标准。在此基础上,接下来的各章揭示了JavaScript的基本概念,包括类、期约、迭代器、代理,等等。另外,书中深入探讨了

    大小:122 MBJavaScript

    立即下载
  • Java语言程序设计:进阶篇(第10版)

    Java语言程序设计:进阶篇(第10版)

    本书是Java语言的经典教材,中文版分为基础篇和进阶篇,讲解了介绍程序设计基础、面向对象程序设计、GUI程序设计、数据结构和算法、高级Java程序设计等内容

    大小:86.3 MBJava编程

    立即下载
  • Java语言程序设计:基础篇(第6版)

    Java语言程序设计:基础篇(第6版)

    本书是java语言的经典教材,中文版分为《java语言程序设计 基础篇》和《java语言程序设计 进阶篇》。基础篇从java语言的特点人手,介绍了语法结构、面向对象程序设计基础知识到面向对象程序设计、图形用户界面设计、异常处理、二进制i/o和递归等内容。进阶篇主要介绍数据结构、高级gui设计、多线程、集合架构、网络和web程序设计、算法效率和排序、mvc,以及高级java数据库程序设计等方面的内容,循序渐进,可读性强。全书分八部分,以示例讲解

    大小:62.7 KBJava语言

    立即下载
  • java语言程序设计:基础篇(英文第8版)

    java语言程序设计:基础篇(英文第8版)

    《Java语言程序设计:基础篇》是机械工业出版社2011年11月10日出版的图书。 目录 Chapter 1 Introduction to Computers,Programs,and Java Chapter 2 Elementary Programming Chapter 3 Selections Chapter 4 Loops Chapter 5 Methods Chapter 6 Single-Dimensional Arrays Chapter 7 Multidimensional Array

    大小:10.6 MBjava语言

    立即下载

学习笔记

19小时54分钟前回答

浅谈java面向对象(类,封装,this,构造方法)

无论面向对象还是面向过程, 这俩都是解决问题的思路而已, 只是角度不同. 面向过程: 强调解决问题的每一个步骤都亲力亲为,每一个细节都自己手动实现. 面向对象: 使用特定功能对象去解决特定的问题, 每一个细节不需要关注,只需要创建对应的对象即可. 面向对象是基于面向过程的 类和对象及他们的关系 类: 具有相同特征和行为(功能)的事物的统称 , 是一个抽象概念 对象: 这类事物中某个确定的个体 类和对象的关系 一个类可以创建多个对象 , 类是对象的抽象, 对象是类的实例. 描述一个事物---- 类 特征---- 成员属性(成员变量) 行为(功能)--- 成员方法 类的创建格式: 修饰符 class 类名……

6小时31分钟前回答

javascript面向对象三大特征之多态实例详解

本文实例讲述了javascript面向对象三大特征之多态。分享给大家供大家参考,具体如下: 多态 从某种意义上来说,多态是面向对象中重要的一部分,也是实施继承的主要目的。 一个实例可以拥有多个类型,它既可以是这种类型,也可以是那种类型,这种多种状态被称为类的多态。 多态的表现形式很多,其中继承和重载都是多态的表现形式。 ——整理自《jQuery开发从入门到精通》 继承 继承本身是多态的一种实现。详情请参考前面一篇:https://www.jb51.net/article/166097.htm 重载 重载也是多态的一种体现。重载就是同名方法的多个实现。依靠参数的类型和参数的个数来区分和识别。在js中,函数的参数是没有类……

5小时11分钟前回答

javascript面向对象三大特征之封装实例详解

本文实例讲述了javascript面向对象三大特征之封装。分享给大家供大家参考,具体如下: 封装 封装(Encapsulation):就是把对象内部数据和操作细节进行隐藏。很多面向对象语言都支持封装特性,提供关键字如private来隐藏某些属性和方法。要想访问被封装对象中的数据,只能使用对象专门提供的对外接口,这个接口一般为方法。调用该方法能够获取对象内部数据。 在JavaScript语言中没有提供专门的信息封装关键字,不过可以使用闭包来创建,只允许从对象内部访问的方法和属性。另外,接口也是数据封装的一种工具,接口提供了外界访问方法的约定。在应用开发中,所有类都应定义接口,类只向外提供已实……