我是一名初级程序员。这就是我到目前为止所拥有的。这个问题的方向有点难。以下是我正在努力实现的目标。。
您将编写一个程序,将二进制数转换为基数为10的数字。这个程序将要求用户输入一个二进制数字。您必须验证用户输入的内容只有0和1。在用户输入字母的情况下,您必须不断要求用户输入另一个字母。当输入有效时,您将把二进制数转换为以10为基数的数字。请使用A2.zip文件中提供的Question1.java文件。
有效输入-为了检查输入是否有效,程序应该调用CheckInputCorrect方法,该方法将String作为输入参数并返回布尔值。如果输入字符串对应于二进制表示中的数字,则认为它是有效的。更具体地说,在CheckInputCorrect方法中,您应该扫描此字符串以确保它只包含"0"或"1"个字符。一旦找到不是"0"或"1"的字符,该方法就会返回false。如果该方法到达输入字符串的末尾(即所有字符都是"0"或"1"),则该方法应返回true。
Converter-在这一点上,我们假设输入字符串是有效的(使用CheckInputCorrect方法进行检查)。要将输入从二进制转换为基数10,必须实现BinaryToNumber方法。BinaryToNumber方法应将String作为参数,并返回一个整数,该整数对应于以10为基数的转换值。二进制转换的工作方式如下。对于二进制数中的每个数字,如果数字为"1",则应将相应的十进制值(最右边的数字为20,左边的下一个数字为21,下一个为22,依此类推)添加到一个变量中,该变量将保存要返回的最终结果。这可以通过使用循环轻松完成。
1) 我走的路对吗?2) 我不知道自己在做什么,需要你帮我弄清楚。。。。
更新1:
当我运行这个vvvv时:它说:"请输入一个二进制数字让我转换:然后输入一个地方让我输入答案,但无论我放什么,它都会返回另一个框让我输入,但停止并没有评估任何内容。
import java.util.Scanner;
public class Question1
{
public static void main(String[] args)
{
System.out.println("Please enter a binary number for me to convert to decimal: ");
Scanner inputKeyboard = new Scanner(System.in);
String inputUser = inputKeyboard.nextLine();
boolean BinaryNumber = false;
String inputString = "";
while (!BinaryNumber){
inputString = inputKeyboard.next();
BinaryNumber = CheckInputCorrect(inputString);
System.out.println("You have given me a " + BinaryNumber + "string of binary numbers.");
}
int finalNumber = BinaryToNumber(inputString);
System.out.println("Congratulations, your binary number is " + finalNumber + ".");
}
public static boolean CheckInputCorrect(String input)
{
for (int i = 0; i < input.length(); i++)
{
while (i < input.length());
if (input.charAt(i) != '0' && input.charAt(i) != '1')
{return false;}
i++;
}
return true;
}
public static int BinaryToNumber(String numberInput)
{
int total = 0;
for (int i = 0; i < numberInput.length(); i++){
if (numberInput.charAt(i)=='1')
{
total += (int)Math.pow(2,numberInput.length() - 1 - i);
}
}
return total;
}
}
Original:
import java.util.Scanner;
public class Question1
{
public static void main(String[] args)
{
int binarynumber;
int arraySize = {0,1};
int[] binaryinput = new int[arraySize];
Scanner input = new Scanner(System.in);
System.out.println("Please enter a binary number");
binarynumber = in.nextInt();
if (binarynumber <0)
{
System.out.println("Error: Not a positive integer");
}
if (CheckInputCorrect) = true;
{
System.out.print(CheckInputCorrect);
}
public static boolean CheckInputCorrect(String input);
{
boolean b = true;
int x, y;
x = 0
y = 1
b = x || y
while (b >= 0 {
System.out.print("Please enter a binary number")
for (int i = 0; i < binarynumber.length; i++)
{
binaryinput[i] = in.nextInt();
if (binaryinput[i] = b.nextInt();
System.out.printl("Binary number is:" + binaryinput);
break outer;
if (binarynumber != b)
{
System.out.println("Error: Not a binary number")
}
return true;
}
}
public static int BinaryToNumber(String numberInput)
{
int remainder;
if (binarynumber <= 1) {
System.out.print(number);
return; // KICK OUT OF THE RECURSION
}
remainder = number %2;
printBinaryform(number >> 1);
System.out.print(remainder);
return 0;
}
}
}
正如我在评论中提到的,您更新的代码包含两个错误
while (i < input.length());
是一个无限循环,因为它没有主体。因此CCD_ 2不能增加并且将保持低于CCD_ 3- CCD_ 4在第一个输入之后请求另一个输入,并且第一个输入将被忽略
这是您更新代码的固定和注释版本:
public class Question1 {
public static void main(String[] args) {
System.out.println("Please enter a binary number for me to convert to decimal: ");
Scanner inputKeyboard = new Scanner(System.in);
String inputUser = inputKeyboard.nextLine();
//boolean BinaryNumber = false; // not needed anymore
//String inputString = ""; // not needed too
while (!checkInputCorrect(inputUser)) { // there is no reason for using a boolean var here .. directly use the returned value of this method
System.out.println("You have given me an invalid input. Please enter a binary number: "); // changed this message a little bit
inputUser = inputKeyboard.nextLine(); // re-use the "old" variable inputUser here
}
int finalNumber = binaryToNumber(inputUser);
System.out.println("Congratulations, your decimal number is " + finalNumber + ".");
}
public static boolean checkInputCorrect(String input) { // method names should start with a lower case letter
for (int i = 0; i < input.length(); i++) {
//while (i < input.length()); // this loop is deadly. Please think about why
if (input.charAt(i) != '0' && input.charAt(i) != '1') {
return false;
}
//i++; // what is the purpose of this? The "for" loop will increment "i" for you
}
return true;
}
public static int binaryToNumber(String numberInput) { //method name ... lower case letter ;)
int total = 0;
for (int i = 0; i < numberInput.length(); i++) {
if (numberInput.charAt(i) == '1') {
total += (int) Math.pow(2, numberInput.length() - 1 - i);
}
}
return total;
}
}