首先,我刚开始学习Java,我可以说它比C或python更具挑战性。我不太喜欢编程,所以我很难理解一些代码是如何工作的。特别是这个
public class Pseudo
{
final int a = 2;
final int c = 3;
int address;
String list[][] = new String [100][6];
public void AddRecord(String ID, String Name, String Course, String Address, String Email, String Contact)
{
address = (a * Integer.parseInt(ID) + c) % list.length;
if((Integer.parseInt(ID)<100000||Integer.parseInt(ID)>999999)||ID.length()==0 || Name.length()==0 || Course.length()==0 || Address.length()==0)
{
showMessageDialog(null,"The ID number should be in six digit and the particular field should not be empty","",ERROR_MESSAGE);
}
else{
if(list[address][0]!=null){
showMessageDialog(null,"Collison is occur, the same address is get. Recalculating...............","",WARNING_MESSAGE);
while(list[address][0]!=null)
{
address = (a * address + c) % list.length;
}
}
list[address][0] = ID;
list[address][1] = Name;
list[address][2] = Course;
list[address][3] = Address;
list[address][4] = Email;
list[address][5] = Contact;
showMessageDialog(null,"Student Information " + ID + " will be saved in address: " + address,"",INFORMATION_MESSAGE);
}
}
时会出现混乱
address = (a * Integer.parseInt(ID) + c) % list.length;
if((Integer.parseInt(ID)<100000||Integer.parseInt(ID)>999999)||ID.length()==0 || Name.length()==0 || Course.length()==0 || Address.length()==0)
这是什么意思。根据我对此代码的理解,在IF语句中,您可以拥有多于1个条件。我不确定,因为这是我第一次看到这样的代码。
第二个就是这个
if(list[address][0]!=null){
showMessageDialog(null,"Collison is occur, the same address is get. Recalculating...............","",WARNING_MESSAGE);
while(list[address][0]!=null)
{
address = (a * address + c) % list.length;
}
}
list[address][0] = ID;
list[address][1] = Name;
list[address][2] = Course;
list[address][3] = Address;
list[address][4] = Email;
list[address][5] = Contact;
showMessageDialog(null,"Student Information " + ID + " will be saved in address: " + address,"",INFORMATION_MESSAGE);
如果发生碰撞,应该再次使用psedorandom数字生成器更改存储它的地址,但我无法掌握的是 list [address] [0]!= null。我只是对这一行感到困惑。我知道如果发生碰撞,它的工作就是更改地址,但我不知道这部分执行方式的确切机制。
答案 0 :(得分:0)
根据我对此代码的理解,在IF语句中你可以有超过1个条件。
嗯,是的,不是。您可以根据许多较小的条件构造复杂的条件,但最终必须将整个条件解析为单个布尔值的真/假结果。
在这种情况下考虑条件:
(Integer.parseInt(ID)<100000||Integer.parseInt(ID)>999999)||ID.length()==0 || Name.length()==0 || Course.length()==0 || Address.length()==0
让我们将其分解为其组成部分:
(
Integer.parseInt(ID)<100000 ||
Integer.parseInt(ID)>999999
) ||
ID.length()==0 ||
Name.length()==0 ||
Course.length()==0 ||
Address.length()==0
它真的只是把一堆比较链接成一个大的真/假陈述。你基本上可以读到这样的东西:
如果(某事)或(别的)或(另一件事)那么......
每个something
本身可以包含小something
等等。您可以根据需要构建复杂的逻辑条件,将子条件与括号分组,只要整个事情解析为单个真/假结果。
我能抓住的是list [address] [0]!= null
这只是检查特定值是否为null
。该值是嵌套(锯齿状)数组的一部分。所以你有一个名为list
的变量。该变量是一个数组。该数组中的每个元素本身也也是数组。所以你得到一种二维数组(但是一个锯齿状的数组,其中任何给定的子数组都不必与其他子数组的长度相同)。
该特定代码片段在list
索引处查看address
数组,并查看 子数组的0
索引,并检查该值是否为null
。
答案 1 :(得分:0)
首先,如果格式正确,理解任何代码都会容易得多。所有好的IDE都具有这样的功能,例如对于Eclipse,快捷键是Ctrl + Shift + F,对于IntelliJ IDEA Ctrl + Alt + L。
最重要的部分,可能会解决你的第一个困惑:||是Java中的逻辑OR,表示ID必须是介于100000和999999之间的数字,并且属性不能为空。或者从字面上看,如果ID小于100000或大于999999或任何值为空,则会出现错误消息,并且不会执行任何操作。
对于第二部分:null
表示未设置变量,因此为防止覆盖条目,您可以检查它是否已设置,即不等于null
。因此,代码会更改address
变量,直到找到尚未设置数据的地址,然后使用它来存储给定的数据。
此代码中存在几个潜在问题,其中包括:
但是因为它看起来像一些CS家庭作业,所以无关紧要。
答案 2 :(得分:0)
非常感谢大卫先生。我理解第一部分,如果你有一个条件,你可以把它堆叠在一起,从我能理解的它只适用于||(OR)语句,因为使用它将保证真或假结束。
while(list[address][0]!=null)
但我对问题的第二部分仍然有点困惑。因为该行是检查数组是否为null意味着没有正确的值。这是我对情况的理解。如果用户输入相同的ID号,则代码的特定部分假设解决任何冲突,所以不应该是检查导致碰撞的值。但是,只要检测到空值,相似的程序就会被实现,这条线似乎正在进行。