import java.util.Scanner;
public class TestRef {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
TV tv=new TV();
/*if(sc.hasNext())
{
tv.control(sc.next());
}
if(sc.hasNextInt())
{
tv.control(sc.nextInt());
}*/
while(sc.hasNext()){
/*
* 简单说明一下,当输入1234的时候,问一下这个是数字还是字符串。
* 这个答案是不知道的,因为1234既可以是数字也可以是字符串
* 代码一开始就sc.next()这个时候返回的是字符串,那么他会把数字也当成字符串的。
* 看一下要求,我们会发现这里输入的内容如果不是数字,就是字符串了。
* 所以这个地方换成if else就更合理了,否则的话是有问题的
* */
if(sc.hasNextInt())//一定要先判断数字否则会把数字当成字符串的
{
tv.control(sc.nextInt());
}else{
tv.control(sc.next());
}
if(tv.isClose){
break;//电视关闭,结束循环
}
}
}
}
class TV{
String ChannelArray[]={"中央1台","中央2台","中央3台","中央4台","浙江卫视","浙江综合","浙江经济","杭州文艺","中央体育","山东卫视"};
int CurrentChannel[]={0,1,2,3,4,5,6,7,8,9};
int recent;
boolean isClose;//添加一个关闭电视的属性
void control(int recent)
{
this.recent=recent;
System.out.println(ChannelArray[recent]);
}
void control(String Current)
{
switch(Current)
{
case "U":
recent++;
if(recent>9)
recent=0;
System.out.println(ChannelArray[recent]);
break;
case "D":
recent--;
if(recent<0)
recent=9;
System.out.println(ChannelArray[recent]);
break;
case "O":
System.out.println("电视关闭");
isClose = true;//关闭电视
break;
}
}
}
代码我修改了一下,你可以看一下具体的思路,这里我想说一下,楼上灯丝浪徒dslt_ 的答案的思想是不错的,他发现问题后想到的是加一个中间层来屏蔽两头的不一致的问题,尽可能的不修改你的代码。当然我也想的是尽可能不修改你的代码,但是我还是调整了你的TV这个类的代码,不能说谁的更好,看个人的喜好。
还有就是我的代码调试过,改掉了你的一个小小的bug,我把问题的原因写到注释里面了,你可以自己看一下。
public static void main(final String[] args) {
final Scanner sc = new Scanner(System.in);
final TV tv = new TV();
System.out.println("输入样例:");
while (sc.hasNext()) {
recycle(tv, sc);
}
sc.close();
}
private static void recycle(final TV tv, final Scanner scanner) {
if (scanner.hasNextInt()) {
tv.control(scanner.nextInt());
}
if (scanner.hasNext("U|D|O")) {
tv.control(scanner.next());
// 判断如果是"O", 则退出程序? Add your code here then Do it yourself. You can do it!
}
}
Scanner sc = new Scanner(System.in);
sc.nextLine();//这个就是输出
可用String str = sc.nextLine();接收