Java入门编程(作业)实现总结(一)

鉴于学校的Java基本上是把我们当asshole来教,我决定在作业上花点功夫弄点新花样顺便自学一下。总结一下已完成的进度,共有如下几个关于错误的反思:

1.无法在静态上下文中使用静态变量

这是最让我印象深刻的一个错误,目测是由于和C的差别略大所以我多思考了一些,有如下代码:

public class XX{
  public static void main{
    Scanner scanner = new Scanner(System.in);
    int a = Scanner.nextInt();//这句有错误
  }
}
然后出了错误提示,我很崩溃。。。。这不是Scanner下的nextInt方法么?不是输入一个int给a么?谁特么来告诉我哪里错了?????(╯‵□′)╯︵┻━┻

楞死不明白哪里错了,无奈用作业上的示例代码盖掉了错误行,即int a  = scanner.nextInt();

然后编译过了。。。。。。。

过了。。。。。。。

我哭晕在厕所。。。。亏我还以为是前面的哪一句出了问题待到这句才反映出来。。。。

对比了一下,就是一个S的大小写问题,但错误的提示不是这么简单了,Scanner是Java类库中的一个非静态方法,即没有使用static定义,而main则是static型的方法,两者有一定区别。在C中,编译的优先级依次为预编译>static内容>顺序编译其他代码。Java中目测没有预编译的概念,所以static就有了最高的编译优先级,而在Java中,非static类在编译后只会成为一段字节码而不会自动加载进入main,所以尽管编译器检测到了外部非static类的使用,但却无法直接使用。Java的意图是:将非static类和方法视为一种规范,在程序运行中不能被更改,只能在main中新建一个指向其的对象(在内存中分配新的空间)来使用该类/方法。这样确实可以更好地保护源代码而且起到了C中类似于#ifdefine的作用,很好的减少了内存的使用。但这么弄总觉得有点*蛋。。。。每次使用一个方法都要新建一个对象,这个对象又是为另一个对象服务的。。。。。。不是很麻烦而且混乱么。。。。。

2.需要关键字(无法使用关键字)

这个问题总是出现在我使用private关键字修饰一个变量或者对象的时候,书上明明说使用该关键字可以更好的保护类和方法的中的数据(成为真·私有变量),为啥我一加连变量和对象都创建不了了?百思不得其解。(我是在类和方法的开头使用了private datatype name这样的形式定义的变量,然而并不能通过编译。。)

其他的都是一些小的语法错误了,没有什么好说的。

还有一个问题,我在写这个程序的时候很纠结,不知道类应该有多大,方法应该有多大,即“类究竟表示什么”和“方法究竟应该表示什么”。目测这是面向对象编程一个最最主要的问题,按理说应该只能靠经验来改善这个问题,然而我现在并没有这个经验所以我纠结了。。。。。题目要求“1.编写一个程序检测输入的数是奇数还是偶数 2.编写一个程序判断你的成绩等级”,按理说这应该是两个程序,然而我脑洞一开,开始作死,将两个题目分别视为两个类,每个类中分为输出方法和输出方法,public类中只有main,负责选择模式。尽管我成功的实现了题目和我脑洞的要求,但我总觉得我并没有跳出C面向过程的编程思想。在思考实现方法时并没有考虑整体的框架。希望能在以后的编程中找到真正面向对象编程的思想模式。

这里附上我写的代码:

import java.util.Scanner;
class Number{
	private int Number = 0;
	void GetInput (){
		Scanner scanner = new Scanner(System.in);
		System.out.print("Please enter the number:");
		Number = scanner.nextInt();
	}
	void Result (){
		int result = (Number%2);
		if (result == 1)
			System.out.print(Number+" is an odd number!");
		else
			System.out.print(Number+" is an even number!");
	}
}

class Score{
	private int Number = 0;
	void GetInput (){
		Scanner scanner = new Scanner(System.in);
		System.out.print("Please enter the Score:");
		Number = scanner.nextInt();		
		while (Number > 100 || Number < 0)
		{
			System.out.print("Error input.Please enter a number between 0 and 100!");
			Number = scanner.nextInt();
		}
	}
	void Result (){
		if (Number >= 80)
			System.out.print(Number+"!It's Excellent!Is this your scorce?");
		else if (Number >= 60)
			System.out.print(Number+".Hmm...just so so.");
		else
			System.out.print(Number+".......I hope this is not yours or you must be kicked ass by your Dad.");
	}
}

public class TwoClass{
	
	public static void main (String[] args){
		int check1, check2;	
		String Choice;
		Scanner scanner = new Scanner(System.in);
		System.out.print("What do you want to do?\nJudege a number is odd or even?Or check a score?\nPlease enter \"Number\" or \"Score\":");
		Choice = scanner.next();
		check1 = Choice.compareTo("Number");
		check2 = Choice.compareTo("Score");
		while (check1 != 0 && check2 != 0)
		{
			System.out.print("Error input.Please enter \"Number\" or \"Score\"");
			Choice = scanner.next();
			check1 = Choice.compareTo("Number");
			check2 = Choice.compareTo("Score");
		}
		if (check1 == 0){
			Number number = new Number();
			number.GetInput();
			number.Result();
		}
		else {
			Score score = new Score();
			score.GetInput();
			score.Result();
		}
		System.out.print("\nBye~");
	}
}



正在写的题目是“打印九九乘法表”,一个弱智题目。所以我又作死的开了脑洞,程序运行时应该起到这样的效果:出现提示会出现一些不好的事情->提示按下某个键可以或暂停这个动作->提示按下开始键->疯狂打印乘法表(无限循环)->按下暂停或停止键出现提示问你爽不爽(笑&作死)。

大部分的问题都已经得到了解决(因为都是弱智。。。。),但是唯独“停止循环”这个控制的方法我没有想好,刚开始时我想在循环中添加一个类似于C中sleep()的方法,每打印一次暂停一下检测是否有输入。方法倒是找到了sleep和wait,然而我并没有看懂是怎么使用的。。。。。而且怎样才能在没有输入的情况下强行停止scanner.next方法并进行下一次循环也是个很大的问题。所以这个解决方案被我放弃了。又想了另一个解决方案:使用多线程,一个线程负责进行循环,另一个线程负责监视输入并强制将循环进程暂停。这里有个问题就是我完全没有接触过多线程的只是,而且也不知道两个线程能否互相影响,但感觉这个解决方案比上面那个要靠谱一点。。。。所以还是在有空的时候抽出时间来研究一下Java中的多线程知识吧(我还是在作死。。。。。。希望老师改作业的时候不要给我个零蛋。。。。。。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值