在python中,您可以使用一个非常简单的if语句来查看用户输入的内容(或只是一个变量)是否在列表中:
myList = ["x", "y", "z"]
myVar = "x"
if myVar in x:
print("your variable is in the list.")
Run Code Online (Sandbox Code Playgroud)
我怎么能用Java做到这一点?
我有一个包含一些字符串的数组tab1和另一个可以包含数组tab1的所有元素的数组.我怎么能这样做,以避免重复tab1的相同元素:
String[] tab1 ={"AF","HB,"ER"}
String[] tab2 ={"AF","HB,"ER","HO","NF","BB","CD","PO"}
Run Code Online (Sandbox Code Playgroud)
我想说:tab2 = {tab1,"HO",...}任何想法?
谢谢,
可能重复:
在Java中,如何测试Array是否包含某个值?
我有一个数组设置如下:
Material[] blockedlevel1 = {
Material.mymaterialone, Material.mymaterialtwo
};
Run Code Online (Sandbox Code Playgroud)
如何查看材质是否在此数组中?
我需要创建一个从305开始到397结束的for循环.
for (int i = 305; i < 397; i++) {
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
问题是,我需要跳过310,321,332,343,354,365,376和387.
我知道我可以通过在循环中放置以下内容来完成此操作:
int[] skip = { 310, 321, 332, 343, 354, 365, 376, 387 };
for (int i2 : skip) {
if (i != i2) {
//do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
但我觉得有一种更有效,更干净的方法来实现这一目标.
所以我想知道在for循环中何时创建对象(或基元),这对空间复杂性有何影响?
例如,下面是一个代码示例:
public boolean checkUnique(String p){
int term = -1;
int len = p.length();
for (int i =0; i<len; i++) {
char c = p.charAt(i);
StringBuilder sb = new StringBuilder(p.substring(0, i));
sb.append(p.substring(i+1, len));
String str = sb.toString();
if (str.indexOf(c) != term) {
return false;
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
所以我试图分析这个算法的空间复杂性.它看起来像是O(n).这是我的推理:迭代次数等于输入大小,并且在每次迭代中我们创建一个StringBuilder对象,因此我们创建与输入大小成比例的StringBuilder对象.同样的推理可以应用于我们在每次迭代时创建String对象和char的事实.这个推理是否正确?
我问的原因是因为我遇到了一种算法,在每次迭代后进行以下赋值:
int val = str.charAt(i);
Run Code Online (Sandbox Code Playgroud)
然而,该算法具有O(1)空间复杂度.所以我的理解一定不正确呢?在这种情况下,checkUnique算法的空间复杂度也为O(1).
我对Java类中的方法有一个类似的逻辑(不是真正的代码,为了示例目的,这是简化的).
private Boolean method(Boolean booleanValue, SomeObject object) {
return booleanValue ? Arrays.asList(object.getStringsArray()).contains("string") : false;
}
Run Code Online (Sandbox Code Playgroud)
指派自己检查PR的合作者给出了以下评论:
这是低效的.它正在创建一个新的数据结构,只是迭代它并检查是否有某个字符串.
该getStringsArray()方法返回一个String[],所以使用for循环会比Arrays.asList()?
哪种方式更有效地实现这一目标?
我只是试图查看输入的值是否与数组中已有的值匹配,以及它是否返回"有效".我意识到这很简单,但我不能让它工作:
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
String[] accountNums = { "5658845", "8080152", "1005231", "4520125", "4562555",
"6545231", "7895122", "5552012", "3852085", "8777541",
"5050552", "7576651", "8451277", "7881200", "1302850",
"1250255", "4581002" };
String newAccount;
String test = "Invalid";
newAccount = keyboard.next();
for (int i = 0; i < accountNums.length; i++)
{
if(newAccount == accountNums[i])
{
test = "Valid";
}
}
System.out.println(test);
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助(和耐心)
我有来自两家公司asoft和bsoft的代码.我也无法改变.这是我的情况的简化版本,我非常确定有足够的信息来查找导致问题的原因.
bsoft提供IGang,代表一个可以与其他帮派作战的团伙.
package bsoft;
public interface IGang {
/** @return negative, 0, or positive, respectively
* if this gang is weaker than, equal to, or stronger
* than the other
*/
public int compareTo(IGang g);
public int getStrength();
public String getName();
public void attack(IGang g);
public void weaken(int amount);
}
Run Code Online (Sandbox Code Playgroud)
asoft提供GangWar,允许IGangs战斗:
package asoft;
import java.util.*;
import bsoft.*;
/** An `IGang` ordered by identity (name) */
public interface ComparableGang extends IGang, Comparable<IGang> {}
package asoft; …Run Code Online (Sandbox Code Playgroud) 我试图找出是否可以打印出一个int ONLY,如果它是一个数字数组中的值.例如:
import java.util.Random;
public class arrays {
Random random = new Random();
public void method () {
int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int j = random.nextInt(20);
if() {
System.out.println("It is in the array.");
} else {
System.out.println("It is not in the array.");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不确定的是你将在"if"之后放在括号中,以便系统打印"它在数组中"只有j在1和9之间.
谢谢!
如何检查元素是否在java中的数组中?
int[] a = new int[5];
a[0] = 5;
a[1] = 2;
a[2] = 4;
a[3] = 12;
a[4] = 6;
int k = 2;
if (k in a) { // whats's wrong here?
System.out.println("Yes");
}
else {
System.out.println("No");
}
Run Code Online (Sandbox Code Playgroud)
谢谢!