【发布时间】:2019-04-02 21:36:00
【问题描述】:
我正在尝试打印唯一项目、重复次数最多的项目和重复次数最少的项目,即数组中出现一次。在重复最少的部分,我没有得到任何输出,因为标志设置为 1 而不是预期的 0。
示例输入:
10
watch
laptop
iphone
watch
car
headset
laptop
watch
shoe
mobile
样本输出:
The unique items are
watch
laptop
iphone
car
headset
shoe
mobile
The maximum purchased item(s) are
watch
The minimum purchased item(s) are
iphone
car
headset
shoe
mobile
import java.util.Arrays;
import java.text.ParseException;
import java.util.*;
import java.util.Scanner;
import java.util.ArrayList;
public class ItemDetails {
public static void main(String[] args) {
Scanner sn = new Scanner(System.in);
int flag=0, flag1=0, count = 0, count1 = 0, count2 = 0;
String maxname = null;
int k;
// String[] max = new String[k];
Integer x = sn.nextInt();
sn.nextLine();
String[] names=new String[x];
for (int i = 0; i<x; i++)
{
names[i] = sn.nextLine();
}
System.out.println("The unique items are");
{
for (int i = 0; i < x; i++) {
for (int j = i+1 ; j < x; j++)
{
if (names[i].equals(names[j]))
{
// got the unique element
flag = 0;
break;
}
else
{
flag = 1;
// break;
}
// break;
}
if (flag==1)
{
++count;
System.out.println(names[i]);
}
}
System.out.println(count);
}
System.out.println("The maximum purchased item(s) are");
{
for (int i = 0; i < x; i++) {
for (int j = i+1 ; j < x; j++)
{
if (names[i].equals(names[j]))
{
count1++;
maxname = names[i];
}
else
{
count1 = 0;
}
}
}
System.out.println(maxname);
}
System.out.println("The minimum purchased item(s) are");
{
for (int i = 0; i < x; i++) {
for (int j = i+1 ; j < x; j++)
{
if (names[i].equals(names[j]))
{
flag1 = 1;
break;
}
}
if (flag1==0)
{
count2++;
System.out.println(names[i]);
}
}
//System.out.println(maxname);
}
}
}
【问题讨论】:
-
需要在内循环前清除flag。
-
安德烈亚斯 - 没找到你。能指点一下位置吗?
-
您是说“最低购买量”部分是空的,对吧?该代码嵌套了
for循环。在外循环内部(i循环),before 内循环(j循环),您需要清除标志(flag1)。 -
试过了,但结果与“独特物品”部分相同。
-
如果你的输入是
2 foo foo,那么你循环并看到第一个foo,然后是另一个foo,所以你跳过它。你看到第二个foo,因为它没有跟随另一个foo,你打印它。 糟糕!