我想知道解决这个问题的最佳设计是什么。我有一个Season对象,其中ArrayList<Episode>包含给定电视节目的一季中的每一集。现在假设我想要搜索给定电视节目的给定季节的第 25 集。以下设计是否合适(抛出异常),还是最好创建一个处于错误状态的对象,返回该对象并让调用方法找出问题所在?
public class Season {
public Episode GetEpisode(int ep_no) throws Exception {
for(Episode ep : episodes)
if(ep.GetEpisodeNumber() == ep_no) return ep;
throw(new Exception("Episode not found."));
}
private ArrayList<Episode> episodes;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试另一种方法来做一些我已经拥有的代码,我发现它不够优雅,我遇到了这个例外.我真的不明白发生了什么,我还是Java的新手.
如果有很多代码,我很抱歉,但我不认为我可以削减更多.例外是在第一行提出的Initialize().
这是确切的错误消息:
在simulationia.SimulationIA.main(SimulationIA.java:21)的simulationia.CritterInfo.Initialize(Critter.java:35)中的线程"main"java.lang.NullPointerException中的异常
第35行是第一行Initialize().SimulationIA的第21行是调用Initialize().
// Critter.java
class CritterInfo {
static private Map<Object, String> enum_desc;
public enum CRITTER_TYPE { CT_HERBIVORE, CT_CARNIVORE }
public enum CRITTER_STATE { CS_FULL, CS_HUNGRY, CS_STARVING, CS_DEAD }
/* ... */
static void Initialize() {
enum_desc.put((Object)CRITTER_TYPE.CT_HERBIVORE, "Herbivore");
enum_desc.put((Object)CRITTER_TYPE.CT_CARNIVORE, "Carnivore");
enum_desc.put((Object)CRITTER_STATE.CS_FULL, "Full");
enum_desc.put((Object)CRITTER_STATE.CS_HUNGRY, "Hungry");
enum_desc.put((Object)CRITTER_STATE.CS_STARVING, "Starving");
enum_desc.put((Object)CRITTER_STATE.CS_DEAD, "Dead");
}
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
另一个档案......
// SimulationIA.java
public class SimulationIA {
public static void main(String[] args) {
/* ... */
CritterInfo.Initialize();
/* ... …Run Code Online (Sandbox Code Playgroud) 我的数据集全部在A列中,我试图在第2行和第300行之间读取.我需要读取每个单元格,看它是否有信息.如果它没有任何信息,那么它将转到下面的下一个单元格.当它确实在单元格中找到信息时,它需要创建一个新的工作簿并将该单元格值用作工作簿名称的标题并循环到第300行.工作簿需要保存在我的dekstop文件夹test中.如果没有阻止,我会继续"结束"错误
Sub blair()
Dim strName As String
strName = ActiveCell.Value
For ptr = 2 To 300
If Cells(ptr, "a") = vbNullString Then
Cells(ptr, "a") = Cells(ptr, "a").Offset(-1, 0)
Else
Set NewBook = Workbooks.Add
With NewBook
.SaveAs Filename:="C:\Users\Marco\Desktop\test\" & strName & ".xls"
.Close
End If
Next
End Sub
Run Code Online (Sandbox Code Playgroud) 我试过Turbo C和Borland C.没有区别.该计划如下:
#include<stdio.h>
#include<conio.h>
int main()
{
int c,y;
float r,si;
printf("Enter the value of c,y,r");
scanf("%d%d%f",&c,&y,&r);
si=c*y*r/100;
printf("%f\n",si);
getch();
}
Run Code Online (Sandbox Code Playgroud)
当我编译并运行它时,无论我选择什么值,答案总是为0.快速回复将受到高度赞赏.