我是新手编码员,在大学里,我们被赋予一项仅使用数组的任务 (我问老师,说没有数组列表或任何东西,都想用粗略的方法来做)
关于创建一个可以在其中插入,搜索或删除值的数组。我通过搜索和应用解决方案来了解最多的内容。
但是他们想要一个输出,以便如果我删除然后搜索该值,它将显示该值已消失,但是问题在于,由于删除了该值,Java在其中放置了null,所以当for循环循环时通过所有null都会创建可怕的NullPointerException错误。我目前正在搜索具有这些限制但无济于事的解决方案,而且我的Java词汇和术语目前很短:P
select publisher.uuid, Count(Book.uuid)
from Publisher
left join Book
on Publisher.uuid = Book.publisher_id
group by Publisher.uuid
答案 0 :(得分:1)
其他答案建议检查是否为空。但这无法解决您的问题。正如您的其余代码期望的那样,您的学生名单中不会有任何空白。
删除其中一些名称后,尝试转移名称:
import scala.collection.mutable
object StackReplace{
implicit class StackListBuffer[T](listBuffer:mutable.ListBuffer[T]){
def push(t:T):Unit = listBuffer.prepend(t)
}
implicit class StackList[T](list:List[T]){
def push(t:T):List[T] = t +: list
}
}
import StackReplace._
val a = mutable.ListBuffer(1,2,3)
a.prepend(0)
a // ListBuffer(0, 1, 2, 3)
var b = List(1,2,3)
b = 0 +: b // List(0, 1, 2, 3)
a.push(-1)
a // ListBuffer(-1, 0, 1, 2, 3)
b.push(-1) // List(-1, 0, 1, 2, 3)
此解决方案假定您的应用程序允许重复的条目。
我还发现,即使有匹配项,您的case 3: //Deleting
out.print("type surname you want to delete: ");
String toDelete = kb.next();
int deleted = 0;
for (int ctrl = 0; ctrl < regCount; ctrl++) {
if (regName[ctrl].equalsIgnoreCase(toDelete)) {
out.println("Record deleted.");
deleted++;
}
if(deleted > 0) {
int newCtrl = ctrl + deleted;
regName[ctrl] = (newCtrl < regCount) ? regName[newCtrl] : null;
}
}
regCount -= deleted;
out.print("\n");
func = 0;
break;
操作也会多次打印search
。尝试像这样更改它:
<Name> has not found
更新:仅删除首次出现的
case 2: //Searching
out.print("Enter keyword: ");
String search = kb.next();
boolean found = false;
int searchCount = 0;
for (int ctrl = 0; ctrl < regCount; ctrl++) {
if (regName[ctrl].equalsIgnoreCase(search)) {
found = true;
out.println(search + " has a match : #" + ctrl);
break;
}
}
if(!found) {
out.println(search + " has not found.");
}
out.print("\n");
func = 0;
break;
答案 1 :(得分:0)
只需执行空检查:if (regName[ctrl].equalsIgnoreCase(search)) {
可以成为if (regname[ctrl] != null && regName[ctrl].equalsIgnoreCase(search)) {
,依此类推。
这等效于:
if (regname[ctrl] != null)
{
if (regName[ctrl].equalsIgnoreCase(search))
{
...
由于Java评估表达式的方式,只有在第一部分没问题的情况下才完成第二部分-在您的情况下,只有在该索引的值不为null的情况下,才尝试使用数组。
如果要给老师留下深刻的印象,请中断插入搜索,然后将其删除以其他方法。
答案 2 :(得分:0)
搜索时,请在调用null
之前先检查equalsIgnoreCase
。
if (regName[ctrl]!=null && regName[ctrl].equalsIgnoreCase(search)) {
found = true;
out.println(search + " has " + " a match.");
}
else
{
out.println(search + " has " + " not found.");
}
答案 3 :(得分:0)
考虑到Null会在您使用任何数据结构进行编码时进行检查,以避免未检查的异常。因此,您可以先添加首先执行的检查,如果为true,则仅继续执行。
if (regname[ctrl] != null && regName[ctrl].equalsIgnoreCase(search)) {
希望这可以帮助您解决问题!