从java中的数组中查找最大,第二大,第二小和最小的int
Posted
技术标签:
【中文标题】从java中的数组中查找最大,第二大,第二小和最小的int【英文标题】:Finding the largest, second largest, second smallest, and smallest int from an array in java 【发布时间】:2018-04-07 05:48:18 【问题描述】:我正在使用一种方法来打印最大、第二大、最小和第二小的整数。这是我迄今为止的基地:
case 1:
System.out.print("\nEnter the Limit: ");
limit = input.nextInt();
System.out.println(pairs(limit));
break;
这是目前被调用的方法:
// Case 1 Method : Largest and Smallest Pairs
public static String pairs(int limit)
System.out.println("*** Largest and Smallest Pairs");
return "";
实际输出格式如下 (最大,次大),(最小,次小) 我以前从未使用过数组,我不确定如何使用循环来查找值。我该如何开始?
这是我的程序的完整代码。您可以忽略第二种和第三种情况,但是,我仍然需要第三种情况的帮助。我需要按顺序显示所有素数。这是要求: Twin Prime Numbers:这应该让用户指定一个限制n(我使用limit代替)(如果n是1000,那么考虑1 到 1000),并列出直到 n 的孪生素数对。样本运行为 (3,5),(5,7),(11,13),(17,19)
完整代码:
import java.util.Scanner;
public class PatternChecker
// The scanner is accessible for every method included
static Scanner input = new Scanner(System.in);
public static void main(String[] args)
// Variables
int limit;
System.out.println("List of Pattern Checker problems:\n1) Largest and Smallest Pairs\n2) Patterns of Triangles\n3) Twin Prime Pairs\n4) Quit");
System.out.print("Choice: ");
int choice = input.nextInt();
// The switch statement for the variable "choice" and each case
switch (choice)
default:
System.out.println("\n*** INVALID OPTION");
break;
case 1:
System.out.print("\nEnter the Limit: ");
limit = input.nextInt();
System.out.println(pairs(limit));
break;
case 2:
System.out.println("\nEnter the Limit: ");
limit = input.nextInt();
System.out.println(triangleOne(limit));
System.out.println(triangleTwo(limit));
System.out.println(triangleThree(limit));
System.out.println(triangleFour(limit));
break;
case 3:
System.out.println("\nEnter the Limit: ");
limit = input.nextInt();
System.out.println(primePairs(limit));
break;
case 4:
System.out.println("\n*** End");
break;
// Case 1 Method : Largest and Smallest Pairs
public static String pairs(int limit)
System.out.println("*** Largest and Smallest Pairs");
return "";
// Case 2 Method: Patterns of Triangles (Triangle One)
public static String triangleOne(int limit)
System.out.println("*** Patterns of Triangles");
for (int x = 1; x <= limit; x++)
for (int y = 1; y <= x; y++)
System.out.print(y + " ");
System.out.println();
return "";
// Case 2 Method: Patterns of Triangles (Triangle Two)
public static String triangleTwo(int limit)
for (int x = limit; x > 0; x--)
for (int y = 1; y <= x; y++)
System.out.print(y + " ");
System.out.println();
return "";
// Case 2 Method: Patterns of Triangles (Triangle Three)
public static String triangleThree(int limit)
for (int row = 1; row <= limit; row++)
for (int space = (limit - row); space > 0; space--)
System.out.print(" ");
for (int num = row; num > 0; num--)
System.out.print(num + " ");
System.out.println();
return "";
// Case 2 Method: Patterns of Triangles (Triangle Four)
public static String triangleFour(int limit)
for (int row = limit; row >= 0; row--)
for (int space = (limit - row); space > 0; space--)
System.out.print(" ");
for (int num = 1; num <= row; num++)
System.out.print(num + " ");
System.out.println();
return "";
// Case 3 Method: Twin Prime Pairs
public static String primePairs(int limit)
System.out.println("*** Twin Prime Numbers up to " + limit);
return "";
【问题讨论】:
我在这里看不到任何数组......所以你的问题是什么?什么是limit
,为什么会有一个没有开关的case
?请提供一个最小的可测试代码片段来解释您的问题!
应该解释更多@JoshuaK
你需要从数组中获取它还是列表也可以?
我不知道该怎么做,我只是假设一个数组@user641887
好的,我已经用列表写了一个快速答案。希望这会有所帮助。
【参考方案1】:
好的,根据评论,我用 arraylists 写了一个快速答案。希望这可以帮助。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class MaxMin
private List<Integer> alist = new ArrayList<Integer>();
public static void main(String args[])
MaxMin maxmin = new MaxMin();
maxmin.init();
public void init()
System.out.println("Welcome!!!");
readFromUser();
printUserList();
doSort();
display();
public void readFromUser()
Scanner scanner = null;
try
scanner = new Scanner(System.in);
System.out.print("Enter the total number of elements :");
Integer totalElements = scanner.nextInt();
for (int i=0;i<totalElements;i++)
System.out.print("Enter the " + i +" number");
alist.add(scanner.nextInt());
catch(Exception e)
e.printStackTrace();
finally
scanner.close();
public void printUserList()
System.out.println("user entered list is :");
System.out.println(alist);
public void doSort()
Collections.sort(alist);
public void display()
System.out.println("(" +alist.get(alist.size()-1)+ "," +alist.get(alist.size()-2)+ ")" + "(" +alist.get(0)+"," +alist.get(1) +")");
【讨论】:
【参考方案2】:我希望这不是作业问题,但想法是对数组使用循环,并跟踪最大和最小数字。
从将最小数字变量分配给 Integer.MAX_VALUE 开始,因此您检查的第一个数字将分配给最小数字,因为除 2^31 - 1 之外的所有整数值都小于 Integer.MAX_VALUE,并且您这样做也是最大的,但使用 Integer.MIN_VALUE。
然后,每当您再次分配最大的数字时,您将 secondBiggest 变量分配给“最大”变量。
考虑到这一点,您只需要遍历数组的值并检查它们是大于最大的(在其中重新分配它)还是小于最小的(与最大相同)。
int[] array = new int[]5, 3, 4, 1, 2;
for(int i = 0; i < array.length; i++)
System.out.println(array[i]);
^ 遍历数组的例子
【讨论】:
另一个答案更好,但如果你要使用它,它需要考虑数组是否少于两个元素。【参考方案3】:我为你创建了一个例子。
首先它会生成一个质数列表,直到限制(在本例中为硬编码 100)。接下来它要求所有素数对并打印它们。这些对存储在一个 ArrayList 中,因此很容易获得第一对和最后一对。
这并不难理解,所以我不知道该解释什么。查看代码,如果您有任何问题,请随时提出。
import java.util.ArrayList;
public class PatternChecker
public ArrayList<Integer> primes = new ArrayList<>();
public static void main(String[] args)
PatternChecker pc = new PatternChecker();
pc.detectPrimes(100);
ArrayList<int[]> numbers = pc.getPairs();
System.out.println("Print all pairs: ");
numbers.stream().forEach((intA)->System.out.println(intA[0]+" / "+intA[1]));
System.out.println("Print just the greatest and the smallest pair: ");
System.out.println("("+numbers.get(0)[0]+","+numbers.get(0)[1]+")");
System.out.println("("+numbers.get(numbers.size()-1)[0]+","+numbers.get(numbers.size()-1)[1]+")");
public void detectPrimes(int limit)
for(int i=2;i<limit;i++)
if(isPrime(i))
primes.add(i);
protected boolean isPrime(int no)
for(int i=0;i<primes.size();i++)
if(no % primes.get(i) == 0) return false;
return true;
public ArrayList<int[]> getPairs()
ArrayList<int[]> result = new ArrayList<>();
int last = primes.get(0);
for(int i=1;i<primes.size();i++)
if(primes.get(i)==last+2)
int[] resH = new int[2];
resH[0] = last;
resH[1] = primes.get(i);
result.add(resH);
last = primes.get(i);
return result;
【讨论】:
以上是关于从java中的数组中查找最大,第二大,第二小和最小的int的主要内容,如果未能解决你的问题,请参考以下文章
用Java找出一个整数数组中最大的值,并返回最大值的数组下标,尤其是有两个或是三个最大值时