《Java基础+进阶》-浙江大学MOOC

本文档提供了浙江大学MOOC中关于Java的基础和进阶练习题,涵盖温度转换、时间换算、信号报告等多个方面。通过解决这些实际问题,读者可以深入理解Java编程的基本概念和技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础篇:

1.温度转换

题目内容:
写一个将华氏温度转换成摄氏温度的程序,转换的公式是:
°F = (9/5)*°C + 32
其中C表示摄氏温度,F表示华氏温度。
程序的输入是一个整数,表示华氏温度。输出对应的摄氏温度,也是一个整数。
提示,为了把计算结果的浮点数转换成整数,需要使用下面的表达式:
(int)x;
其中x是要转换的那个浮点数。

注意:除了题目要求的输出,不能输出任何其他内容,比如输入时的提示,输出时的说明等等都不能。这道题目要求转换后的数字,程序就只能输出这个数字,除此之外任何内容都不能输出。

输入格式:
一个整数。

输出格式:
一个整数。

输入样例:
100

输出样例:
37

时间限制:500ms
内存限制:32000kb

import java.util.Scanner;

public class TempChange{
   
	
	public static void main(String[] args){
   
		int f;
		double c;
		Scanner in = new Scanner(System.in);
		f = in.nextInt();
		c = (5.0 / 9) * (f - 32);
		System.out.println((int)c);
		in.close();
	}
}

2.时间换算

题目内容:
UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8。现在,你的程序要读入一个整数,表示BJT的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果分小于10分,需要保留十位上的0。如1124表示11点24分,而905表示9点5分,36表示0点36分,7表示0点7分。
有效的输入范围是0到2359,即你的程序不可能从测试服务器读到0到2359以外的输入数据。
你的程序要输出这个时间对应的UTC时间,输出的格式和输入的相同,即输出一个整数,表示UTC的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果分小于10分,需要保留十位上的0。
提醒:要小心跨日的换算。

输入格式:
一个整数,表示BJT的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果小时不是0而且分小于10分,需要保留十位上的0。

输出格式:
一个整数,表示UTC的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果小时不是0而且分小于10分,需要保留十位上的0。

输入样例:
933

输出样例:
133

时间限制:500ms
内存限制:32000kb

import java.util.Scanner;  
  
public class TimeStamp {
     
  
	public static void main(String[] args) {
     
		Scanner in = new Scanner(System.in);  
		int bjt;  
		int g, s;  
		bjt = in.nextInt();  
		g = bjt % 10;  
		s = bjt % 100 / 10;  
		bjt = bjt / 100;  
		if(bjt < 8){
     
			bjt = (bjt + 24 - 8);  
			System.out.print(bjt);  
			System.out.print(s);  
			System.out.println(g);  
		}  
		else if(bjt == 8)  
		{
     
			if(s != 0)  
				System.out.print(s);  
			System.out.println(g);  
		}  
		else if(bjt > 8){
     
			System.out.print(bjt - 8);  
			System.out.print(s);  
			System.out.println(g);  
		}  
	}    
}

3.信号报告

题目内容:
无线电台的RS制信号报告是由三两个部分组成的:
R(Readability) 信号可辨度即清晰度.
S(Strength) 信号强度即大小.
其中R位于报告第一位,共分5级,用1—5数字表示.
1—Unreadable
2—Barely readable, occasional words distinguishable
3—Readable with considerable difficulty
4—Readable with practically no difficulty
5—Perfectly readable
报告第二位是S,共分九个级别,用1—9中的一位数字表示
1—Faint signals, barely perceptible
2—Very weak signals
3—Weak signals
4—Fair signals
5—Fairly good signals
6—Good signals
7—Moderately strong signals
8—Strong signals
9—Extremely strong signals
现在,你的程序要读入一个信号报告的数字,然后输出对应的含义。如读到59,则输出:
Extremely strong signals, perfectly readable.

输入格式:
一个整数,信号报告。整数的十位部分表示可辨度,个位部分表示强度。输入的整数范围是[11,59]内有效的数字,这个范围外的数字不可能出现在测试数据中。

输出格式:
一句话,表示这个信号报告的意义。按照题目中的文字,先输出表示强度的文字,跟上逗号和空格,然后是表示可辨度的文字,跟上句号。注意可辨度的句子的第一个字母是小写的。注意这里的标点符号都是英文的。

输入样例:
33

输出样例:
Weak signals, readable with considerable difficulty.

时间限制:500ms
内存限制:32000kb

import java.util.Scanner;

public class ReadabilityStrength {
   

	public static void main(String[] args) {
   
		Scanner in = new Scanner(System.in);
		int rs = in.nextInt();
		int rs1 = rs / 10;
		int rs2 = rs % 10;
		switch (rs2) {
   
		case 1:
			System.out.print("Faint signals, barely perceptible");
			break;
		case 2:
			System.out.print("Very weak signals");
			break;
		case 3:
			System.out.print("Weak signals");
			break;
		case 4:
			System.out.print("Fair signals");
			break;
		case 5:
			System.out.print("Fairly good signals");
			break;
		case 6:
			System.out.print("Good signals");
			break;
		case 7:
			System.out.print("Moderately strong signals");
			break;
		case 8:
			System.out.print("Strong signals");
			break;
		case 9:
			System.out.print("Extremely strong signals");
			break;
		}
		System.out.print(", ");
		switch(rs1) {
   
		case 1:
			System.out.print("unreadable");
			break;
		case 2:
			System.out.print("barely readable, occasional words distinguishable");
			break;
		case 3:
			System.out.print("readable with considerable difficulty");
			break;
		case 4:
			System.out.print("readable with practically no difficulty");
			break;
		case 5:
			System.out.print("perfectly readable");
			break;
		}
		System.out.print(".");
		in.close();
	}
}

4.奇偶个数

题目内容:
你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据。程序输出读到的数据中的奇数和偶数的个数。

输入格式:
一系列正整数,整数的范围是(0,100000)。如果输入-1则表示输入结束。

输出格式:
两个整数,第一个整数表示读入数据中的奇数的个数,第二个整数表示读入数据中的偶数的个数。两个整数之间以空格分隔。

输入样例:
9 3 4 2 5 7 -1

输出样例:
4 2

时间限制:500ms
内存限制:32000kb

import java.util.Scanner;

public class Main {
   

	public static void main(String[] args) {
   
		Scanner in = new Scanner(System.in);
		int num;
		int odd = 0;
		int even = 0;
		do {
   
			num = in.nextInt();
			if(num != -1) {
   
				if(num % 2 == 0)
					even++;
				else
					odd++;
			}
		}while(num != -1);
		System.out.println(odd + " " + even);
		in.close();
	}
}

5.数字特征值

<
<think>嗯,用户问的是如何高效学习Java入门。首先,我得想想Java学习的关键点在哪里。可能得从基础语法开始,然后面向对象、常用类库这些。但用户想要的是效率高,所以不能只是罗列知识点,还要讲方法。 用户可能是刚开始学编程的新手,或者有其他语言基础想转Java。得考虑不同背景的学习者,但假设是零基础。需要强调实践,比如写代码做项目的重要性。 可能用户觉得自学效率不高,不知道从哪里下手。所以需要结构化的学习路径,分阶段进行。比如先基础,再OOP,然后工具框架,最后项目。 还要推荐一些资源,比如书籍、在线课程、练习平台。但资源太多可能会让用户选择困难,需要精选几个高效的,比如《Head First Java》或者廖雪峰的教程。 另外,常见误区需要提醒,比如只看不练,或者跳过基础知识直接学框架。这些都会影响效率,得指出正确的做法。 学习方法方面,分阶段、多实践、善用工具、参社区,这些点可能对提高效率有帮助。比如用IDE而不是文本编辑器,利用调试工具,参开源项目等。 最后,可能用户需要一些鼓励,比如坚持持续学习的重要性。总结一下,结构化的步骤加上实践资源推荐,应该能帮用户高效入门Java。</think>学习Java入门想要提高效率,建议按照以下结构化路径进行,结合理论实践,避免常见误区: 一、核心学习阶段(建议2-3个月) 1. 基础语法(2周) - 重点掌握:变量/数据类型、运算符、流程控制(if/for/while) - 必做实践:编写计算器、成绩评级等控制台小程序 - 避坑提示:特别注意类型转换、==equals区别 2. 面向对象编程(3周) - 核心概念:类对象、继承/多态/封装、接口/抽象类 - 典型练习:设计银行账户系统、动物继承体系 - 深入理解:内存模型(堆栈区别)、垃圾回收机制 3. 核心API(3周) - 重点掌握: - 集合框架(ArrayList/HashMap) - IO流(文件读写) - 多线程(Thread/Runnable) - 异常处理 - 实战项目:开发简易文件管理器、多线程下载器 二、效率提升工具链 1. 开发环境 - IDE:IntelliJ IDEA(社区版免费) - 构建工具:Maven基础 - 版本控制:Git基础命令 2. 学习辅助 - Java官方文档:Oracle Java Tutorials - 在线练习:LeetCode简单题(按知识点分类) - 调试技巧:学会使用断点调试、日志输出 三、高效学习法 1. 3:7时间分配原则 - 30%时间看理论,70%时间写代码 - 每天至少手写200行有效代码 2. 项目驱动学习 - 阶段项目建议: - 学生管理系统(控制台版) - 简易聊天室(Socket网络编程) - 个人博客系统(Web基础3. 知识管理法 - 建立代码片段库(使用Gist或本地管理) - 用思维导图梳理知识体系 - 定期做知识复盘(周总结+月总结) 四、优质资源推荐 1. 书籍(由浅入深) - 《Head First Java》(图文并茂入门) -Java核心技术 卷Ⅰ》(经典工具书) - 《Effective Java》(进阶最佳实践) 2. 视频教程 - 浙江大学翁恺《零基础Java》(中国大学MOOC- 廖雪峰Java教程(实战导向) 3. 社区资源 - Stack Overflow(问题搜索技巧) - GitHub Java趋势项目(学习优秀代码) - 阿里Java开发手册(规范养成) 五、常见误区规避 1. 不要过早接触框架(先夯实JavaSE基础2. 避免"复制粘贴式学习"(务必手敲代码) 3. 警惕过度设计(从简单实现开始迭代) 4. 不要忽视Javadoc(培养阅读官方文档能力) 六、学习效果检测(每月自测) 1. 基础能力: - 能独立完成1000行左右的控制台项目 - 理解面向对象设计基本原则 2. 进阶能力: - 能实现简单多线程应用 - 会使用基本设计模式(如工厂模式) 3. 工程能力: - 掌握Maven依赖管理 - 能用Git进行版本控制 建议每天保持2小时有效学习时间,前3个月避免多线程学习(如同时学Python)。遇到问题优先尝试官方文档解决,再查阅技术博客(推荐InfoQ、掘金),最后到社区提问。坚持6个月后可达到初级开发水平,后续可转向Spring生态学习。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值