我java.lang.StackOverflowError试图在另一个类中调用方法时得到一个.
我认为问题是由于每个类在彼此之间实例化,但我不确定它为什么会导致此错误或如何解决它.
来自Main()的方法调用:
nexaConnect.returnAllChronologicalByRoom("bathroomSensorMappings");
Run Code Online (Sandbox Code Playgroud)
逻辑():
public class Logic {
private SensorMaps mapAccess = new SensorMaps();
void returnAllChronologicalByRoom(String room) {
System.out.print(mapAccess.returnMap(room).get(0));
}
}
Run Code Online (Sandbox Code Playgroud)
SensorMaps:
public class SensorMaps {
private Logic sensorConnect = new Logic();
HashMap<Integer, String> returnMap(String mapChoice) {
return MapRegistry.find(mapChoice);
}
}
Run Code Online (Sandbox Code Playgroud)
还有第三个MapRegistry类,但我不认为这会导致问题,但我会将其包含在内以保证完整性:
MapRegistry:
class MapRegistry {
static Map<String,HashMap<Integer,String>> allMaps = new HashMap<>();
static void register(String name, HashMap<Integer,String> myMap) {
allMaps.put(name, myMap);
}
static HashMap<Integer,String> find(String name) {
return allMaps.get(name);
}
}
Run Code Online (Sandbox Code Playgroud)
错误输出中的两个关键行:
at com.company.SensorMaps.<init>(SensorMaps.java:11)
at com.company.Logic.<init>(Logic.java:19)
Run Code Online (Sandbox Code Playgroud)
参考线: …
我有代码从数组中删除一个条目,然后将所有元素向下移动一个索引,这样空的空格将留在数组的末尾.问题是数组中的最后一个条目被复制到已删除的索引中.
这是输入所有记录时的数组:
[entryOne, entryTwo, entryThree, entryFour, entryFive, entrySix, entrySeven, entryEight, entryNine, entryTen]
然后我运行我的代码删除索引5并打印数组,这是显示的:
[entryOne, entryTwo, entryThree, entryFour, entryFive, entrySeven, entryEight, entryNine, entryTen, entryTen]
如何才能将最终索引清空?
添加记录代码:
static void addStudent() {
if (nameArrayCount < 10) {
System.out.println("Enter the student's name in the following format - surname, forename: ");
studentName = input.next();
studentNamesArray[nameArrayCount] = studentName;
nameArrayCount = nameArrayCount + 1;
}
else if (nameArrayCount == 10) {
System.out.println("******Array is full, please delete a student before adding another.*****");
}
if (markArrayCount < 10){
System.out.println("Enter …Run Code Online (Sandbox Code Playgroud) 我遇到一种情况,我正在寻找我的 Java 程序作为 BASH 脚本运行,而 BASH 脚本又将运行 C++ 程序。
我希望将 C++ 程序的输出(打印到终端的纯文本字符串)作为 Java 程序的输入。
我的第一次尝试是使用以下代码从终端读取输入,但我不确定如何将其从用户输入转换为自动获取 C++ 输入。
Console c;
c = System.console();
if (c == null) {
System.out.println("No console.");
System.exit(1);
}
String data = c.readLine();
Run Code Online (Sandbox Code Playgroud)
然后我尝试使用InputStreamReader重定向 C++ 程序的输出:
Java代码:
BufferedReader input = null;
try {
input = new BufferedReader(new InputStreamReader(System.in));
String htmlLine = null;
while ((htmlLine = input.readLine()) != null) {
System.out.println(htmlLine);
}
}
Run Code Online (Sandbox Code Playgroud)
重定向输出的命令:
java -jar program.jar arg1 arg2 arg3 < ./runActivities.sh
Run Code Online (Sandbox Code Playgroud)
然而,其结果是它只是将内容打印runActivities.sh到终端。
我有一个接受a String和String<List>as方法参数的Java方法.如何区分String和不属于List?
方法:
void returnValues(String sensor, List<String> attributes)
Run Code Online (Sandbox Code Playgroud)
呼叫:
nexaConnect.returnValues(Arrays.asList("19455746", "blobJson", "deviceMfg", "eventCode", "sensorClass", "sensorUUID", "timeStamp", "uID"));
Run Code Online (Sandbox Code Playgroud)
我能看到的唯一可能的工作是删除第一个String并在List中包含值,然后获取列表的第一个值并以这种方式使用它.有没有办法将它们分开,以便它不是列表的一部分?