【问题标题】:Finding the largest, second largest, second smallest, and smallest int from an array in java从java中的数组中查找最大,第二大,第二小和最小的int
【发布时间】: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
  • 好的,我已经用列表写了一个快速答案。希望这会有所帮助。

标签: java arrays loops max minimum


【解决方案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;
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多