Eu queria que se alguem digitasse uma string no scanner de numeros ele só reiniciasse a pergunta

Queria saber se é possivel que se alguem escrevesse um numero no scanner de strings algum erro acontece-se e ele reiniciasse a pergunta ao inves de parar de funcionar,qualquer ajuda é bem vinda.

package a;

import java.util.Scanner;

public class Calculations {

public static void main(String[] args) {
	
		
		long FlourAmount = 0;
		long FlourMin = 200; //grams
		long EggsAmount = 0;
		long EggsMin = 1 ; 
		long MilkAmount = 0;
		long MilkMin = 500; //miligrams
		long ButterAmount = 0;
		long ButterMin = 30; //grams
		String Yes = null;
		String UserName = null;
		String Manteiga = null;
		
		boolean DeuErrado;
		DeuErrado = false;
		Scanner userImput;
		userImput = new Scanner(System.in);
		Scanner userImputNumbers;
		userImputNumbers = new Scanner(System.in);
		//constructor
		
		System.out.println("Olá !" + System.lineSeparator() + "Iniciando CakeMaker2000..");
		
		System.out.println("Tudo Pronto !");
		//Pergunta se o seu nome está certo
		while (!"S".equalsIgnoreCase(Yes)) {
			
			
		System.out.println("Qual é seu nome?");
		UserName = userImput.nextLine();
		
		System.out.println("O seu nome é " + UserName + " ?");
		Yes = userImput.nextLine();
		
		}
		while(DeuErrado != true) {
		try {
		System.out.println("Seja Bem Vindo "+UserName+" ! \nQuantos gramas de farinha você tem ?");
		FlourAmount = userImputNumbers.nextLong();
		}catch(Exception noInt){
			System.out.println("Não entendi..");
			DeuErrado = false;
			
		}
		DeuErrado = true;
		}
		
		try {
		System.out.println("Quantos ovos você tem ?");
		EggsAmount = userImputNumbers.nextLong();
		}finally{}
		
		try {
		System.out.println("Quantos mililitros de leite você tem ?");
		MilkAmount = userImputNumbers.nextLong();
		}finally{}
		
		
		while(DeuErrado != true) {
			System.out.println("Você vai usar manteiga ou margarina ?");
			Manteiga = userImput.nextLine();
			
			if (Manteiga.equalsIgnoreCase("Manteiga") ||Manteiga.equalsIgnoreCase("Margarina")) {
			DeuErrado = true;
			
		}else {
			System.out.println("Não Entendi ..");
			
			
		}}
		try {
			System.out.println("Quantos gramas de " + Manteiga +" você tem ?");
			
			ButterAmount = userImputNumbers.nextLong();
		}finally {}
		
			//Main code here
			
			if(FlourAmount < FlourMin || EggsAmount < EggsMin || MilkAmount < MilkMin || ButterAmount < ButterMin) {
			int FORrunning = 0;
				while (FORrunning != 666) {
			for (int Jint = 0;Jint !=666;Jint++)
			{
				System.out.println("Você não tem os ingredientes para fazer um bolo.. ");
				
			}
			
			FORrunning++;
			}
			for(int I = 0; I != 100;) {
				
				System.out.println("huAHUhuAHUhauHAUhauhUAHuhauHAUhauHAUhauhUAHuahUHAuhauHAUhauHAUhuahUAHUhauHAUhauHAUHuahUAHuahUHAUhauHAUhauHAUhauhUAHuahUHAUhauHAUhauUAuahuHAuhUHAuha");
				System.out.println("Bem vindo "+ UserName +" !"+System.lineSeparator()+"Bem vindo ao InFeRnO ");
				I++;
			}
			System.exit(0);
			}else {
				FlourAmount = FlourAmount/FlourMin;
				System.out.println("Você tem " + FlourAmount + " gramas de farinha");
				EggsAmount = EggsAmount/EggsMin;
				System.out.println("Você tem " + EggsAmount + " ovos");
				MilkAmount = MilkAmount/MilkMin;
				System.out.println("Você tem " + MilkAmount + " mililitros de leite");
				ButterAmount = ButterAmount/ButterMin;
				System.out.println("Você tem " + ButterAmount + " gramas de " + Manteiga);
				//find smallest number of em
				long menor;
				menor = 0;
				if(EggsAmount <= ButterAmount && ButterAmount <= MilkAmount && MilkAmount <= FlourAmount) {
					menor = EggsAmount;
				}else if (ButterAmount <= MilkAmount && MilkAmount <= FlourAmount && FlourAmount <= EggsAmount) {
					menor = ButterAmount;
					}else if(MilkAmount <= FlourAmount && FlourAmount <= EggsAmount && EggsAmount <= ButterAmount) {
						menor = MilkAmount;
					}else if(FlourAmount <= EggsAmount && EggsAmount <= ButterAmount && ButterAmount <= MilkAmount) {
					menor = FlourAmount;	
					}
				System.out.println(UserName +",\nVocê pode fazer " + menor + " Bolos ! ");
									
				
			}
			
			
		
		}
		
		
		
		
		
		}

Costumo utilizar uma classe StdIO pra facilitar a interação via console:

public class Calculations {

    public static void main(String[] args) {

        long flourAmount = 0;
        long flourMin = 200; // grams
        long eggsAmount = 0;
        long eggsMin = 1;
        long milkAmount = 0;
        long milkMin = 500; // miligrams
        long butterAmount = 0;
        long butterMin = 30; // grams
        String yes = null;
        String userName = null;
        String manteiga = null;

        StdIO.println("Olá !" + System.lineSeparator() + "Iniciando CakeMaker2000..");

        StdIO.println("Tudo Pronto !");
        // Pergunta se o seu nome está certo
        while (!"S".equalsIgnoreCase(yes)) {
            userName = StdIO.readString("Qual é seu nome? ", texto -> !texto.trim().isEmpty());
            StdIO.println();
            yes = StdIO.readString("O seu nome é " + userName + " ? ", texto -> "S".equals(texto) || "N".equals(texto));
        }
        flourAmount = StdIO.readLong("Seja Bem Vindo " + userName + " ! \nQuantos gramas de farinha você tem ? ");
        eggsAmount = StdIO.readLong("Quantos ovos você tem ? ");
        milkAmount = StdIO.readLong("Quantos mililitros de leite você tem ? ");
        manteiga = StdIO.readString("Você vai usar manteiga ou margarina ? ", texto -> "Manteiga".equalsIgnoreCase(texto) || "Margarina".equalsIgnoreCase(texto));
        butterAmount = StdIO.readLong("Quantos gramas de " + manteiga + " você tem ? ");

        if (flourAmount < flourMin || eggsAmount < eggsMin || milkAmount < milkMin || butterAmount < butterMin) {
            int forRunning = 0;
            while (forRunning != 666) {
                for (int Jint = 0; Jint != 666; Jint++) {
                    StdIO.println("Você não tem os ingredientes para fazer um bolo.. ");
                }
                forRunning++;
            }
            for (int I = 0; I != 100;) {
                StdIO.println("huAHUhuAHUhauHAUhauhUAHuhauHAUhauHAUhauhUAHuahUHAuhauHAUhauHAUhuahUAHUhauHAUhauHAUHuahUAHuahUHAUhauHAUhauHAUhauhUAHuahUHAUhauHAUhauUAuahuHAuhUHAuha");
                StdIO.println("Bem vindo " + userName + " !" + System.lineSeparator() + "Bem vindo ao InFeRnO ");
                I++;
            }
            System.exit(0);
        } else {
            flourAmount = flourAmount / flourMin;
            StdIO.println("Você tem " + flourAmount + " gramas de farinha");
            eggsAmount = eggsAmount / eggsMin;
            StdIO.println("Você tem " + eggsAmount + " ovos");
            milkAmount = milkAmount / milkMin;
            StdIO.println("Você tem " + milkAmount + " mililitros de leite");
            butterAmount = butterAmount / butterMin;
            StdIO.println("Você tem " + butterAmount + " gramas de " + manteiga);
            // find smallest number of em
            long menor;
            menor = 0;
            if (eggsAmount <= butterAmount && butterAmount <= milkAmount && milkAmount <= flourAmount) {
                menor = eggsAmount;
            } else if (butterAmount <= milkAmount && milkAmount <= flourAmount && flourAmount <= eggsAmount) {
                menor = butterAmount;
            } else if (milkAmount <= flourAmount && flourAmount <= eggsAmount && eggsAmount <= butterAmount) {
                menor = milkAmount;
            } else if (flourAmount <= eggsAmount && eggsAmount <= butterAmount && butterAmount <= milkAmount) {
                menor = flourAmount;
            }
            StdIO.println(userName + ",\nVocê pode fazer " + menor + " Bolos ! ");
        }
    }
}

Cara, muito obrigado pela ajuda , mas o readInt não está mudando a int flouramount por algum motivo , e quando eu ponho para StdIO.println(flourAmount);
a resposta é null como se fosse uma string…

Description Resource Path Location Type
Cannot invoke test(int) on the primitive type int StdIO.java /a/src/a line 463 Java Problem

Se você não postar o código que fez, não tem como identificar o problema.

package a;

import java.util.;
import java.io.
;

public class Calculations2 {

public static void main(String[] args) {

    int flourAmount = 0;
    int flourMin = 1; // grams
    int eggsAmount = 0;
    int eggsMin = 1;
    int milkAmount = 0;
    int milkMin = 1; // miligrams
    int butterAmount = 0;
    int butterMin = 1; // grams
    String yes = null;
    String userName = null;
    String manteiga = null;
    String test ;

    StdIO.println("Olá !" + System.lineSeparator() + "Iniciando CakeMaker2000..");

    StdIO.println("Tudo Pronto !");
    // Pergunta se o seu nome está certo
    while (!"S".equalsIgnoreCase(yes)) {
        userName = StdIO.readString("Qual é seu nome? ", texto -> !texto.trim().isEmpty());
        StdIO.println();
        yes = StdIO.readString("O seu nome é " + userName + " ? ", texto -> "S".equalsIgnoreCase(texto) || "N".equalsIgnoreCase(texto));
    }
    StdIO.print("Seja bem vindo " +userName+ " !"+System.lineSeparator());
  pText(flourAmount,"Quantos gramas de farinha você tem ?");
   StdIO.println(flourAmount);

  pText(eggsAmount,"Quantos ovos você tem ?");
  pText(milkAmount,"Quantos mililitros de leite você tem ?");
  manteiga = StdIO.readString("Você vai usar manteiga ou margarina ? ", texto -> "Manteiga".equalsIgnoreCase(texto) || "Margarina".equalsIgnoreCase(texto));
  pText(butterAmount,"Quantos gramas de manteiga você tem ?");
    if (flourAmount < flourMin || eggsAmount < eggsMin || milkAmount < milkMin || butterAmount < butterMin) {
        int forRunning = 0;
        while (forRunning != 2) {
            for (int Jint = 0; Jint != 666; Jint++) {
                StdIO.println("Você não tem os ingredientes para fazer um bolo.. ");
            }
            forRunning++;
        }
        for (int I = 0; I != 2;) {
            StdIO.println("huAHUhuAHUhauHAUhauhUAHuhauHAUhauHAUhauhUAHuahUHAuhauHAUhauHAUhuahUAHUhauHAUhauHAUHuahUAHuahUHAUhauHAUhauHAUhauhUAHuahUHAUhauHAUhauUAuahuHAuhUHAuha");
            StdIO.println("Bem vindo " + userName + " !" + System.lineSeparator() + "Bem vindo ao InFeRnO ");
            I++;
        }
        System.exit(0);
    } else {
        flourAmount = flourAmount / flourMin;
        StdIO.println("Você tem " + flourAmount + " gramas de farinha");
        eggsAmount = eggsAmount / eggsMin;
        StdIO.println("Você tem " + eggsAmount + " ovos");
        milkAmount = milkAmount / milkMin;
        StdIO.println("Você tem " + milkAmount + " mililitros de leite");
        butterAmount = butterAmount / butterMin;
        StdIO.println("Você tem " + butterAmount + " gramas de " + manteiga);
        // find smallest number of em
        long menor;
        menor = 0;
        if (eggsAmount <= butterAmount && butterAmount <= milkAmount && milkAmount <= flourAmount) {
            menor = eggsAmount;
        } else if (butterAmount <= milkAmount && milkAmount <= flourAmount && flourAmount <= eggsAmount) {
            menor = butterAmount;
        } else if (milkAmount <= flourAmount && flourAmount <= eggsAmount && eggsAmount <= butterAmount) {
            menor = milkAmount;
        } else if (flourAmount <= eggsAmount && eggsAmount <= butterAmount && butterAmount <= milkAmount) {
            menor = flourAmount;
        }
        StdIO.println(userName + ",\nVocê pode fazer " + menor + " Bolos ! ");
    }
}
public static void pText(int valor,String texto) {
	 boolean DeuErrado = true;
	while(DeuErrado == true) {
	    	try{valor = StdIO.readInt(texto);
	        DeuErrado = false; 
	        }catch( java.lang.NumberFormatException e){
	    	   StdIO.print("So use números por favor" +System.lineSeparator());
	    	   DeuErrado = true;
	       }}
	DeuErrado = true;
	
}

}

Primeiro, o código que você postou nem compila pois os import estão com sintaxe inválida.
Segundo, se arrumar os import e executar o programa, a saída será idêntica à essa:

Olá !
Iniciando CakeMaker2000..
Tudo Pronto !
Qual é seu nome? Ricardo

O seu nome é Ricardo ? S
Seja bem vindo Ricardo !
Quantos gramas de farinha você tem ?100
0
Quantos ovos você tem ?3
Quantos mililitros de leite você tem ?500
Você vai usar manteiga ou margarina ? Margarina
Quantos gramas de manteiga você tem ?500
Você não tem os ingredientes para fazer um bolo..  ( essa linha repetida 1332 vezes)
huAHUhuAHUhauHAUhauhUAHuhauHAUhauHAUhauhUAHuahUHAuhauHAUhauHAUhuahUAHUhauHAUhauHAUHuahUAHuahUHAUhauHAUhauHAUhauhUAHuahUHAUhauHAUhauUAuahuHAuhUHAuha
Bem vindo Ricardo !
Bem vindo ao InFeRnO 
huAHUhuAHUhauHAUhauhUAHuhauHAUhauHAUhauhUAHuahUHAuhauHAUhauHAUhuahUAHUhauHAUhauHAUHuahUAHuahUHAUhauHAUhauHAUhauhUAHuahUHAUhauHAUhauUAuahuHAuhUHAuha
Bem vindo Ricardo !
Bem vindo ao InFeRnO 

Dica: Nem tem como o flourAmount ser impresso nomo null, afinal, é um tipo primitivo e não um objeto.

Ou você posta o código que realmente está apresentando valores null ou não vai dar pra te ajudar.

Esse daqui ta dando zero agora , mas antes tava dando null por algum motivo… mas era para ele imprimir o numero que você digitou , entende?
quando uso flourAmount = StdIO.readInt();

aquele pText() é isso daqui ó :

public static void pText(int valor,String texto) {
boolean DeuErrado = true;
while(DeuErrado == true) {
try{valor = StdIO.readInt(texto);
DeuErrado = false;
}catch( java.lang.NumberFormatException e){
StdIO.print(“So use números por favor” +System.lineSeparator());
DeuErrado = true;
}}
DeuErrado = true;

}

Depois do valor que você digita é para aparecer o valor da variavel que deveria mudar…
Acho que estou usando errado …
PS: desculpa elas linhas repitidas , é que eu iria mandar pra um amigo nque tbm ta apredendo java… kkk dsclpa ai , e obrigado por me ajudar tanto ! (kkkkkk meu deus q vergonha era pra eu tirar isso)

O teu método pText é void e java não passa tipos primitivos por referência, você tem que fazer assim:

public static int pText(String texto) {
    while (true) {
        try{
            return StdIO.readInt(texto);
        } catch (NumberFormatException e){
            StdIO.println("So use números por favor");
        }
    }
}

E usar asim:

flourAmount = pText("Quantos gramas de farinha você tem ?");
StdIO.println(flourAmount);
1 curtida