import java.util.Scanner; import java.util.ArrayList; import java.util.Comparator; public class Main { public static void main(String []args) { Scanner in = new Scanner(System.in); int n = Integer.parseInt(in.nextLine()); ArrayList<String> a = new ArrayList<String>(); while(n!=0){ String s = in.nextLine(); if(!a.contains(s)){ a.add(s); } n--; } a.sort(new Comparator<String>() { @Override public int compare(String s1, String s2) { return Integer.parseInt(s1.substring(0, 4))-Integer.parseInt(s2.substring(0, 4)); } }); System.out.println(a.size()); for(String i:a){ System.out.println(i); } } }
时间: 2024-04-28 07:20:53 浏览: 10
这是一段使用Java语言编写的程序。程序的功能是读取用户输入的一组字符串,去除其中重复的字符串,并按照字符串前四个字符转换成的整数从小到大排序,最后输出排序后的字符串列表。
具体实现方法是先使用Scanner类读取用户输入的整数n,表示接下来要读取n个字符串。然后使用ArrayList类创建一个字符串列表a,用于存储读取到的字符串。接着通过一个循环,读取n个字符串,并判断是否已经在列表a中存在,若不存在则将其添加到列表a中。最后,使用sort方法和自定义的Comparator类对列表a中的字符串进行排序,并输出排序后的字符串列表。
需要注意的是,该程序假设用户输入的字符串都能够成功转换成整数,并且每个字符串的前四个字符都是数字。如果这些条件不满足,程序可能会出现异常。
相关问题
import java.util.Scanner; import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.ArrayList; import java.util.stream.Collectors; class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int numberOfWineshops = scanner.nextInt(); int numberOfPickedWineshops = scanner.nextInt(); int referencePrice = scanner.nextInt(); int[] WineshopPrices = new int[numberOfWineshops]; for (int i = 0; i < numberOfWineshops; i++) { WineshopPrices[i] = scanner.nextInt(); } Arrays.sort(WineshopPrices); int[][] priceDifference = new int[numberOfWineshops][2]; for (int i = 0; i < numberOfWineshops; i++) { int price = WineshopPrices[i]; priceDifference[i][0] = price; priceDifference[i][1] = Math.abs(price - referencePrice); } List<int[]> sortedPriceDifference = Arrays.stream(priceDifference) .sorted(Comparator.comparingInt(Wineshop -> Wineshop[1])) .collect(Collectors.toList()); List<Integer> pickedWineshopPrices = new ArrayList<>(); for (int i = 0; i < numberOfPickedWineshops; i++) { pickedWineshopPrices.add(sortedPriceDifference.get(i)[0]); } pickedWineshopPrices.sort(Integer::compareTo); for (int i = 0; i < pickedWineshopPrices.size(); i++) { System.out.print(pickedWineshopPrices.get(i)); if (i != pickedWineshopPrices.size() - 1) { System.out.print(" "); } } } };这段代码每行注释下
以下是每行代码的注释:
```java
import java.util.Scanner; // 引入Scanner类
import java.util.Arrays; // 引入Arrays类
import java.util.Comparator; // 引入Comparator接口
import java.util.List; // 引入List接口
import java.util.ArrayList; // 引入ArrayList类
import java.util.stream.Collectors; // 引入Collectors类
class Main { // 定义Main类
public static void main(String[] args) { // 定义程序的入口方法
Scanner scanner = new Scanner(System.in); // 创建Scanner对象并关联控制台输入
int numberOfWineshops = scanner.nextInt(); // 读取一个整数,表示酒店的数量
int numberOfPickedWineshops = scanner.nextInt(); // 读取一个整数,表示要选取的酒店的数量
int referencePrice = scanner.nextInt(); // 读取一个整数,表示参考价格
int[] WineshopPrices = new int[numberOfWineshops]; // 创建一个整型数组,存储每个酒店的价格
for (int i = 0; i < numberOfWineshops; i++) { // 循环读取每个酒店的价格
WineshopPrices[i] = scanner.nextInt(); // 读取一个整数,表示当前酒店的价格,并存储到数组中
}
Arrays.sort(WineshopPrices); // 对酒店的价格进行排序
int[][] priceDifference = new int[numberOfWineshops][2]; // 创建一个二维整型数组,存储每个酒店的价格和它与参考价格的差值
for (int i = 0; i < numberOfWineshops; i++) { // 循环计算每个酒店与参考价格的差值,并存储到数组中
int price = WineshopPrices[i]; // 获取当前酒店的价格
priceDifference[i][0] = price; // 存储当前酒店的价格
priceDifference[i][1] = Math.abs(price - referencePrice); // 存储当前酒店与参考价格的差值
}
List<int[]> sortedPriceDifference = Arrays.stream(priceDifference) // 构造一个流,将二维数组转换为流
.sorted(Comparator.comparingInt(Wineshop -> Wineshop[1])) // 对流中的元素按照第二列进行排序
.collect(Collectors.toList()); // 将排序后的流转换为List
List<Integer> pickedWineshopPrices = new ArrayList<>(); // 创建一个整型List,存储选中的酒店的价格
for (int i = 0; i < numberOfPickedWineshops; i++) { // 循环选取指定数量的酒店
pickedWineshopPrices.add(sortedPriceDifference.get(i)[0]); // 将选中的酒店的价格存储到List中
}
pickedWineshopPrices.sort(Integer::compareTo); // 对选中的酒店的价格进行排序
for (int i = 0; i < pickedWineshopPrices.size(); i++) { // 循环输出选中的酒店的价格
System.out.print(pickedWineshopPrices.get(i)); // 输出当前酒店的价格
if (i != pickedWineshopPrices.size() - 1) { // 如果当前不是最后一个酒店
System.out.print(" "); // 输出一个空格
}
}
}
}
```
Java输入学生姓名,Java成绩,按分数从高到低排序后存储在文件score.txt中。
好的,这个问题可以分为以下几个步骤:
1. 创建一个存储学生信息的类,包括学生姓名和Java成绩两个属性。
```java
public class Student {
private String name;
private int score;
public Student(String name, int score) {
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public int getScore() {
return score;
}
}
```
2. 读取用户输入的学生姓名和Java成绩,并将其封装为一个Student对象,然后将所有的Student对象存储在一个List中。
```java
List<Student> students = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("请输入学生姓名和Java成绩,以空格分隔(输入exit退出):");
String input = scanner.nextLine();
if ("exit".equals(input)) {
break;
}
String[] parts = input.split(" ");
String name = parts[0];
int score = Integer.parseInt(parts[1]);
students.add(new Student(name, score));
}
```
3. 对List中的学生信息按照Java成绩从高到低进行排序。
```java
Collections.sort(students, new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
return s2.getScore() - s1.getScore();
}
});
```
4. 将排序后的学生信息写入文件score.txt中。
```java
try (PrintWriter writer = new PrintWriter("score.txt")) {
for (Student student : students) {
writer.println(student.getName() + " " + student.getScore());
}
} catch (IOException e) {
e.printStackTrace();
}
```
完整代码如下:
```java
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
List<Student> students = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("请输入学生姓名和Java成绩,以空格分隔(输入exit退出):");
String input = scanner.nextLine();
if ("exit".equals(input)) {
break;
}
String[] parts = input.split(" ");
String name = parts[0];
int score = Integer.parseInt(parts[1]);
students.add(new Student(name, score));
}
Collections.sort(students, new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
return s2.getScore() - s1.getScore();
}
});
try (PrintWriter writer = new PrintWriter("score.txt")) {
for (Student student : students) {
writer.println(student.getName() + " " + student.getScore());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
class Student {
private String name;
private int score;
public Student(String name, int score) {
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public int getScore() {
return score;
}
}
```