我有一个 Course 类,其中包含各种类型的字段,以及各自的 getter 和 setter,例如:
float percentage
char courseLevel
String courseName
boolean takingNow
Run Code Online (Sandbox Code Playgroud)
然后我有一个 ArrayList 当然对象和一个方法:
public <T> ArrayList<Course> getCourses(int parameterId, T value) {
ArrayList<Course> res = new ArrayList<Course>();
switch(parameterId) {
case COURSE_NAME:
for(Course c: courseList) {
if(c.getCourseName().equals(value) {
res.add(c)
}
}
break;
....
//rest of the cases
....
}
return res
}
Run Code Online (Sandbox Code Playgroud)
然后,该方法遍历课程的 ArrayList 并根据参数 ID 比较某个字段,如果课程字段等于传递的值,则将其添加到要返回的数组列表中。
有没有比以这种方式使用泛型更好的方法来做到这一点,我认为这是一种非常糟糕的编码实践。
编辑:搞清楚,错放了一段代码
我有一个程序,可以从文件中计算斜率.文件所在的格式如下:
Y2'空间'Y1'空间'X2'空间'X1'空间'
我正在使用扫描仪从文件中读取字符串,然后将它们转换为double或整数.我这样做的原因是因为它似乎不会从文本文件只读取字符串中的双精度或整数.这是我的一些代码:
modelSlopes.clear();
modelValues.clear();
int returnVal = openFileChooser.showOpenDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = openFileChooser.getSelectedFile();
try {
Scanner fileScanner = new Scanner(new FileReader(file));
int count = 1;
boolean suc = true;
while (fileScanner.hasNext()) {
suc = true;
double tmp1 = 0;
double tmp2 = 0;
double tmp3 = 0;
double tmp4 = 0;
try {
if(count == 1) {
tmp1 = Double.valueOf(fileScanner.next());
}
if(count == 2) {
tmp2 = Double.valueOf(fileScanner.next());
}
if(count == 3) {
tmp3 …Run Code Online (Sandbox Code Playgroud) 我有一个简单的程序,它以一定的速度和角度绘制从原点发射的粒子的轨迹.我创建了一个JPanel的子类来处理这个的绘制.我每次重新绘制子类时都需要当前时间和初始时间之间的差值(以毫秒为单位),将其转换为秒,然后找到粒子应该在该时间点的x和y坐标,最后获取那些x和y坐标并在屏幕上绘制它们.我的问题是我的子类似乎在间隔时间重绘,看起来很长,因为只显示了几个点.
我的绘图方法:
private void doDrawing(Graphics g) {
Dimension size = getSize();
Insets insets = getInsets();
int w = size.width - insets.left - insets.right;
int h = size.height - insets.top - insets.bottom;
Graphics2D g2d = (Graphics2D) g;
g.drawString("Acceleration: -9.8m/s i", 0, 20);
StringBuilder b = new StringBuilder();
b.append("Current Velocity: ");
b.append(String.valueOf(sim.getVector(tickSpeed
* ((System.currentTimeMillis() - initTime) / 1000)).getMagnitude()));
b.append(" m/s at ");
b.append(String.valueOf(sim.getVector(tickSpeed
* ((System.currentTimeMillis() - initTime) / 1000)).getDirection().getDirectionDeg()));
b.append(" degrees");
g.drawString(b.toString(), 0, 30);
drawPreviousPoints(g2d);
drawCurrentPointAndAppend(g2d, w, h);
repaint();
}
private void …Run Code Online (Sandbox Code Playgroud)