我有一个例外
java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeHi(TimSort.java:868)
at java.util.TimSort.mergeAt(TimSort.java:485)
at java.util.TimSort.mergeCollapse(TimSort.java:408)
at java.util.TimSort.sort(TimSort.java:214)
at java.util.TimSort.sort(TimSort.java:173)
at java.util.Arrays.sort(Arrays.java:659)
at Main.main(Main.java:64)
Run Code Online (Sandbox Code Playgroud)
使用此代码时:
Arrays.sort(arr, new Comparator<Integer[]>(){ //arr is 2D array
public int compare(Integer[] o1, Integer[] o2){
return o1[2]==o2[2]?0:o1[2]>o2[2]?1:-1;
}
});
Run Code Online (Sandbox Code Playgroud)
我认为这与不满足比较的传递性有关,但当我做了一点这样的改变时:
Arrays.sort(arr, new Comparator<Integer[]>(){ //arr is 2D array
public int compare(Integer[] o1, Integer[] o2){
return o1[2].compareTo(o2[2]); // here is the change
}
});
Run Code Online (Sandbox Code Playgroud)
不再生成异常.我无法理解这个问题的解释,因为我确信除了compareTo()方法之外,还可以使用关系运算符(>,<,=)来比较Integer实例
Integer x = 1;
Integer y = 2;
System.out.println(x<y);
Run Code Online (Sandbox Code Playgroud)
按预期打印true
任何机构都可以澄清吗?
在Java中,Object类是所有类的基类.C++中是否还有这样的类?
我对这个问题的动机是:
try
{
if (something) throw int(a);
if (something) throw char(b);
if (something) throw float(c);
}
catch(...)
{
handle
}
Run Code Online (Sandbox Code Playgroud)
除此之外,还有其他方法可以使用单个catch块来处理所有这些异常吗?
我想用Java Map填充以下文本的占位符.
String text = "Media file %s of size %s has been uploaded";
Run Code Online (Sandbox Code Playgroud)
这就是我在地图中输入值的方式.
Map<String, String> properties = new HashMap<>();
properties.put(MediaFile.fileName, "Sample 001");
properties.put(MediaFile.fileSize, "2Mb");
Run Code Online (Sandbox Code Playgroud)
我希望输出文本是这样的.
Media file Sample 001 of size 2Mb has been uploaded
Run Code Online (Sandbox Code Playgroud)
但我把它作为输出.
Media file 2Mb of size 2Mb has been uploaded
Run Code Online (Sandbox Code Playgroud)
我创建了一个类来保存变量fileName和fileSize.
public class MediaFile {
public static String fileName;
public static String fileSize;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我像下面一样使用它,它工作正常.但我想分开fileName和fileSize.但我不确定我是否正确实现了MediaFile类.谁能告诉我我的代码有什么问题?
properties.put("fileName", "Sample 001");
properties.put("fileSize", "2Mb");
Run Code Online (Sandbox Code Playgroud) 假设我有一个服务器XYZ,它侦听 TCP 客户端的端口 50000 和 HTTP 客户端的端口 80。另一方面,我有一个客户端,它使用 WebSocket 建立到端口 50000 的套接字连接,并将使用 HTTP 端口 80 进行握手(当然)。
现在,当客户端启动时,它首先会XYZ通过 HTTP 端口 80 向服务器发送请求,服务器将在端口 80 上接收其握手请求,并发送欢迎响应。因此,在这种情况下,双方都在使用端口 80(当然)。
现在,握手完成后,标准文档表示用于握手目的的 HTTP 请求/响应的同一个 TCP 连接将转换为 TCP 套接字连接。好吧,对。
但是,如果 HTTP 请求/响应的整个握手过程和 TCP 连接第一次使用端口 80,并且相同的 TCP 连接转换为 TCP 套接字连接,并且整个过程是通过端口 80 完成的,那么如何双方的 TCP 套接字是否将相同的 TCP 连接转换为端口 50000?客户端是否会在内部初始化另一个 TCP 连接以更改为端口 50000?
那么,谁能告诉我们如何执行端口转换并在WebSocket从端口 80 到双方不同端口的情况下工作?如何在不同端口上建立完整的单套接字连接?同一个 TCP 连接如何更改/翻转其端口?
我对static关键字及其用法很熟悉。我知道static可以在子类中重新声明方法,但是方法的定义被隐藏,并且与父类相同。我提到的是我已经阅读的文章的一些链接:
https://www.geeksforgeeks.org/can-we-overload-or-override-static-methods-in-java/
当派生类定义的静态方法与基类中的静态方法具有相同的签名时,派生类中的方法会将方法隐藏在基类中。但是仍然将基类的方法称为display()基类的方法。
但是我很好奇为什么为什么以及何时需要重新声明派生类中的static
方法,base class如果它的定义不能在派生类中被覆盖/更改,而是显示基类的定义呢?
/* Java program to show that if static method is redefined by
a derived class, then it is not overriding. */
// Superclass
class Base {
// Static method in base class which will be hidden in subclass
public static void display() {
System.out.println("Static or class method from Base");
}
// Non-static method which will be overridden in derived class
public void print() …Run Code Online (Sandbox Code Playgroud)
我需要通过 TCP 套接字从我的 Java 类发送 HTTP/2 请求。我已经适配了一段适用于普通 HTTP/1.1 的代码。但是,使用 HTTP/2 时,它不会输出任何响应或错误代码。
你能看出其中有什么问题吗?我试图访问的服务器位于https://localhost:8443
Socket s = new Socket(InetAddress.getByName("localhost"), 8443);
PrintWriter pw = new PrintWriter(s.getOutputStream());
pw.print("GET / HTTP/2.0\r\n");
pw.print("Host: localhost:8443\r\n\r\n");
pw.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String t;
while((t = br.readLine()) != null) System.out.println(t);
br.close();
Run Code Online (Sandbox Code Playgroud)
谢谢!
我需要配置我的网站 SSL。我有以下文件:file.csr 和 file.jks
我需要以下文件来启用我的网站的 SSL:file.crt、file.key 和 keystore
我通过互联网进行了搜索,但没有找到任何帮助。谁能告诉我如何使用我已有的文件获取这些文件?
我尝试了多种转换选项,但没有任何效果。
<Connector port="8442" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="/conf/keys/server/keystore"
keystorePass="CHANGEME"/>
Run Code Online (Sandbox Code Playgroud) Kepp使用Character.isDigit()时出现错误
我在其他地方进行了查找并对其进行了很好的测试,但在这里我仍然遇到此错误。
Scanner scnr = new Scanner(System.in);
boolean hasDigit;
String passCode;
hasDigit = false;
passCode = scnr.next();
hasDigit = Character.isDigit(passCode);
if (hasDigit) {
System.out.println("Has a digit.");
}
else {
System.out.println("Has no digit.");
}
Run Code Online (Sandbox Code Playgroud)
根据扫描仪的输入,期望为真或假。不断向我抛出此错误:
CheckingPasscodes.java:12: error: no suitable method found for isDigit(String)
hasDigit = Character.isDigit(passCode);
^
method Character.isDigit(char) is not applicable
(argument mismatch; String cannot be converted to char)
method Character.isDigit(int) is not applicable
(argument mismatch; String cannot be converted to int)
Run Code Online (Sandbox Code Playgroud) 我正在研究 Java 中的多线程,并且遇到了一个奇怪的问题。
当我尝试使用调度程序启动一个新线程时Thread.start(),我了解到我们需要进行Thread.isAlive()检查,因为启动和恢复需要不同的进程。但是,此代码显示检查和start():
if ( current.isAlive( ) )
current.setPriority( 4 );
else {
// Spawn must be controlled by Scheduler
// Scheduler must start a new thread
current.start( );
current.setPriority( 4 );
}
Run Code Online (Sandbox Code Playgroud)
其中 current 被保证是一个有效的线程。我最终遇到了这个错误
Exception in thread "Thread-0" java.lang.IllegalThreadStateException
at java.base/java.lang.Thread.start(Thread.java:790)
at Scheduler.run(Scheduler.java:152)
Run Code Online (Sandbox Code Playgroud)
start()这就是为什么我认为在不应该的情况下调用是一个问题。start()然而,从所有迹象来看,除非线程不活动,否则它不应该被调用。
因此,我的问题有两个:
上面的代码是否有问题,如果线程已经启动,则允许第二个块运行,并且
还有哪些其他问题可能会引发该异常?我看到在 中抛出了相同的异常setDaemon(),但是我没有调用它,所以这应该是无关紧要的。
我正在读《 c ++的完整指南》这本书。我认为第252页有错字。因此,我有以下三个文件。
在文件account.h中,
// account.h
// Defining the class Account. class definition (methods prototypes) is usually put in the header file
// ---------------------------------------------------
#ifndef _ACCOUNT_ // if _ACCOUNT_ is not defined
#define _ACCOUNT_
#include <iostream>
#include <string>
using namespace std;
class Account
{
private:
string name;
unsigned long nr;
double balance;
public: //Public interface:
bool init( const string&, unsigned long, double);
void display();
};
#endif
// _ACCOUNT_
Run Code Online (Sandbox Code Playgroud)
在account.cpp文件中,
// account.cpp
// Defines methods init() and display().
// ---------------------------------------------------
#include …Run Code Online (Sandbox Code Playgroud)