JAVA继承,讨论字符串的细节

Description

设计一个动物声音模拟器模仿动物的叫声。类图如下:

JAVA继承,讨论字符串的细节_第1张图片

Animal类中的方法playSound模拟动物的叫声,但输出时要求先给出名字。

程序中任何地方不允许用DogCat的对象直接调用cry()方法或getAnimalName()方法。

Input
若干组数据,每组数据由1个整型数和1个字符串组成。整型数表示动物类型:0——猫、1——狗;字符串表示动物的名字。
Output
先输出动物的名字。如果是猫,则输出“Miao,Miao…”;如果是狗,则输出“Wang,Wang….
Sample Input
1 Eunice

0 Elma

Sample Output
Eunice:Wang,Wang...

Elma:Miao,Miao...

Hint

应该独立完成作业,有意识地、努力地培养自己的编程能力。

这是我们的一道作业题,本身并没有难度。但是有一个细节问题。我考虑了一些时间。即如果我把动物的名字直接定义为String类,然后用Scanner类中的nextLint()方法读取动物的名字即输入为:1 Eunice    随后会发现答案出来之后并不像自己想的那样顺风顺水,(所以得出一个结论:千万不要看不起水题)。会程序发现输出第二行不是顶格,经过一些小测试后发现,其实动物的名字并不是"Eunice",而是" Eunice";很奇怪疑问,为什么会有一个空格。由于自己刚学Java,对此了解不是很深,所以很抱歉无法解释这个bug产生的原因。为了解决这个问题,我首先就像这还不简单,直接创建一个字符变量将这个空格接收掉就是了,但事情却不是这样的大哭。苦思后,还是建立一个字符串数组吧。接着再利用一个for循环将其首字符去掉。最后再利用字符数组转字符串得到动物的名字。按照这个思路做下去发现,骂人竟然编译未通过。直接name2[i]=name[i+1]处就报错了。无奈之下只好将这个循环去除。即放弃将第一个字符压缩掉。未曾想,有心栽花花不开,无心插柳柳成荫。那个动物名字中可恶的空格终于被去除了,心中大快大笑

第一次的错误代码:

import java.util.*;
class Animal{
	  String name;
	 int op;
	Animal(int opp,String b){
		op=opp;
		name=b;
	}
	public void cry(){
		
	}
	public String getanimalname(){
		return name;
	}
}
class Simulator{
	public void playsound(Animal a){
		if(a.op==0) System.out.println("Miao,Miao...");
		if(a.op==1) System.out.println("Wang,Wang...");
	}
}
class Dog extends Animal{

	Dog(int opp, String b) {
		super(opp, b);
	} 
   
}
class Cat extends Animal{
	Cat(int opp, String b) {
		super(opp, b);
	}
	
}
public class Main{
	static int op1;
	static String name1;
	public static void main(String args[]){
		Scanner cin=new Scanner(System.in);
		while(cin.hasNextInt())
		{
			op1=cin.nextInt();
			name1=cin.nextLine();
			if(op1==0){
				Animal cat=new Animal(op1,name1);
				Cat cat1=new Cat(op1,name1);
				String nn;
				nn=cat1.getanimalname();
				System.out.printf("%s:",nn);
				Simulator pp=new Simulator();
			    pp.playsound(cat);
			}
			if(op1==1){
				Animal dog=new Animal(op1,name1);
				Dog dog1=new Dog(op1,name1);
				String nn;
				nn=dog1.getanimalname();
				System.out.printf("%s:",nn);
				Simulator pp=new Simulator();
			    pp.playsound(dog);
			}
		}
	}
	
	
}
测试结果为:

JAVA继承,讨论字符串的细节_第2张图片

改过之后:基于字符数组转字符串的思想;

import java.util.*;
class Animal{
	  String name;
	 int op;
	Animal(int opp,String b){
		op=opp;
		name=b;
	}
	public void cry(){
		
	}
	public String getanimalname(){
		return name;
	}
}
class Simulator{
	public void playsound(Animal a){
		if(a.op==0) System.out.println("Miao,Miao...");
		if(a.op==1) System.out.println("Wang,Wang...");
	}
}
class Dog extends Animal{

	Dog(int opp, String b) {
		super(opp, b);
	} 
   
}
class Cat extends Animal{

	Cat(int opp, String b) {
		super(opp, b);
	}
	
}
public class Main{
	static int op1;
	static char name2[];
	public static void main(String args[]){
		Scanner cin=new Scanner(System.in);
		while(cin.hasNextInt())
		{
			name2=new char[1000];
			op1=cin.nextInt();
		   
		    name2=cin.next().toCharArray();
		   /* for(int i=0;i<name2.length;i++)
		    {
		    	//name2[i]=name2[i+1];  为将空格压缩掉的for循环,未成功;
		    }*/
		    String name1=new String(name2);  //将字符数组转化为字符串;
			if(op1==0){
				Animal cat=new Animal(op1,name1);
				Cat cat1=new Cat(op1,name1);
				String nn;
				nn=cat1.getanimalname();
				System.out.printf("%s:",nn);
				Simulator pp=new Simulator();
			        pp.playsound(cat);
			}
			if(op1==1){
				Animal dog=new Animal(op1,name1);
				Dog dog1=new Dog(op1,name1);
				String nn;
				nn=dog1.getanimalname();
				System.out.printf("%s:",nn);
				Simulator pp=new Simulator();
			        pp.playsound(dog);
			}
		}
	}
}
修改后的测试结果:

JAVA继承,讨论字符串的细节_第3张图片

水题终于了了。。。。




你可能感兴趣的:(JAVA继承,讨论字符串的细节)