我在这里做错了,因为我没有错误,但我写的这个程序不会运行。请根据以下说明帮助您运行。
程序描述:使用JavaFX:编写一个程序,从文本文件中读取单词,并按升序字母顺序显示所有单词(允许重复)。单词必须以字母开头。文本文件作为命令行参数传递。我要使用的文本文件名为: example20_1.txt ,文件和提交按钮将有一个输入框,文件结果将显示在下面的输入窗口中盒子和按钮。这就是我所拥有的:
import java.io.*;
import java.util.*;
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.text.Text;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.control.TextArea;
import javafx.event.EventType;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
public class DisplayingWords extends Application {
TextField fileName = new TextField();
Button submitButton = new Button("Submit");
TextArea outputArea = new TextArea();
public void main() {
submitButton.setOnAction(e -> {
if(fileName.getText().length() > 0) {
submitButtonClick();
}
});
}
public void main(String[] args) throws IOException {
// Check command-line parameter usage
if (args.length > 0) {
fileName.setText(args[0]);
System.out.println("Source file: " + fileName.getText());
}
main();
}
@Override
public void start(Stage primaryStage) {
try {
BorderPane root = new BorderPane();
Scene scene = new Scene(root,400,400);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.show();
// Set the stage title
primaryStage.setTitle("Exercise20_01");
// Place the scene in the stage
primaryStage.setScene(scene);
// Display the stage
primaryStage.show();
// Hold a button in an HBox
HBox inputBox = new HBox();
inputBox.setSpacing(10);
inputBox.setAlignment(Pos.CENTER);
inputBox.getChildren().addAll(new Text("Filename:"));
inputBox.getChildren().addAll(fileName);
inputBox.getChildren().addAll(submitButton);
root.setTop(inputBox);
//This creates a text box to display the results
//from reading the file in a pane
outputArea.setStyle("-fx-text-fill: black");
outputArea.setStyle("-fx-background-color: grey");
root.setCenter(outputArea);
} catch(Exception e) {
e.printStackTrace();
}
}
public void submitButtonClick() {
if(fileName.getText().length() > 0) {
// File sourceFile = new File(fileName.getText());
// if (!sourceFile.exists()) {
// System.out.println("Source file " + fileName.getText()
// + " does not exist");
// }
}
fileName.setText("Test 1");
}
class SortFile
{
//sorting function
void sortArray(String array[]) {
//Loop for no.of passes
for(int i=0;i<array.length-1;i++)
//Repeat no.of comparisons
for(int j=0;j<array.length-i-1;j++)
//Comparing adjacent elements
if(array[j].compareTo(array[j+1])>0)
{
//Swap using temp variable
String temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
public void main(String args[])
{
//Creating File object
File freader;
//Scanner for reading
Scanner filescanner;
//Array list for dynamic elements adding
ArrayList <String> array = new ArrayList<String>();
//If file name is no.of passed as argument is 1
if(args.length==1)
{
try
{
//Create file object
freader = new File(args[0]);
//Reading from file
filescanner = new Scanner(freader);
//Reading until end of file
while(filescanner.hasNext())
{
//Reading each word and to Array List
array.add(filescanner.next());
}
}
//If file IOException is thrown
catch(IOException ie)
{
System.out.println(ie);
}String[] newArray = new String[array.size()];
//Convert Array list to ArraynewArray=array.toArray(newArray);
System.out.println("List of strings from file Before Sorting : \n");
//Print before sorting words
for(int i=0;i<newArray.length;i++)
System.out.print(newArray[i]+" ");
//Call sorting method
sortArray(newArray);
System.out.println("\nList of strings from file After Sorting : \n");
//Print after sorting words
for(int i=0;i<newArray.length;i++)
System.out.print(newArray[i]+" ");
System.out.print("\n");
}
else
//If file name is not passed as argument then show usage syntax
System.out.println("Usage syntax: SoftFile <example20_1.txt>");}
}
}
答案 0 :(得分:0)
让我们假设你从文本文件中将这些单词带入wordList
List<String> wordList = new ArrayList<>();
wordList.add("Ann");
wordList.add("Sam");
wordList.add("Peter");
wordList.add("John");
wordList.add("Watson");
方法I:
您的sortArray
方法应更新为以下内容:
// you can call this method by sortArray(wordList.toArray(new String[wordList.size()]));
public String[] sortArray(String[] array) {
int index;
//Loop for no.of passes
for (int j = 0; j < array.length - 1; j++) {
index = j;
for (int i = j + 1; i < array.length; i++) {
//We keep track of the index to the smallest string
if (array[i].trim().compareTo(array[index].trim()) < 0) {
Index = i;
}
}
//We only swap with the smallest string
if (index != j) {
String temp = array[j];
array[j] = array[index];
array[index] = temp;
}
}
return array;//it returns the sorted array
}
您可以使用迭代循环打印出结果来检查其工作原理
for (String arrayElement : your_array) {
System.out.println(arrayElement);
}
方法II:
这就是使用java 8 lambda表达式
List<String> sortedList=wordList
.stream().sorted().collect(Collectors.toList());
sortedList.forEach(i->System.out.println(i));
您将获得以下结果:
Ann
John
Peter
Sam
Watson