我已经编写了一段代码,其中我制作了一个接口和一个实现该接口的类。现在,当我运行代码时,我给了我自己2个选项,即1输入字符串,2退出。现在,当我运行代码时,如果我选择1,它会让我放入字符串,但在此之后,当我按0时,它会给我错误:Exception in thread“main”java.lang。有人能帮我找出我在这里遗漏了什么吗?下面是代码:
import java.util.ArrayList;
import java.util.List;
public interface ITimsSaveable {
List<String> write(); // this will save the data;
void read (List<String> savedValues); //this will print the data
}
import java.util.ArrayList;
import java.util.List;
public class TimsPlayers implements ITimsSaveable {
private String name;
private int hitPoints;
private int strength;
private String weapon;
public TimsPlayers(String name, int hitPoints, int strength) {
this.name = name;
this.hitPoints = hitPoints;
this.strength = strength;
this.weapon = "Sword";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHitPoints() {
return hitPoints;
}
public void setHitPoints(int hitPoints) {
this.hitPoints = hitPoints;
}
public int getStrength() {
return strength;
}
public void setStrength(int strength) {
this.strength = strength;
}
public String getWeapon() {
return weapon;
}
public void setWeapon(String weapon) {
this.weapon = weapon;
}
//now go to generate > to string method
@Override
public String toString() {
return "TimsPlayers{" +
"name='" + name + '\'' +
", hitPoints=" + hitPoints +
", strength=" + strength +
", weapon='" + weapon + '\'' +
'}';
}
//now let us create stubs, i.e. the empty methods from interface
@Override
public List<String> write() {
List<String > values = new ArrayList<String >();
values.add(0,this.name);
values.add(1,""+this.hitPoints); //"" is quick trick to convert int to String
values.add(2,""+this.strength);
values.add(3,this.weapon);
return values;
}
@Override
public void read(List<String> savedValues) {
if ((savedValues != null) && (savedValues.size() > 0)) {
this.name = savedValues.get(0);
this.hitPoints = Integer.parseInt(savedValues.get(1));
this.strength = Integer.parseInt(savedValues.get(2));
this.weapon = savedValues.get(3);
}
// now let us go back to our main class
}
}
public class Main {
public static void main(String[] args) {
TimsPlayers tim = new TimsPlayers("Tim",10,15);
System.out.println(tim.toString());
saveObject(tim);
tim.setHitPoints(8);
System.out.println(tim);
tim.setWeapon("Stormbringer");
saveObject(tim);
loadObject(tim);
System.out.println(tim);
}
public static ArrayList<String> readValues() {
ArrayList<String> values = new ArrayList<String>();
Scanner scanner = new Scanner(System.in);
boolean quit = false;
int index = 0;
System.out.println("Choose\n" +
"1 to enter a string\n" +
"0 to quit");
while (!quit) {
System.out.print("Choose an option: ");
int choice = scanner.nextInt();
scanner.nextLine();
switch (choice) {
case 0:
quit = true;
break;
case 1:
System.out.print("Enter a string: ");
String stringInput = scanner.nextLine();
values.add(index, stringInput);
index++;
break;
}
}
return values;
}
public static void saveObject(ITimsSaveable objectToSave) { //ITims is the interface that is being implemented by the player
//class,so we can use ITims as object type
for (int i = 0; i < objectToSave.write().size(); i++) {
System.out.println("Saving " + objectToSave.write().get(i) + " to storage device");
}
}
public static void loadObject (ITimsSaveable objectToLoad) {
ArrayList<String > values = readValues();
objectToLoad.read(values);
}
}
StackTrace:
线程“main”java.lang.indexoutofboundsexception:在java.base/jdk.internal.util.preconditions.outofbounds(preconditions.java:64),在java.base/jdk.internal.util.preconditions.outofboundscheckindex(preconditions.java:70),在java.base/jdk.internal.util.preconditions.checkindex(preconditions.java:248),在.timsplayers.read(timsplayers.java:77)在org.mm.sandbox.so.main.loadObject(main.java:62)在org.mm.sandbox.so.main.main(main.java:17)
这种方法
@Override
public void read(List<String> savedValues) {
if ((savedValues != null) && (savedValues.size() > 0)) {
this.name = savedValues.get(0);
this.hitPoints = Integer.parseInt(savedValues.get(1));
this.strength = Integer.parseInt(savedValues.get(2));
this.weapon = savedValues.get(3);
}
// now let us go back to our main class
}
希望savedvalues
完全填充,即包含4个元素--name、HP、strongth和武器。您执行savedvalues.size()>0
,但这并不意味着您不只是输入了一个必需的,然后就停止了,它仍然试图访问一个不存在的元素--th.hitpoints=integer.parseint(Savedvalues.get(1));
我很难理解这个代码有什么问题。Dr.Java一切都很好,但是在另一个名为edhesive的代码运行平台上(我就是在这个平台上被分配这个项目的),它给我一个错误。我已经检查了所有我认为出错的地方,但仍然不知道哪里出了问题。 在edhesive上运行后,我得到了这个错误 有人能帮帮我吗?
我在尝试运行程序时出现以下错误。这实际上是Hackerrank“第六天让我们回顾”挑战的提交。 线程“main”java中出现异常。util。java的NoTouchElementException。util。扫描仪。throwFor(Scanner.java:862)访问java。util。扫描仪。下一步(Scanner.java:1371)是解决方案。main(Solution.java:10
问题内容: 我正在尝试使用其他EditText上传照片。我从一个在线示例中获取了示例代码,并对其进行了少量编辑,但我收到此错误: 我的Android代码: 请告诉我这里是什么问题,我该如何解决呢?预先感谢我知道,常见的答案是我需要从UI线程调用Toast.makeText(…):很抱歉,因为我很新任何人都介意对此进行更详细的解释 问题答案: 可能由于此行而出现错误 里面。必须显示在UIThread
我不明白为什么一个实现可运行接口的线程子类不强迫我覆盖run方法。基本上,当我创建实现Runnable的简单类时,它强迫我覆盖run方法。但是当我把普通类变成线程的子类时,它不再强迫我覆盖这个类了。这背后的逻辑是什么?
问题内容: 我是mysql和jdbc的新手,但出现此标题错误。我整天都在搜索,找不到适合我的解决方案。 我尝试过的操作:卸载/重新安装mysql,将mysql-connector- java-5.1.25-bin.jar和ojdbc7.jar复制粘贴到与我要运行的.class文件相同的位置,然后将该程序重建在其他目录中,可能还有其他几件事。 我正在使用notepad ++进行编码,并使用Windo
我正在尝试仅使用本地依赖项编译和运行java grpc客户端,但出现以下错误: 这是我的gradle文件: 程序将编译,但不运行。我已经从protos生成了我的java文件,并验证了我是否使用了正确的protoc和protoc gen grpc java与我正在使用的jar库相对应。非常感谢您的帮助。