此方法的任务是从数组中移除要移除的值。剩下的元素应该只向数组的开头移动。(数组的大小不会改变。)由于数组现在少了一个元素,最后一个元素的位置应该用0填充。如果数组中有多个toRemove的匹配项,则只应移除第一个匹配项。方法没有返回值,如果数组没有元素,它应该只是没有效果。
解决方案:
public static void remove(int[] arr, int toRemove) {
boolean done = false;
int position = 0;
for(int pos = 0; pos < arr.length; pos++) {
if(!done && arr[pos] == toRemove) {
done = true;
position = pos;
}
if(done) {
for(int i = position + 1; i < arr.length; i++) {
arr[i - 1] = arr[i];
}
arr[arr.length -1] = 0;
}
}
}
我不明白这个算法是如何工作的。boolean的使用让我感到困惑,我觉得我不完全理解原始数据类型是做什么的,我知道它包含两个东西,要么是真的,要么是假的,默认情况下是假的。但这到底意味着什么呢?我不懂布尔语。我明白为什么要为找到toRemove值的索引设置int占位符。我明白,我们希望使用for-loop逐个迭代索引和它们各自的值,并精确定位找到remove的位置。我知道我们需要一个检查点条件来查看在某个任意索引上toRemove值是否存在,因此:
if(arr[pos] = toRemove) // then bingo we've found him
我明白,当我们想要访问一个特定的指数值时,我们会写variablenameOfArr,然后写[],把它放入框中。我很难把这些都放在一起。
谢谢。
布尔值确实不是必需的,因为当如果(!done&&arr[pos]==toRemove)
为true时,它总是true
。
此外,当您移除一个元素时,进行外部循环是没有意义的,因为1)数组的状态很好:内部循环已经将移除元素之后的元素移到了它们的左边,2)您不能执行两次移除。
顺便说一下,position
变量也不是必需的。您可以直接使用pos
变量,因为它是只读的。以下代码:
for(int pos = 0; pos < arr.length; pos++) {
if(!done && arr[pos] == toRemove) {
done = true;
position = pos;
}
if(done) {
for(int i = position + 1; i < arr.length; i++) {
arr[i - 1] = arr[i];
}
arr[arr.length -1] = 0;
}
}
可以用这个替换而不使用布尔值,并且在数组元素被移位后,还可以存在该方法:
for(int pos = 0; pos < arr.length; pos++) {
if(arr[pos] == toRemove) {
for(int i = pos + 1; i < arr.length; i++) {
arr[i - 1] = arr[i];
}
arr[arr.length -1] = 0;
return;
}
}
问题内容: 关于启动应用程序作为入口点,主要方法是Java应用程序中最重要的方法。使用此方法之前会发生什么尚不清楚。请有人可以通过以下方法签名来纠正我的看法,从而帮助我理解/阐明使用该方法之前发生的情况: JVM创建至少一个将访问您的主方法的对象。这个(假定的)对象尝试根据该API来访问Java应用程序,该API显然会将您绑定到已知的方法签名 您是否不能限制JVM上的(假定的)单独对象访问包含主要
Java Integer类具有静态方法highestOneBit方法,该方法将返回一个单个一位的值,该值位于指定值中最高一位的位置,如果指定值本身等于零,则返回零。 例如,int 17的输入将返回16;因为17可以用二进制表示为10001,所以它将返回等于16的最左边的位。 在整数类中,它在Java文档中具有以下实现。 我只想知道以这种方式实现它背后的逻辑以及使用 shift 操作背后的逻辑。谁能
全部显示 Remove 方法应用于 NewFile 对象的情形。 从“新建项”任务窗格中删除一项。返回 Boolean 类型。 expression.Remove(FileName, Section, DisplayName, Action) expression 必需。该表达式返回一个 NewFile 对象。 FileNameString 类型,必需。文件引用的名称。 SectionVarian
环境:jdk18 前言 今天在看Java string类的equals源码,源码主要逻辑比较好理解:先判断是否是同一对象,是就直接返回true,否则判断类型是否是string类型,且每一个元素内容是否相同(先判断length,再判断内容) 问题描述 在使用断点debug时发现 问题1: 是循环运行的,且有的时候value与aString.value的数组长度就不一样(哪怕字符相等,如"a".equ
本文向大家介绍Java WeakHashMap remove()方法与示例,包括了Java WeakHashMap remove()方法与示例的使用技巧和注意事项,需要的朋友参考一下 WeakHashMap类方法 remove()方法在java.util包中可用。 remove()方法用于删除或删除给定键元素(key_ele)存在时的映射。 remove()方法是一种非静态方法,只能通过类对象访问