Java 而hasNext()赢了';t端
我有一个作业程序,我无法猜出最后的花絮。 它需要能够接受一大段“DNA”代码。给出的样本在100000+范围内。起初我写了一个小样本,一行,非常好。 TA告诉我,我应该能够在while(input.hasNext())时添加Java 而hasNext()赢了';t端,java,Java,我有一个作业程序,我无法猜出最后的花絮。 它需要能够接受一大段“DNA”代码。给出的样本在100000+范围内。起初我写了一个小样本,一行,非常好。 TA告诉我,我应该能够在while(input.hasNext())时添加,它将完成我复制并粘贴到控制台的示例文件的第一行。当然是这样!它永远不会结束。我尝试使用中断在我认为合适的地方,但最终返回到原来的位置,只计算了一行 Scanner scan = new Scanner(System.in); //Scanner System.out.pr
,它将完成我复制并粘贴到控制台的示例文件的第一行。当然是这样!它永远不会结束。我尝试使用中断代码>在我认为合适的地方,但最终返回到原来的位置,只计算了一行
Scanner scan = new Scanner(System.in); //Scanner
System.out.println("Enter a DNA sequence consisting of A, T, G, and C, on one line: "); //Instructions for user.
dnaSequence = scan.nextLine(); //Scan for next line of string.
dnaSequence = dnaSequence.toUpperCase(); //Converts all letters entered upper case to avoid issues.
while(scan.hasNext()){
for (int i = 0; i < dnaSequence.length(); i++) //Make i = 0, i has to be less than the length of the entered sequence, will excute count.
{
validCount = dnaSequence.charAt(i); //[FILL IN!]
switch (validCount) //Switch for all valid counts
{
case 'A' : //For any case A.
countA++; //Count all As.
break;
case 'T' : //For any case T.
countT++; //Count all Ts.
break;
case 'C' : //For any case C.
countC++; //Count all Cs.
break;
case 'G' : //For any case G.
countG++; //Count all Gs.
break;
}
}
totalCountGC = countG + countC; //Math for G and C, together.
totalCountSequence = countA + countT + countG + countC; //Math for total count of all other counts in switch.
Scanner scan=新的扫描仪(System.in)//扫描仪
println(“在一行输入由a、T、G和C组成的DNA序列:”//用户使用说明。
dnaSequence=scan.nextLine()//扫描下一行字符串。
dnaSequence=dnaSequence.toUpperCase()//将所有输入的字母转换为大写,以避免出现问题。
while(scan.hasNext()){
对于(int i=0;i
您从不使用循环中的任何输入。您实际读取新数据的唯一时间是在您进入while循环之前,在这一行:
dnaSequence = scan.nextLine();
所以基本上你所做的就是从你的输入中读取一行,然后在同一行上一遍又一遍地进行计算
移动它,将toUpperCase
放入循环中,它将继续读取新行,并最终消耗所有输入。
因此,您的代码如下所示:
while(scan.hasNextLine()){
String dnaSequence = scan.nextLine().toUpperCase();
for (int i = 0; i < dnaSequence.length(); i++){
validCount = dnaSequence.charAt(i);
switch (validCount){
case 'A' :
countA++;
break;
case 'T' :
countT++;
break;
case 'C' :
countC++;
break;
case 'G' :
countG++;
break;
}
}
}
while(scan.hasNextLine()){
字符串dnaSequence=scan.nextLine().toUpperCase();
对于(int i=0;i
在这种情况下,我假设您正在使用类似于文件输入重定向的东西进行输入,而不是手动键入行。如果您确实在运行时键入了行,那么这将不起作用,因为程序无法知道您何时完成了输入。您从未在循环中使用任何输入。只有在实际读取新数据是在您进入while循环之前,在这一行:
dnaSequence = scan.nextLine();
所以基本上你所做的就是从你的输入中读取一行,然后在同一行上一遍又一遍地进行计算
移动它,将toUpperCase
放入循环中,它将继续读取新行,并最终消耗所有输入。
因此,您的代码如下所示:
while(scan.hasNextLine()){
String dnaSequence = scan.nextLine().toUpperCase();
for (int i = 0; i < dnaSequence.length(); i++){
validCount = dnaSequence.charAt(i);
switch (validCount){
case 'A' :
countA++;
break;
case 'T' :
countT++;
break;
case 'C' :
countC++;
break;
case 'G' :
countG++;
break;
}
}
}
while(scan.hasNextLine()){
字符串dnaSequence=scan.nextLine().toUpperCase();
对于(int i=0;i
在这种情况下,我假设您正在使用类似于文件输入重定向的东西进行输入,而不是手动键入行。如果您确实在运行时键入了行,那么这将不起作用,因为程序无法知道您何时完成了输入。您从未在循环中使用任何输入。只有在实际读取新数据是在您进入while循环之前,在这一行:
dnaSequence = scan.nextLine();
所以基本上你所做的就是从你的输入中读取一行,然后在同一行上一遍又一遍地进行计算
移动它,将toUpperCase
放入循环中,它将继续读取新行,并最终消耗所有输入。
因此,您的代码如下所示:
while(scan.hasNextLine()){
String dnaSequence = scan.nextLine().toUpperCase();
for (int i = 0; i < dnaSequence.length(); i++){
validCount = dnaSequence.charAt(i);
switch (validCount){
case 'A' :
countA++;
break;
case 'T' :
countT++;
break;
case 'C' :
countC++;
break;
case 'G' :
countG++;
break;
}
}
}
while(scan.hasNextLine()){
字符串dnaSequence=scan.nextLine().toUpperCase();
对于(int i=0;i
在这种情况下,我假设您正在使用类似于文件输入重定向的东西进行输入,而不是手动键入行。如果您确实在运行时键入了行,那么这将不起作用,因为程序无法知道您何时完成了输入。您从未在循环中使用任何输入。只有在实际读取新数据是在您进入while循环之前,在这一行:
dnaSequence = scan.nextLine();
所以基本上你所做的就是r