2016-07-06 101 views
0

在这段代码中,从我看到的所有内容中,只要输入1和0,就应该输入for循环,然后输入if语句,这正是我正在做的。它并没有进入它,正如我从我的印刷报告中看到的那样。输入if语句

我没有看到一个原因。

如果它没有进入if声明,我也是不清楚该怎么做,因为我怀疑的是,它只会设置true如果最后位不是1或0:我的意图是为zeroesAndOnesfalse如果有什么除了1和0被输入。然而,就目前而言,它始终是false

System.out.println("Please enter a 32 bit number consisting of " 
         + "1's and 0's."); 
    String number = kb.nextLine(); 
    int count = 0; 
    boolean zeroesAndOnes = false; 
    for(int i = 0; i < number.length(); i++){ 

     if(number.charAt(i) == '0' || number.charAt(i) == '1'){ 

      zeroesAndOnes = true; 
      System.out.println("If boolean " + zeroesAndOnes); 
     } 

     else{ 

      zeroesAndOnes = false; 
      count++; 
     } 
    } 
    System.out.println("If boolean end " + zeroesAndOnes); 


    if(number.length() == 32 && count > 1){ 

     if(number.charAt(0) + number.charAt(1) % 2 == 1){ 
      symmDiff = 1; 
      } 
     else{ 
      symmDiff = 0; 
     } 
for(int i = 2; i < number.length(); i++){ 

       if((symmDiff + number.charAt(i)) % 2 == 1){ 
        symmDiff = 1; 
       } 
       else{ 
        symmDiff = 0; 
       } 

      } 

      System.out.println("The parity bit for this number is " + symmDiff); 
     } 
     else{ 
      System.out.println("These numbers do not match the specification."); 
     } 
+6

'number.charAt(I)== 0'你可能希望在这里例如比较char值'number.charAt(I)==“0'' – copeg

+0

谢谢!这解决了这个问题。你碰巧对第二部分有任何想法 - 我现在如何拥有它,最终位决定它是真是假。只有当所有的位都是1或0时,我才希望它是真实的,但我想不出任何东西。 – Tonantzin

+1

当您找到“1”或“0”时,请停止将其设置为“true”。将布尔值初始化为“true”而不是“false”,并且只有在发生违规时才将其设置为“false”。一旦出现“假”,切勿将其重新设置为“true”。 –

回答

2

当检查字符相等时,确保比较是你所需要的。例如

if(number.charAt(i) == 0) 

检查十进制值是否相等。要检查是否有实际的 '0' 字符,比较char值

if (number.charAt(i) == '0') 
+0

谢谢,以及!我也会问你 - 你对第二部分有什么想法 - 现在我有了它,最终位决定它是真是假。只有当所有的位都是1或0时,我才希望它是真实的,但我想不出任何东西。 – Tonantzin

+0

您可以通过多种方式验证用户输入。一个可能是计算每个正确的值,然后检查这个计数是否等于预期的长度 - 如果这样设置“zeroesAndOnes”为true – copeg

+0

我在上面添加了我的代码的其余部分,并且在我读这之前有一个类似的想法对假值使用计数。但现在,不管我放什么东西,我总是得到我的“这些数字不符合规格”的信息。 – Tonantzin

0

比较一个字符,你应该使用

if(number.chartAt(i) == '0') 

另一个问题是number.charAt(0)会给你CHAR不是int 。所以当你在做

number.charAt(0)+number.charAt(1) //you are concatenating character at index 0 and index 1 
// do this 
int first = Integer.parseInt(number.substring(0,1)); 
int second = Integer.parseInt(number.substring(1,2)); 
if((first+second)%2 == 1){ 
    // your statement 
} 
+0

我甚至没有注意到这个错误。谢谢!当我试图修改我的for循环时,我无法使它工作:if((symmDiff + number.substring(i,i + 1))%2 == 1){我从来没有使用子字符串。它抱怨这部分的mod操作符。 – Tonantzin

+0

等待,我改变了并增加了对(INT I = 2; I Tonantzin

+0

什么是'if((symmDiff + num1)%2 == 1'?我可以说,它相当于'if(symmDiff!= num1)'。 –