我认为在Mac上,您可以使用()来标记shell输入的结束。请参见: https://www.jetbrains.com/help/idea/debug-tool-window-console.htmlCMD+D
⌘+D
键盘快捷键
⌘D 组合键允许您发送 EOF(文件末尾),即发出信号,表明无法从数据源读取更多数据。
关于算法 - Coursera课程中的第1部分中提供的普林斯顿图书馆的问题,您可以玩一下它们的代码,特别是在课堂上 。他们使用该代码的实现可能不是最复杂的概念:import edu.princeton.cs.algs4.StdIn;
while (!StdIn.isEmpty()) {
int p = StdIn.readInt();
int q = StdIn.readInt();
if (!uf.connected(p, q)) {
uf.union(p, q);
StdOut.println(p + " " + q);
}
}
以下是我所做的:
- 在 IntelliJ 中创建了新的 Java 项目
- 创建新的 java 包(将在 src 下)
- 为他们的示例创建新类,该类将具有一个main方法
- 在项目中创建了库文件夹
- 从 http://algs4.cs.princeton.edu/code/algs4.jar 下载了他们的代码,并将该jar放在libs文件夹中
- 将该 lib 添加到项目 - 在 IntelliJ 的项目选项卡上,右键单击项目>打开模块设置>单击依赖项选项卡>单击“+”> JAR 或目录...>从上面的libs文件夹中选择jar
- 例如,我更改了上面 while 循环中的代码,以便在 shell 上实现更好的用户交互(在这里要有创意 - 例如,不要使用 isEmpty() 使用检查 p 和 q 都为 0 来标记输入的结束。
现在,若要运行它,只需右键单击具有主静态方法的类的代码,然后选择“运行”(CTRL+ SHIFT+R)。
这将避免可怕的CMD + D以及一些问题,如果您想在while循环之后编写更多代码 - 例如,我添加了代码来检查2个对象是否连接:
StdOut.println("Check if 2 objects are connected: ");
try {
Scanner reader = new Scanner(System.in); // Reading from System.in
System.out.println("Enter first object: ");
int n = reader.nextInt(); // Scans the next token of the input as an int.
System.out.println("Enter second object: ");
int m = reader.nextInt(); // Scans the next token of the input as an int.
StdOut.println(uf.connected(n, m) ? "Connected" : "Not Connected");
} catch(Exception e) {
// whatever...
}
以下是我对这个问题的快速和肮脏的方法:
package com.algorithms;
import edu.princeton.cs.algs4.StdIn;
import edu.princeton.cs.algs4.StdOut;
import edu.princeton.cs.algs4.UF;
import java.util.Scanner;
public class Week1 {
private static UF uf;
public static void main(String[] args)
{
StdOut.println("Enter the total number of objects: ");
int N = StdIn.readInt();
StdOut.println("Enter the unions between any of those objects...");
Week1.uf = new UF(N);
while (true) {
int p = StdIn.readInt();
int q = StdIn.readInt();
if (!uf.connected(p, q)) {
Week1.uf.union(p, q);
StdOut.println(p + " " + q);
}
if(p==0 && q==0) break;
}
checkIfConnected();
}
private static void checkIfConnected()
{
StdOut.println("Check if 2 objects are connected: ");
try {
Scanner reader = new Scanner(System.in); // Reading from System.in
System.out.println("Enter first object: ");
int n = reader.nextInt(); // Scans the next token of the input as an int.
System.out.println("Enter second object: ");
int m = reader.nextInt(); // Scans the next token of the input as an int.
StdOut.println(Week1.uf.connected(n, m) ? "Connected" : "Not Connected");
} catch(Exception e) {}
}
}