如何解决运行时错误 [英] How can I solve my runtime error
问题描述
我遇到了数组的实现,其中createSkills()方法应该创建一个大小为n的String数组,提示用户输入每个技能并读入输入的值。该方法应返回一个String数组,其中包含用户输入的所有技能。并且printSkills()方法应该打印出我的技能是:,并且数组参数的每个元素都在它自己的行上。我认为我身边有一些小的阵列实现错误。
我尝试过:
< br $>
//厨师班
import java.util.Scanner;
公共类厨师扩展人员实施技能
{
私人扫描仪a;
int i;
protected Chef(String f,String l){
super(f,l);
}
@Override
public String toString()
{
String str =我是厨师;
返回(str);
}
@Override
public void printInfo(){
System.out.println(super.toString()++ Chef。 this.toString());
}
@Override
public String [] createSkills(int n){
String [] arr = new String [n];
扫描仪键盘=新扫描仪(System.in);
系统.out.println(输入你的技能\ n);
String s = keyboard.nextLine();
return( arr);
}
@Override
public void printSkills(String [] s){
//字符串a;
for(i = 0; i< s [i] .length();> {
s [i] = a.nextLine();
}
System.out.println(我的技能是:/ n+ s [i]);
}
}
//人员类
公共抽象类Person
{
private String first;
private String last;
protected Person(String f,String l )
{
this.first = f;
this.last = l;
}
public abstract void printInfo ();
public String toString()
{
return(this.first ++
this.last);
}
}
//接口
公共界面技巧
{
public abstract String [] createSkills (int n);
public abstract void printSkills(String [] s);
}
< br $>
//主班级
公共类技能1
{
public static void main(String [] args)
{
Chef c1 = new Chef(Jamie,Oliver);
String [] a = c1.createSkills(3);
System.out.println();
c1.printInfo();
System.out.println();
c1.printSkills(a);
System.out.println();
厨师c2 =新厨师(Gordon,Ramsey);
String [] b = c2.createSkills(2);
System.out.println();
c2.printInfo();
System.out.println();
c2.printSkills(b);
}
}
//运行时错误
---- jGRASP执行:java技能1
输入你的技能
烹饪
Jamie Oliver我是厨师
线程异常mainjava.lang.NullPointerException
在Chef.printSkills(Chef.java:42)
在Skills1.main(Skills1.java:10)
---- jGRASP wedge2:进程退出代码为1.
---- jGRASP:操作完成。
//预期产量
输入技能:烹饪
输入技能:切丁
输入技能:切碎蔬菜
Jamie Olive r我是厨师
我的技能是:
烹饪
切丁
砍蔬菜
输入技能:烹饪甜点
输入技能:向人们大喊
Gordon Ramsey我是一名厨师
我的技能是:
烹饪甜点
大吼大叫
I am stuck at implementation of array where createSkills() method should create a String array of size n, prompt the user to enter each of the skills and read in the values entered. The method should return a String array that contains all the skills entered by the user. And The printSkills() method should print out "My skills are: " with each element of the array parameter on its own line. I think there is some minor array implementation mistake from my side.
What I have tried:
//Chef class
import java.util.Scanner;
public class Chef extends Person implements Skills
{
private Scanner a;
int i;
protected Chef(String f, String l) {
super(f, l);
}
@Override
public String toString()
{
String str="I am a Chef";
return(str);
}
@Override
public void printInfo() {
System.out.println(super.toString()+" "+Chef.this.toString());
}
@Override
public String[] createSkills(int n) {
String[] arr = new String[n];
Scanner keyboard = new Scanner(System.in);
System.out.println("Enter your skills\n");
String s=keyboard.nextLine();
return (arr);
}
@Override
public void printSkills(String[] s) {
//string a;
for( i=0; i<s[i].length();> {
s[i]= a.nextLine();
}
System.out.println("My skills are: /n"+s[i]);
}
}
//Person Class
public abstract class Person
{
private String first;
private String last;
protected Person(String f, String l)
{
this.first = f;
this.last = l;
}
public abstract void printInfo();
public String toString()
{
return (this.first + " " +
this.last);
}
}
//Interface
public interface Skills
{
public abstract String[] createSkills(int n);
public abstract void printSkills(String[] s);
}
//Main class
public class Skills1
{
public static void main (String[] args)
{
Chef c1 = new Chef("Jamie", "Oliver");
String[] a = c1.createSkills(3);
System.out.println();
c1.printInfo();
System.out.println();
c1.printSkills(a);
System.out.println();
Chef c2 = new Chef("Gordon", "Ramsey");
String[] b = c2.createSkills(2);
System.out.println();
c2.printInfo();
System.out.println();
c2.printSkills(b);
}
}
//Runtime Error
----jGRASP exec: java Skills1
Enter your skills
cooking
Jamie Oliver I am a Chef
Exception in thread "main" java.lang.NullPointerException
at Chef.printSkills(Chef.java:42)
at Skills1.main(Skills1.java:10)
----jGRASP wedge2: exit code for process is 1.
----jGRASP: operation complete.
//Expected Output
Enter skill: Cooking
Enter skill: Dicing
Enter skill: Chopping veggies
Jamie Oliver I am a chef
My skills are:
Cooking
Dicing
Chopping veggies
Enter skill: Cooking dessert
Enter skill: Yelling at people
Gordon Ramsey I am a chef
My skills are:
Cooking dessert
Yelling at people
推荐答案
尝试更换
Try to replace
for( i=0; i<s[i].length();> {
with
with
for( i=0; i<s.length();i++> {
这篇关于如何解决运行时错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!