要求是要键盘输进一些数字元素使其作为有序偶进行存储,我是用HashMap来做的,但是做完之后就发现前三个输进的数字是无效的,而且每输进一个有序偶就会要一个数字或者任意键用来分隔。
有什么办法可以避免掉这些操作直接输入数字然后变成一个有序偶集合吗?
如果你需要集合有序,你可以使用TreeMap数据结构来完成
import java.util.Scanner;
import java.util.HashMap;
class Main {
public int theNumberOfChar(String obj,char Co)
{
int d=0;
for(int i=0;i<obj.length();i++)
{
if(obj.charAt(i)==Co)
{
d++;
}
}
return d;
}
public int[] getNumberTwo(String Ssa, String Ssb, String number)
{
int[] result={0,0};
int a=number.lastIndexOf(Ssa);
int c=number.lastIndexOf(Ssb);
String sb="1";
String sa=number.substring(0,a);
if(a+1==c)
{
if(Ssa=="-")
{sb="-1";}
else
{sb="1";}
}
else
{sb=number.substring(a,c);}
a=Integer.parseInt(sa);
c=Integer.parseInt(sb);
result[0]=a;
result[1]=c;
return result;
}
public static void main(String[] args) {
HashMap<Integer,Integer>map=new HashMap<Integer,Integer>();
Main b=new Main();
int DataNum=1;
System.out.println("please enter the number of the data");
Scanner Nummyobj=new Scanner(System.in);
String SpNum=Nummyobj.nextLine();
DataNum=Integer.parseInt(SpNum);
int[][] ResultAll=new int[DataNum][2];
int Spb=0;
while(Spb<DataNum)
{
System.out.println("please enter a data");
Scanner myobj=new Scanner(System.in);
String number=myobj.nextLine();
if(b.theNumberOfChar(number,'+')==1&&b.theNumberOfChar(number,'i')==1&&number.endsWith("i"))
{
ResultAll[Spb]=b.getNumberTwo("+","i",number);
}
else if(b.theNumberOfChar(number,'-')>0&&b.theNumberOfChar(number,'i')==1&&number.endsWith("i")&&number.lastIndexOf("-")!=0)
{
ResultAll[Spb]=b.getNumberTwo("-","i",number);
}
else if(number.lastIndexOf("-")==0&&number.endsWith("i")&&b.theNumberOfChar(number,'i')==1&&b.theNumberOfChar(number,'-')==1)
{
ResultAll[Spb][0]=0;
if(number.lastIndexOf("-")+1==number.lastIndexOf("i"))
{ResultAll[Spb][1]=-1;}
else{
String sa=number.substring(0,number.indexOf("i"));
ResultAll[Spb][1]=Integer.parseInt(sa);}
}
else if((b.theNumberOfChar(number,'-')==0&&b.theNumberOfChar(number,'+')==0)&&number.endsWith("i")&&b.theNumberOfChar(number,'i')==1)
{
ResultAll[Spb][0]=0;
if(number.indexOf("i")==0)
{ResultAll[Spb][1]=1;}
else{
String sa=number.substring(0,number.indexOf("i"));
ResultAll[Spb][1]=Integer.parseInt(sa);
}
}
else if(b.theNumberOfChar(number,'i')==0)
{
ResultAll[Spb][1]=0;
ResultAll[Spb][0]=Integer.parseInt(number);;
}
Spb++;
}
for(Spb=0;Spb<DataNum;Spb++){
System.out.print("{"+ResultAll[Spb][0]+","+ResultAll[Spb][1]+"}\n");
}
}
}
如果我的理解没错的话,有序偶实际上表达的是复数,我试了你的HashMap方式,由于key存储实数部分,而value作为虚数部分,会造成数据覆盖。所以我换了二维数组存储有序偶,代码我贴了,有部分逻辑判断我没写,不过,影响不大。